Azure OpenAI Assistants 関数呼び出し

Assistants API では関数呼び出しがサポートされており、これによって、関数の構造をアシスタントに対して記述し、呼び出す必要がある関数をその引数と共に返すことができます。

Note

  • ファイル検索では、アシスタントあたり最大 10,000 個のファイルを取り込むことができます。これは以前の 500 倍以上の量です。 これは高速で、マルチスレッド検索を通して並列クエリをサポートしており、強化された再ランク付けとクエリの書き換えを特徴としています。
    • ベクトル ストアは、API 内の新しいオブジェクトです。 ファイルがベクトル ストアに追加されると、自動的にそのファイルの解析、チャンク、埋め込みが行われ、検索の準備が整います。 ベクトル ストアは、複数のアシスタントとスレッドにわたって使用できるため、ファイル管理と課金が単純化されます。
  • 特定の実行において特定のツール (ファイル検索、コード インタープリター、関数など) の使用を強制するために使用できる tool_choice パラメーターのサポートが追加されました。

関数呼び出しのサポート

サポートされているモデル

モデル ページには、Assistants がサポートされているリージョン/モデルに関する最新の情報が含まれています。

並列関数を含む関数呼び出しのすべての機能を使用するには、2023 年 11 月 6 日以降にリリースされたモデルを使用する必要があります。

API のバージョン

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

関数定義の例

Note

  • 特定の実行で特定のツール (file_searchcode_interpreterfunction など) の使用を強制するために使用できる、tool_choice パラメーターのサポートが追加されました。
  • 実行は、作成後 10 分後に期限切れになります。 この有効期限が切れる前に、必ずツールの出力を送信してください。
  • Azure ロジック アプリを使用して関数呼び出しを実行することもできます。
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"]
      }
    } 
  }]
)

関数の読み取り

関数をトリガーするユーザー メッセージを使用して実行を開始すると、実行は保留状態に入ります。 処理が完了すると、実行は 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": "getCurrentWeather",
            "arguments": "{\"location\":\"San Francisco\"}"
          }
        },
        {
          "id": "call_abc456",
          "type": "function",
          "function": {
            "name": "getNickname",
            "arguments": "{\"location\":\"Los Angeles\"}"
          }
        }
      ]
    }
  },
...

関数出力の送信

その後、呼び出す関数からツールの出力を送信することで、実行を完了できます。 出力を各関数呼び出しに一致させるために、上記の 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",
      },
    ]
)

ツールの出力を送信すると、実行は実行を続行する前に queued 状態に入ります。

関連項目