Cómo habilitar las llamadas de función en agentes mistrales utilizando el formato de esquema JSON estándar

En este tutorial, demostraremos cómo habilitar las llamadas de funciones en agentes mistrales utilizando el formato de esquema JSON estándar. Al definir los parámetros de entrada de su función con un esquema claro, puede hacer que sus herramientas personalizadas sean sin problemas por el agente, lo que permite interacciones potentes y dinámicas.

Utilizaremos la API de AviationStack para recuperar los datos del estado de vuelo en tiempo real, mostrando cómo las API externos pueden integrarse como funciones invocables dentro de un agente Mistral.

Paso 1: Configuración de dependencias

Instalación de la biblioteca Mistral

Cargando la tecla API de Mistral

Puedes obtener una llave API de https://console.mistral.ai/api- keys

from getpass import getpass
MISTRAL_API_KEY = getpass('Enter Mistral API Key: ')

Cargando la tecla API de la pila de aviación

Puede registrarse para obtener una llave de API gratuita de su panel para comenzar.

AVIATIONSTACK_API_KEY = getpass('Enter Aviation Stack API: ')

Paso 2: Definición de la función personalizada

A continuación, definimos una función de Python get_flight_status () que llama a la API de AviationStack para recuperar el estado en tiempo real de un vuelo. La función acepta un parámetro Opcional Flight_iata y devuelve detalles clave como el nombre de la aerolínea, el estado de vuelo, los aeropuertos de salida y llegada, y los tiempos programados. Si no se encuentra ningún vuelo coincidente, devuelve con gracia un mensaje de error.

import requests
from typing import Dict
def get_flight_status(flight_iata=None):
    """
    Retrieve flight status using optional filters: dep_iata, arr_iata, flight_iata.
    """
    params = {
        "access_key": AVIATIONSTACK_API_KEY,
        "flight_iata": flight_iata  
    }

    response = requests.get("http://api.aviationstack.com/v1/flights", params=params)
    data = response.json()

    if "data" in data and data["data"]:
        flight = data["data"][0]
        return {
            "airline": flight["airline"]["name"],
            "flight_iata": flight["flight"]["iata"],
            "status": flight["flight_status"],
            "departure_airport": flight["departure"]["airport"],
            "arrival_airport": flight["arrival"]["airport"],
            "scheduled_departure": flight["departure"]["scheduled"],
            "scheduled_arrival": flight["arrival"]["scheduled"],
        }
    else:
        return {"error": "No flight found for the provided parameters."}

Paso 3: Creación del cliente y agente Mistral

En este paso, creamos un agente Mistral que utiliza la llamada de herramientas para obtener información de vuelo en tiempo real. El agente, llamado Agente de estado de vuelo, está configurado para usar el modelo “Midral-Medium-2505” y está equipado con una herramienta de función personalizada llamada Get_Flight_Status. Esta herramienta se define utilizando un esquema JSON que acepta un solo parámetro requerido: el código IATA del vuelo (por ejemplo, “AI101”). Una vez implementado, el agente puede invocar automáticamente esta función cada vez que detecta una consulta de usuario relevante, lo que permite una integración perfecta entre las entradas del lenguaje natural y las respuestas de API estructuradas.

from mistralai import Mistral
client = Mistral(MISTRAL_API_KEY)

flight_status_agent = client.beta.agents.create(
    model="mistral-medium-2505",
    description="Provides real-time flight status using aviationstack API.",
    name="Flight Status Agent",
    tools=[
        {
            "type": "function",
            "function": {
                "name": "get_flight_status",
                "description": "Retrieve the current status of a flight by its IATA code (e.g. AI101).",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "flight_iata": {
                            "type": "string",
                            "description": "IATA code of the flight (e.g. AI101)"
                        },
                    },
                    "required": ["flight_iata"]
                }
            }
        }
    ]
)

Paso 4: Comenzar la función de conversación y manejo de la función

En este paso, iniciamos una conversación con el agente de estado de vuelo haciendo una pregunta de lenguaje natural: “¿Cuál es el estado actual de AI101?”. El modelo Mistral detecta que debe invocar la función get_flight_status y devuelve una solicitud de llamadas de función. Analizamos los argumentos, ejecutamos la función localmente utilizando la API AviationStack y devolvemos el resultado al agente usando FunctionResultEntry. Finalmente, el modelo incorpora la respuesta de la API y genera una respuesta de lenguaje natural con el estado de vuelo actual, que imprimimos en la consola.

from mistralai import FunctionResultEntry
import json

# User starts a conversation
response = client.beta.conversations.start(
    agent_id=flight_status_agent.id,
    inputs=[{"role": "user", "content": "What's the current status of AI101?"}]
)

# Check if model requested a function call
if response.outputs[-1].type == "function.call" and response.outputs[-1].name == "get_flight_status":
    args = json.loads(response.outputs[-1].arguments)

    # Run the function
    function_result = json.dumps(get_flight_status(**args))

    # Create result entry
    result_entry = FunctionResultEntry(
        tool_call_id=response.outputs[-1].tool_call_id,
        result=function_result
    )

    # Return result to agent
    response = client.beta.conversations.append(
        conversation_id=response.conversation_id,
        inputs=[result_entry]
    )

    print(response.outputs[-1].content)
else:
    print(response.outputs[-1].content)

Mira el Cuaderno en Github. Todo el crédito por esta investigación va a los investigadores de este proyecto. Además, siéntete libre de seguirnos Gorjeo Y no olvides unirte a nuestro 95k+ ml de subreddit y suscribirse a Nuestro boletín.


Soy un graduado de ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en varias áreas.