Compartir vía


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 (como file_search, code_interpreter o un 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 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