メインコンテンツまでスキップ

Function Calling(ツール呼び出し)

モデルに「呼び出すべき関数」を提示し、引数を生成させます。OpenAI の Tool Calling 仕様と互換です。 フローは ①ツール定義つきでリクエスト → ②モデルが tool_calls を返す → ③関数を実行 → ④結果を role: tool で渡して再リクエスト の2往復です。

import os, json
from openai import OpenAI

client = OpenAI(
api_key=os.environ["LYKURO_API_KEY"],
base_url="https://api.lykuro.ai/alibaba/compatible-mode/v1",
)

tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "指定した都市の現在の天気を取得する",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string", "description": "都市名"}},
"required": ["city"],
},
},
}]

def get_weather(city: str) -> str:
return json.dumps({"city": city, "weather": "晴れ", "temp_c": 22})

messages = [{"role": "user", "content": "東京の天気は?"}]

# ① ツール定義つきでリクエスト
resp = client.chat.completions.create(model="qwen-plus", messages=messages, tools=tools)
msg = resp.choices[0].message
messages.append(msg)

# ② モデルが返した tool_calls を実行
for call in msg.tool_calls or []:
args = json.loads(call.function.arguments)
result = get_weather(**args)
messages.append({"role": "tool", "tool_call_id": call.id, "content": result})

# ③ 結果を渡して最終回答を生成
final = client.chat.completions.create(model="qwen-plus", messages=messages, tools=tools)
print(final.choices[0].message.content)

:::tip 対応モデル Function Calling は qwen-plus / qwen-max / qwen3-max / deepseek-chat などで利用できます。 対応状況は モデル一覧 を参照してください。 :::