Azure Assistant de OpenAI llamada de funciones (clásico)

Solo se aplica a:Portal de Foundry (clásico). Este artículo no está disponible para el nuevo portal de Foundry. Obtenga más información sobre el nuevo portal.

Nota

Los vínculos de este artículo pueden abrir contenido en la nueva documentación de Microsoft Foundry en lugar de la documentación de Foundry (clásico) que está viendo ahora.

Nota

La API de Asistentes está obsoleta y será retirada el 26 de agosto de 2026. Utiliza el servicio Microsoft Foundry Agents generalmente disponible. Sigue la guía de migración para actualizar tus cargas de trabajo. Más información.

La API assistants admite llamadas a funciones, lo que permite describir la estructura de las funciones en un Asistente y, a continuación, devolver las funciones a las que se debe llamar junto con sus argumentos.

Compatibilidad con llamadas a funciones

Modelos compatibles

La página de modelos contiene la información más actualizada sobre regiones/modelos donde se admiten 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, el cual se puede usar para forzar el uso de una herramienta específica (como file_search, code_interpreter o function) 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 procesarlo, la ejecución entrará en un estado "requires_action" que puede comprobar recuperando el 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\"}"
          }
        },
      ]
    }
  },
...

Envío de salidas de función

Después, puede completar la ejecución enviando la salida de la herramienta desde las funciones que llama. Pase la referencia tool_call_id contenida en el objeto required_action para que la salida coincida con 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, el proceso de ejecución pasará al queued estado antes de continuar su ejecución.

Consulte también