Volání funkce Asistenti Azure OpenAI

Rozhraní API Asistenti podporuje volání funkcí, které umožňuje popsat strukturu funkcí asistentovi a pak vrátit funkce, které je potřeba volat spolu s jejich argumenty.

Poznámka:

  • Hledání souborů může ingestovat až 10 000 souborů na asistenta – 500krát více než dříve. Je to rychlý způsob, podporuje paralelní dotazy prostřednictvím vícevláknového vyhledávání a vylepšeného řazení a přepisování dotazů.
    • Vektorové úložiště je nový objekt v rozhraní API. Jakmile se soubor přidá do úložiště vektorů, automaticky se parsuje, zachytá a vloží a připraví k hledání. Vektorová úložiště se dají používat napříč asistenty a vlákny, což zjednodušuje správu souborů a fakturaci.
  • Přidali jsme podporu parametru tool_choice , který se dá použít k vynucení použití konkrétního nástroje (například vyhledávání souborů, interpret kódu nebo funkce) v určitém spuštění.

Podpora volání funkcí

Podporované modely

Stránka modelů obsahuje nejaktuálnější informace o oblastech nebo modelech, ve kterých jsou podporováni asistenti.

Pokud chcete použít všechny funkce volání funkcí, včetně paralelních funkcí, musíte použít model, který byl vydán po 6. listopadu 2023.

Verze rozhraní API

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

Příklad definice funkce

Poznámka:

  • Přidali jsme podporu parametru tool_choice , který lze použít k vynucení použití konkrétního nástroje (například file_search, code_interpreternebo a function) v určitém spuštění.
  • Po vytvoření vyprší platnost deseti minut. Před tímto vypršením platnosti nezapomeňte odeslat výstupy vašeho nástroje.
  • Můžete také provádět volání funkcí pomocí 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"]
      }
    } 
  }]
)

Čtení funkcí

Když spustíte spuštění se zprávou uživatele, která funkci aktivuje, zadá spuštění stav čekající na vyřízení. Po zpracování bude spuštění zadávat requires_action stav, který můžete ověřit načtením spuštění.

{
  "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\"}"
          }
        }
      ]
    }
  },
...

Odesílání výstupů funkce

Spuštění pak můžete dokončit odesláním výstupu nástroje z funkcí, které voláte. tool_call_id Předejte odkazovaný v objektu required_action výše, aby odpovídal výstupu každému volání funkce.

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",
      },
    ]
)

Po odeslání výstupu nástroje bude spuštění před pokračováním v provádění zadávat queued stav.

Viz také