Dela via


Funktionsanrop för Azure OpenAI Assistants

Anmärkning

Azure AI Foundry Agent Service är nu allmänt tillgänglig, vilket ger fler verktyg och bättre företagsfunktioner. Vi rekommenderar att du använder den nya tjänsten för de senaste funktionsuppdateringarna och förbättringarna.

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 funktionanrop

Modeller som stöds

Sidan modeller innehåller den senaste informationen om regioner/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

Anmärkning

  • 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 upphör att gälla 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"]
      }
    }
  }]
)

Läsa funktionerna

När du initierar en Kör med ett användarmeddelande som utlöser funktionen, kommer Körningen att ange en väntande status. När den har bearbetats anger körningen ett requires_action tillstånd som du kan verifiera genom att hämta 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 för att matcha utdata till 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 queued att ange tillståndet innan körningen fortsätter.

Se även