Appel de fonction Azure OpenAI Assistants (classique)

S’applique uniquement à :le portail classique Foundry. Cet article n’est pas disponible pour le nouveau portail Foundry. En savoir plus sur le nouveau portail.

Note

Les liens de cet article peuvent ouvrir du contenu dans la nouvelle documentation Microsoft Foundry au lieu de la documentation Foundry (classique) que vous affichez maintenant.

Note

L’API des assistants est obsolète et sera retirée le 26 août 2026. Utilisez le service Microsoft Foundry Agents, généralement disponible. Suivez le guide de migration pour mettre à jour vos charges de travail. En savoir plus.

L’API Assistants prend en charge l’appel de fonction, ce qui vous permet de décrire la structure des fonctions à un Assistant, puis de renvoyer les fonctions qui doivent être appelées avec leurs arguments.

Prise en charge des appels de fonction

Modèles pris en charge

La page modèles contient les informations les plus up-to-date sur les régions/modèles où les Assistants sont pris en charge.

Pour utiliser toutes les fonctionnalités d’appel de fonction, y compris les fonctions parallèles, vous devez utiliser un modèle qui a été publié après le 6 novembre 2023.

Versions de l’API

Versions d’API commençant par 2024-02-15-preview.

Exemple de définition de fonction

Note

  • Nous avons ajouté la prise en charge du tool_choice paramètre qui peut être utilisé pour forcer l'utilisation d'un outil spécifique (comme file_search, code_interpreter, ou un function) dans une exécution particulière.
  • Les runs expirent dix minutes après leur création. Veillez à envoyer vos résultats d’outil avant cette date limite.
  • Vous pouvez également effectuer des appels de fonction avec Azure applications logiques
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"]
      }
    }
  }]
)

Lecture des fonctions

Lorsque vous lancez une exécution avec un message utilisateur qui déclenche la fonction, l’exécution passera en état d'attente. Une fois le traitement effectué, le run entrera dans un état "requires_action" que vous pouvez vérifier en récupérant le Run.

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

Soumission des résultats de fonction

Vous pouvez ensuite terminer l’exécution en envoyant la sortie de l’outil à partir de la ou des fonctions que vous appelez. Passez le tool_call_id référené dans l’objet required_action pour faire correspondre la sortie à chaque appel de fonction.


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

Une fois que vous avez envoyé les résultats de l’outil, Run entre dans l’état queued avant de poursuivre le processus.

Voir aussi