Safetensors
Japanese
llama
unsloth
File size: 3,310 Bytes
a2429c1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3d62cea
 
a2429c1
3d62cea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2429c1
73dc282
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
---
license: mit
tags:
- unsloth
language:
- ja
datasets:
- SousiOmine/Japanese-Pythonic-FunctionCall
- Kendamarron/jimba-instruction-all
base_model:
- sbintuitions/sarashina2.2-3b-instruct-v0.1
---

https://qiita.com/SousiOmine/items/23313089c7c3f498996b

# 概要
sbintuitions/sarashina2.2-3b-instruct-v0.1に、
Kendamarron/jimba-instruction-allとSousiOmine/Japanese-Pythonic-FunctionCallを用いたQLoRAファインチューニングを行い、
python関数の呼び出しに対応させたモデルです。  

# 使い方
```
system_tool_format = """{}

#ツール
ユーザーの要望達成を支援するために、1つ以上のpython関数を呼び出すことができます。
呼び出せるpythonの関数を<tools></tools>タグ内に記します。

<tools>
{}
</tools>

関数を呼び出すには、以下のように関数名と引数を<tool_call></tool_call>タグ内に記述してください。
<tool_call>
function_name(param1=value1, param2=value2)
</tool_call>
"""

# お好きなシステムプロンプトをどうぞ
system = "あなたは役に立つアシスタントです。"

# ツールはdocstring付きで文字で書いてね
tools = """def perform_web_search(query: str) -> list:
    \"\"\"
    ウェブ検索を実行します。

    Args:
        query (str): 検索クエリ。例: "東京の天気"

    Returns:
        list: 検索結果のリスト。各要素はウェブページのタイトルとURLです。
    \"\"\"
    pass


def get_weather(city: str) -> dict:
    \"\"\"
    指定した都市の現在の天気情報を取得します。

    Args:
        city (str): 天気を確認したい都市の名前。例: "東京"

    Returns:
        dict: 天気情報の辞書。{'temperature': 20.5, 'condition': 'Cloudy', 'humidity': 72}
    \"\"\"
    pass


def execute_script(script: str) -> str:
    \"\"\"
    ユーザから受け取ったスクリプトまたはコマンドを実行します。

    Args:
        script (str): 実行したいコマンドまたはスクリプト。例: "ls -la"

    Returns:
        str: 実行結果の出力またはエラーメッセージ。
    \"\"\"
    pass

"""

prompt = "今日のAIニュースと埼玉の天気を教えて"
chat = [
    {"role": "system", "content": system_tool_format.format(system, tools)},
    {"role": "user", "content": prompt},
]

# Unslothのサンプルから持ってきました チャットテンプレート適用してやればほかのでいけるはず
input = tokenizer.apply_chat_template(chat, tokenize = False, add_generation_prompt = True)
#print(input)

FastLanguageModel.for_inference(model)
inputs = tokenizer(
[
    input
], return_tensors = "pt").to("cuda")

from transformers import TextStreamer
text_streamer = TextStreamer(tokenizer)
_ = model.generate(**inputs, streamer = text_streamer, temperature=0.7, max_new_tokens = 1024)

# 応答の例
# <|assistant|><tool_call>perform_web_search(query="AI ニュース"), get_weather(city="埼玉")</tool_call></s>

# 戻り値はこんな感じで渡してあげてください
# chat.append({"role": "user", "content": "<tool_response>戻り値はまとめてここに</tool_response>"})
```
# 注意点
- チャットテンプレートがpython関数呼び出しに対応していません。