Azure OpenAI 助理函式呼叫
助理 API 支援函式呼叫,其可讓您向助理描述函式的結構,然後傳回需要呼叫的函式及其引數。
注意
- 檔案搜尋可以內嵌每個助理最多 10,000 個檔案 - 比之前多 500 倍。 其速度很快,可透過多對話搜尋支援平行查詢,以及增強重新排名和查詢重寫的功能。
- 向量存放區是 API 中的新物件。 一旦檔案新增至向量存放區,它就會自動進行剖析、區塊化和內嵌,並準備好提供搜尋。 向量存放區可以跨助理和對話使用,簡化檔案管理和計費。
- 我們已新增
tool_choice
參數的支援,可用來強制在特定執行中使用特定工具 (例如檔案搜尋、程式碼解譯器或函式)。
函式呼叫支援
支援的模型
模型頁面 (英文) 包含支援助理所在區域/模型的最新資訊。
若要使用函式呼叫的所有功能 (包括平行函式),您必須使用在 2023 年 11 月 6 日之後發行的模型。
API 版本
從開始的 2024-02-15-preview
API 版本。
範例函式定義
注意
- 我們已新增
tool_choice
參數的支援,可用來強制在特定執行中使用特定工具(例如file_search
、code_interpreter
或function
)。 - 執行會在建立十分鐘後到期。 請務必在到期前提交您的工具輸出。
- 您也可以使用 Azure Logic Apps (英文) 執行函式呼叫
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"]
}
}
}]
)
讀取函式
當您使用觸發函式的使用者訊息起始 Run 時,Run 會進入擱置狀態。 處理之後,Run 會進入 requires_action 狀態,您可以擷取 Run 來進行驗證。
{
"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\"}"
}
},
]
}
},
...
提交函式輸出
然後,您可以從呼叫的函式提交工具輸出來完成 Run。 tool_call_id
傳遞物件中參考的 required_action
,以比對每個函式呼叫的輸出。
# 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)
提交工具輸出之後,Run 會進入 queued
狀態,再繼續執行。
另請參閱
- 助理 API 參考
- 深入了解如何搭配我們的 Assistants 操作說明指南來使用 Assistants。
- Azure OpenAI Assistants API 範例