Chiamate di funzioni degli assistenti di Azure OpenAI
L'API degli Assistenti supporta le chiamate 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.
Nota
- Ricerca file può inserire fino a 10.000 file per assistente, 500 volte più di prima. È veloce, supporta query parallele tramite ricerche multithread e include la riclassificazione avanzata e la riscrittura di query.
- L’archivio di vettori è un nuovo oggetto nell’API. Dopo l’aggiunta a un archivio di vettori, un file viene analizzato, suddiviso in blocchi, incorporato e preparato per essere sottoposto a ricerca. Gli archivi di vettori possono essere usati in diversi assistenti e thread, semplificando quindi la gestione dei file e la fatturazione.
- È stato aggiunto il supporto per il parametro
tool_choice
, che può essere usato per imporre l’uso di uno strumento specifico, ad esempio ricerca file, interprete di codice o una funzione, in una determinata esecuzione.
Supporto per le chiamate di funzione
Modelli supportati
La pagina dei modelli contiene le informazioni più aggiornate su aree/modelli in cui sono attualmente 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 api che iniziano con 2024-02-15-preview
.
Definizione di funzione di esempio
Nota
- È stato aggiunto il supporto per il parametro
tool_choice
, che può essere usato per imporre l’uso di uno strumento specifico, ad esempiofile_search
,code_interpreter
ofunction
, 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 le chiamate di funzioni con App per la logica di Azure
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 l'oggetto tool_call_id
a cui si fa riferimento nell'oggetto per trovare la corrispondenza dell'output required_action
a 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.
Vedi anche
- Informazioni di riferimento sull'API degli assistenti
- Per altre informazioni su come usare gli assistenti, vedere la guida pratica sugli assistenti.
- Esempi di API degli assistenti OpenAI di Azure