| --- |
| 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関数呼び出しに対応していません。 |