Azure OpenAI Assistants-funktionsanrop (klassisk)

Gäller endast för:Foundry-portalen (klassisk). Den här artikeln är inte tillgänglig för den nya Foundry-portalen. Läs mer om den nya portalen.

Observera

Länkar i den här artikeln kan öppna innehåll i den nya Microsoft Foundry-dokumentationen i stället för den foundry-dokumentation (klassisk) som du visar nu.

Observera

Assistants API är föråldrat och kommer att tas ur bruk den 26 augusti 2026. Använd den allmänt tillgängliga tjänsten Microsoft Foundry Agents. Följ migreringsguiden för att uppdatera dina arbetsbelastningar. Läs mer.

API:et Assistants stöder funktionsanrop, vilket gör att du kan beskriva strukturen för funktioner till en assistent och sedan returnera de funktioner som måste anropas tillsammans med deras argument.

Stöd för funktionsanrop

Modeller som stöds

Sidan modeller innehåller den mest aktuella informationen om regioner och modeller där assistenter stöds.

Om du vill använda alla funktioner i funktionsanrop, inklusive parallella funktioner, måste du använda en modell som släpptes efter den 6 november 2023.

API-versioner

API-versioner som börjar med 2024-02-15-preview.

Exempel på funktionsdefinition

Observera

  • Vi har lagt till stöd för parametern tool_choice som kan användas för att tvinga fram användning av ett specifikt verktyg (till exempel file_search, code_interpretereller en function) i en viss körning.
  • Körningar går ut tio minuter efter skapandet. Se till att skicka dina verktygsutdata innan det upphör att gälla.
  • Du kan också utföra funktionsanrop med 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"]
      }
    }
  }]
)

Att läsa funktionerna

När du initierar en Körning med ett användarmeddelande som utlöser funktionen, kommer Körningen att gå in i väntande status. När den har bearbetats kommer körningen in i ett requires_action-tillstånd som du kan verifiera när du hämtar Körningen.

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

Skicka funktionsutdata

Du kan sedan slutföra Körningen genom att skicka verktygsutdata från de funktioner som du anropar. Skicka det tool_call_id som refereras i required_action objektet, så att utdata matchar varje funktionsanrop.


# 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)

När du har skickat verktygsutdata kommer Körningen att gå in i queued-tillståndet innan den fortsätter att köras.

Se även