Freigeben über


Azure OpenAI Assistants-Funktionsaufruf

Hinweis

Dieses Dokument bezieht sich auf das Microsoft Foundry(klassische) Portal.

🔍 Zeigen Sie die Microsoft Foundry-Dokumentation (neu) an, um mehr über das neue Portal zu erfahren.

Hinweis

Der Microsoft Foundry Agent Service ist jetzt allgemein verfügbar, was mehr Tools und bessere Unternehmensfeatures bietet. Wir empfehlen die Verwendung des neuen Diensts für die neuesten Funktionsupdates und Verbesserungen.

Die Assistants-API unterstützt Funktionsaufrufe, mit denen Sie einem Assistenten die Struktur von Funktionen beschreiben und dann die Funktionen zurückgeben können, die zusammen mit ihren Argumenten aufgerufen werden müssen.

Unterstützung für Funktionsaufruf

Unterstützte Modelle

Die Modellseite enthält die aktuellsten Informationen zu Regionen/Modellen, in denen Assistants unterstützt werden.

Um alle Funktionen von Funktionsaufrufen einschließlich paralleler Funktionen zu verwenden, müssen Sie ein Modell verwenden, das nach dem 6. November 2023 veröffentlicht wurde.

API-Versionen

API-Versionen ab 2024-02-15-preview.

Beispielfunktionsdefinition

Hinweis

  • Wir haben Unterstützung für den tool_choice-Parameter hinzugefügt, der verwendet werden kann, um die Verwendung eines bestimmten Tools zu erzwingen (z. B. file_search, code_interpreter oder function) in einer bestimmten Ausführung.
  • Läuft 10 Minuten nach der Erstellung ab. Stellen Sie sicher, dass Sie Ihre Toolausgabe vor diesem Ablauf übermitteln.
  • Sie können auch Funktionsaufrufe mit Azure Logic-Apps ausführen
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"]
      }
    }
  }]
)

Lesen der Funktionen

Wenn Sie eine Ausführung mit einer Benutzernachricht initiieren, die die Funktion auslöst, gibt die Ausführung den Status „Ausstehenden“ ein. Nach dem Verarbeiten wechselt die Ausführung zum Status „requires_action“, den Sie überprüfen können, indem Sie die Ausführung abrufen.

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

Senden von Funktionsausgaben

Anschließend können Sie die Ausführung abschließen, indem Sie die Toolausgabe aus den von Ihnen aufgerufenen Funktionen übermitteln. Übergeben Sie die tool_call_id, auf die im required_action-Objekt verwiesen wird, um die Ausgabe an jeden Funktionsaufruf anzupassen.


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

Nachdem Sie die Toolausgabe übermittelt haben, wechselt die Ausführung in den Status queued, bevor sie die Ausführung fortsetzt.

Siehe auch