Azure OpenAI Assistants 関数呼び出し
Assistants API では関数呼び出しがサポートされており、これによって、関数の構造をアシスタントに対して記述し、呼び出す必要がある関数をその引数と共に返すことができます。
Note
- ファイル検索では、アシスタントあたり最大 10,000 個のファイルを取り込むことができます。これは以前の 500 倍以上の量です。 これは高速で、マルチスレッド検索を通して並列クエリをサポートしており、強化された再ランク付けとクエリの書き換えを特徴としています。
- ベクトル ストアは、API 内の新しいオブジェクトです。 ファイルがベクトル ストアに追加されると、自動的にそのファイルの解析、チャンク、埋め込みが行われ、検索の準備が整います。 ベクトル ストアは、複数のアシスタントとスレッドにわたって使用できるため、ファイル管理と課金が単純化されます。
- 特定の実行において特定のツール (ファイル検索、コード インタープリター、関数など) の使用を強制するために使用できる
tool_choice
パラメーターのサポートが追加されました。
関数呼び出しのサポート
サポートされているモデル
モデル ページには、Assistants がサポートされているリージョン/モデルに関する最新の情報が含まれています。
並列関数を含む関数呼び出しのすべての機能を使用するには、2023 年 11 月 6 日以降にリリースされたモデルを使用する必要があります。
API のバージョン
2024-02-15-preview
以降の API バージョン。
関数定義の例
Note
- 特定の実行で特定のツール (
file_search
、code_interpreter
、function
など) の使用を強制するために使用できる、tool_choice
パラメーターのサポートが追加されました。 - 実行は、作成後 10 分後に期限切れになります。 この有効期限が切れる前に、必ずツールの出力を送信してください。
- Azure ロジック アプリを使用して関数呼び出しを実行することもできます。
from openai import AzureOpenAI
client = AzureOpenAI(
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2024-07-01-preview",
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
)
assistant = client.beta.assistants.create(
name="Weather Bot",
instructions="You are a weather bot. Use the provided functions to answer questions.",
model="gpt-4", #Replace with model deployment name
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather in location",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "The city name, for example San Francisco"}
},
"required": ["location"]
}
}
}]
)
関数の読み取り
関数をトリガーするユーザー メッセージを使用して実行を開始すると、実行は保留状態に入ります。 処理が完了すると、実行は requires_action 状態に入ります。これは実行を取得することで確認できます。
{
"id": "run_abc123",
"object": "thread.run",
"assistant_id": "asst_abc123",
"thread_id": "thread_abc123",
"status": "requires_action",
"required_action": {
"type": "submit_tool_outputs",
"submit_tool_outputs": {
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"Seattle\"}"
}
},
]
}
},
...
関数出力の送信
その後、呼び出す関数からツールの出力を送信することで、実行を完了できます。 出力を各関数呼び出しに一致させるために、上記の required_action
オブジェクトで参照される tool_call_id
を渡します。
# Example function
def get_weather():
return "It's 80 degrees F and slightly cloudy."
# Define the list to store tool outputs
tool_outputs = []
# Loop through each tool in the required action section
for tool in run.required_action.submit_tool_outputs.tool_calls:
# get data from the weather function
if tool.function.name == "get_weather":
weather = get_weather()
tool_outputs.append({
"tool_call_id": tool.id,
"output": weather
})
# Submit all tool outputs at once after collecting them in a list
if tool_outputs:
try:
run = client.beta.threads.runs.submit_tool_outputs_and_poll(
thread_id=thread.id,
run_id=run.id,
tool_outputs=tool_outputs
)
print("Tool outputs submitted successfully.")
except Exception as e:
print("Failed to submit tool outputs:", e)
else:
print("No tool outputs to submit.")
if run.status == 'completed':
print("run status: ", run.status)
messages = client.beta.threads.messages.list(thread_id=thread.id)
print(messages.to_json(indent=2))
else:
print("run status: ", run.status)
print (run.last_error.message)
ツールの出力を送信すると、実行は実行を続行する前に queued
状態に入ります。
関連項目
- Assistants API リファレンス
- Assistants を使用する方法の詳細については、Assistants の攻略ガイドを参照してください。
- Azure OpenAI Assistants API のサンプル