Llamadas a funciones de Assistants de Azure OpenAI
Assistants API admite llamadas a funciones, lo que le permite describir la estructura de las funciones en un asistente y, después, devolver las funciones a las que se debe llamar junto con sus argumentos.
Nota:
- La búsqueda de archivos puede ingerir hasta 10 000 archivos por asistente, 500 veces más que antes. Es rápida, compatible con consultas paralelas a través de búsquedas multiproceso y presenta características mejoradas de reordenación y reescritura de consultas.
- El almacén de vectores es un nuevo objeto de la API. Una vez que un archivo se agrega a un almacén de vectores, se analiza automáticamente, se divide en fragmentos y se inserta, quedando listo para su búsqueda. Los almacenes de vectores se pueden usar entre asistentes y subprocesos, lo que simplifica la administración de archivos y la facturación.
- Hemos agregado compatibilidad con el parámetro
tool_choice
que se puede usar para forzar el uso de una herramienta específica (como la búsqueda de archivos, el intérprete de código o una función) en una ejecución determinada.
Compatibilidad con la llamada de funciones
Modelos admitidos
La página de modelos contiene la información más actualizada sobre regiones o modelos en los que se admiten los asistentes.
Para usar todas las características de la llamada de función, incluidas las funciones paralelas, debe usar un modelo que se publicó después del 6 de noviembre de 2023.
Versiones de API
Versiones de API a partir de 2024-02-15-preview
.
Definición de función de ejemplo
Nota:
- Hemos agregado compatibilidad con el parámetro
tool_choice
que se puede usar para forzar el uso de una herramienta específica (comofile_search
,code_interpreter
o unfunction
) en una ejecución determinada. - Las ejecuciones expiran diez minutos después de la creación. Asegúrese de enviar las salidas de la herramienta antes de esta expiración.
- También puede realizar llamadas a funciones con 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"]
}
}
}]
)
Lectura de las funciones
Al iniciar una ejecución con un mensaje de usuario que desencadena la función, la ejecución entrará en un estado pendiente. Después de procesarse, la ejecución entrará en un estado requires_action que puede comprobar si recupera la ejecución.
{
"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\"}"
}
},
]
}
},
...
Envío de salidas de función
Después, puede completar la ejecución si envía la salida de la herramienta desde las funciones que llame. Pase el tool_call_id
al que se hace referencia en el objeto required_action
para que coincida con la salida de cada llamada de función.
# 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)
Después de enviar las salidas de la herramienta, la ejecución entrará en el estado queued
antes de continuar.
Consulte también
- Referencia de API de asistentes
- Obtenga más información sobre cómo usar los asistentes con nuestra Guía paso a paso sobre Assistants.
- Ejemplos de la API Azure OpenAI Assistants