Condividi tramite


Chiamata di funzioni di Azure OpenAI Assistants (versione classica)

Si applica solo a:Portale di Foundry (versione classica). Questo articolo non è disponibile per il nuovo portale foundry. Altre informazioni sul nuovo portale.

Annotazioni

Alcuni collegamenti in questo articolo potrebbero aprire contenuto nella nuova documentazione di Microsoft Foundry anziché nella documentazione di Foundry (classica) visualizzata.

Annotazioni

L'API Assistants è deprecata e verrà ritirata il 26 agosto 2026. Usare il servizio Microsoft Foundry Agents disponibile a livello generale. Seguire la guida alla migrazione per aggiornare i carichi di lavoro. Ulteriori informazioni.

L’API degli assistenti supporta la chiamata di funzione che consente di descrivere la struttura delle funzioni a un assistente e quindi restituire le funzioni che devono essere chiamate insieme ai relativi argomenti.

Supporto per le chiamate di funzione

Modelli supportati

La pagina models contiene le informazioni più up-to-date su aree/modelli in cui sono supportati Gli assistenti.

Per usare tutte le funzionalità delle chiamate di funzioni, incluse le funzioni parallele, è necessario usare un modello rilasciato dopo il 6 novembre 2023.

Versioni dell’API

Versioni delle API che iniziano con 2024-02-15-preview.

Definizione di funzione di esempio

Annotazioni

  • È stato aggiunto il supporto per il parametro tool_choice, che può essere usato per imporre l’uso di uno strumento specifico, ad esempio file_search, code_interpreter o function, in una determinata esecuzione.
  • Le esecuzioni scadono dieci minuti dopo la creazione. Assicurarsi di inviare gli output dello strumento prima della scadenza.
  • È anche possibile eseguire una chiamata di funzione con le app di Azure Logic.
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"]
      }
    }
  }]
)

Lettura delle funzioni

Quando si avvia un'esecuzione con un messaggio utente che attiva la funzione, l'esecuzione entra in uno stato di sospensione. Dopo l'elaborazione, l'esecuzione entrerà in uno stato requires_action che è possibile verificare recuperando l'esecuzione.

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

Invio di output della funzione

È quindi possibile completare l'esecuzione inviando l'output dello strumento dalle funzioni chiamate. Passare tool_call_id, a cui si fa riferimento nell’oggetto required_action, per trovare la corrispondenza dell’output per ogni chiamata di funzione.


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

Dopo aver inviato gli output dello strumento, l'esecuzione entrerà nello stato queued prima di continuare.

Vedere anche