分享方式:


Azure OpenAI 助理函式呼叫

助理 API 支援函式呼叫,其可讓您向助理描述函式的結構,然後傳回需要呼叫的函式及其引數。

注意

  • 檔案搜尋可以內嵌每個助理最多 10,000 個檔案 - 比之前多 500 倍。 其速度很快,可透過多對話搜尋支援平行查詢,以及增強重新排名和查詢重寫的功能。
    • 向量存放區是 API 中的新物件。 一旦檔案新增至向量存放區,它就會自動進行剖析、區塊化和內嵌,並準備好提供搜尋。 向量存放區可以跨助理和對話使用,簡化檔案管理和計費。
  • 我們已新增 tool_choice 參數的支援,可用來強制在特定執行中使用特定工具 (例如檔案搜尋、程式碼解譯器或函式)。

函式呼叫支援

支援的模型

模型頁面 (英文) 包含支援助理所在區域/模型的最新資訊。

若要使用函式呼叫的所有功能 (包括平行函式),您必須使用在 2023 年 11 月 6 日之後發行的模型。

API 版本

  • 2024-02-15-preview
  • 2024-05-01-preview

範例函式定義

注意

  • 我們已新增 tool_choice 參數的支援,可用來強制在特定執行中使用特定工具(例如 file_searchcode_interpreterfunction)。
  • 執行會在建立十分鐘後到期。 請務必在到期前提交您的工具輸出。
  • 您也可以使用 Azure Logic Apps (英文) 執行函式呼叫
from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-02-15-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
    )

assistant = client.beta.assistants.create(
  instructions="You are a weather bot. Use the provided functions to answer questions.",
  model="gpt-4-1106-preview", #Replace with model deployment name
  tools=[{
      "type": "function",
    "function": {
      "name": "getCurrentWeather",
      "description": "Get the weather in location",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {"type": "string", "description": "The city and state e.g. San Francisco, CA"},
          "unit": {"type": "string", "enum": ["c", "f"]}
        },
        "required": ["location"]
      }
    }
  }, {
    "type": "function",
    "function": {
      "name": "getNickname",
      "description": "Get the nickname of a city",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {"type": "string", "description": "The city and state e.g. San Francisco, CA"},
        },
        "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": "getCurrentWeather",
            "arguments": "{\"location\":\"San Francisco\"}"
          }
        },
        {
          "id": "call_abc456",
          "type": "function",
          "function": {
            "name": "getNickname",
            "arguments": "{\"location\":\"Los Angeles\"}"
          }
        }
      ]
    }
  },
...

提交函式輸出

然後,您可以從呼叫的函式提交工具輸出來完成 Run。 傳遞上述 required_action 物件中所參考的 tool_call_id,以比對每個函式呼叫的輸出。

from openai import AzureOpenAI
    
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-02-15-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT")
    )


run = client.beta.threads.runs.submit_tool_outputs(
  thread_id=thread.id,
  run_id=run.id,
  tool_outputs=[
      {
        "tool_call_id": call_ids[0],
        "output": "22C",
      },
      {
        "tool_call_id": call_ids[1],
        "output": "LA",
      },
    ]
)

提交工具輸出之後,Run 會進入 queued 狀態,再繼續執行。

另請參閱