--- 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の関数をタグ内に記します。 {} 関数を呼び出すには、以下のように関数名と引数をタグ内に記述してください。 function_name(param1=value1, param2=value2) """ # お好きなシステムプロンプトをどうぞ 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|>perform_web_search(query="AI ニュース"), get_weather(city="埼玉") # 戻り値はこんな感じで渡してあげてください # chat.append({"role": "user", "content": "戻り値はまとめてここに"}) ``` # 注意点 - チャットテンプレートがpython関数呼び出しに対応していません。