Cómo crear flujos de trabajo inteligentes de múltiples agentes utilizando la función de transferencia de la API de Agentes Mistrales

En este tutorial, exploraremos cómo crear flujos de trabajo inteligentes y de múltiples agentes utilizando la función de transferencia de la API de Agentes Mistrales. Esto permite que diferentes agentes trabajen juntos pasando tareas entre sí, lo que permite que los problemas complejos se resuelvan de manera modular y eficiente. Construiremos un sistema donde los agentes colaboren para responder preguntas relacionadas con la inflación (cálculos de rendimiento, obteniendo datos en línea y creación de visualizaciones) para ofrecer respuestas claras, precisas y dinámicas.

Paso 1: Configuración de dependencias

Instalación de las bibliotecas

pip install mistralai pydantic

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: ')

Paso 2: Requisitos previos y configuración del agente

Inicializando al agente

from mistralai import CompletionArgs, ResponseFormat, JSONSchema
from pydantic import BaseModel
from mistralai import Mistral

client = Mistral(MISTRAL_API_KEY)

Creando la función personalizada

La función Ajuste_FOR_Inflation calcula cuánto valdría una cantidad dada de dinero después de contabilizar la inflación con el tiempo. Utiliza la fórmula compuesta basada en el número de años y la tasa de inflación anual. Si el año final es antes del año de inicio, devuelve un error. De lo contrario, devuelve el valor ajustado junto con los detalles de entrada. Por ejemplo, AJUST_FOR_INFLATION (1000, 1899, 2025, 10) muestra lo que ₹ 1000 de 1899 valdría en 2025 con una inflación del 10%.

def adjust_for_inflation(amount: float, start_year: int, end_year: int, annual_inflation_rate: float):
    """
    Calculates inflation-adjusted value using compound formula.
    """
    if end_year < start_year:
        return {"error": "End year must be greater than or equal to start year."}

    years = end_year - start_year
    adjusted_value = amount * ((1 + annual_inflation_rate / 100) ** years)

    return {
        "original_amount": amount,
        "start_year": start_year,
        "end_year": end_year,
        "inflation_rate": annual_inflation_rate,
        "adjusted_value": round(adjusted_value, 2)
    }

adjust_for_inflation(1000, 1899, 2025, 10)

Creación de salida estructurada para razonamiento matemático

class CalcResult(BaseModel):
    reasoning: str
    result: str

inflation_tool = {
    "type": "function",
    "function": {
        "name": "adjust_for_inflation",
        "description": "Calculate the value of money adjusted for inflation over a time period.",
        "parameters": {
            "type": "object",
            "properties": {
                "amount": {
                    "type": "number",
                    "description": "Original amount of money"
                },
                "start_year": {
                    "type": "integer",
                    "description": "The starting year for inflation adjustment"
                },
                "end_year": {
                    "type": "integer",
                    "description": "The ending year for inflation adjustment"
                },
                "annual_inflation_rate": {
                    "type": "number",
                    "description": "Annual inflation rate in percent"
                }
            },
            "required": ["amount", "start_year", "end_year", "annual_inflation_rate"]
        }
    }
}

Paso 3: Creación de los agentes

Definiendo los diferentes agentes

En esta configuración, definimos un sistema de agentes múltiples que utiliza la API de agentes distrales para manejar consultas económicas relacionadas con la inflación. El agente principal (agente de economía) actúa como coordinador que enruta las tareas a agentes especializados. El agente de inflación realiza cálculos de ajuste de inflación utilizando una función personalizada. Si falta la tasa de inflación de la consulta, el agente WebSearch la obtiene de Internet. El agente de calculadora maneja cálculos numéricos complejos con razonamiento paso a paso, mientras que el agente gráfico utiliza el intérprete de código para visualizar las tendencias de inflación a lo largo del tiempo. Juntos, estos agentes colaboran a través de transferencias para ofrecer respuestas dinámicas precisas a las consultas económicas.

# Main Agent
economics_agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="economics-agent",
    description="Handles economic queries and delegates inflation calculations.",
)

# Inflation Function Agent
inflation_agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="inflation-agent",
    description="Agent that calculates inflation-adjusted value using a custom function.",
    tools=[inflation_tool],
)

# Web Search Agent
websearch_agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="websearch-agent",
    description="Agent that can search the internet for missing economic data such as inflation rates.",
    tools=[{"type": "web_search"}]
)


# Calculator Agent
from pydantic import BaseModel

class CalcResult(BaseModel):
    reasoning: str
    result: str

calculator_agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="calculator-agent",
    description="Agent used to make detailed calculations.",
    instructions="When doing calculations, explain step by step.",
    completion_args=CompletionArgs(
        response_format=ResponseFormat(
            type="json_schema",
            json_schema=JSONSchema(
                name="calc_result",
                schema=CalcResult.model_json_schema(),
            )
        )
    )
)

# Graph Agent
graph_agent = client.beta.agents.create(
    model="mistral-large-latest",
    name="graph-agent",
    description="Agent that generates graphs using code interpreter.",
    instructions="Use code interpreter to draw inflation trends.",
    tools=[{"type": "code_interpreter"}]
)

Definición de las responsabilidades de las transferencias

Esta configuración define cómo los agentes delegan las tareas entre sí:

  • El agente principal (Economics_agent) sirve como punto de entrada y los delegados consultan a la inflation_agent (para los cálculos de inflación) o al WebSearch_Agent (para obtener datos faltantes como las tasas de inflación).
  • La inflation_agent, después de recibir la consulta del usuario o los datos de la web, puede pasar aún más tareas al calculador_agent (para matemáticas detalladas) o Graph_agent (para visualizar las tendencias).
  • WebSearch_Agent puede pasar el control a la inflation_agent después de recuperar la información requerida, como la tasa de inflación.
  • Calculator_agent y Graph_Agent se consideran agentes terminales. Sin embargo, el traspaso mutuo opcional está habilitado en caso de que uno necesita hacer un trabajo de seguimiento (por ejemplo, graficar un resultado calculado o viceversa).
# Main Agent hands off to inflation_agent and websearch_agent
economics_agent = client.beta.agents.update(
    agent_id=economics_agent.id,
    handoffs=[inflation_agent.id, websearch_agent.id]
)

# Inflation Agent can delegate to calculator_agent or graph_agent if deeper analysis or visualization is needed
inflation_agent = client.beta.agents.update(
    agent_id=inflation_agent.id,
    handoffs=[calculator_agent.id, graph_agent.id]
)

# Web Search Agent can hand off to inflation_agent (after finding the missing rate)
websearch_agent = client.beta.agents.update(
    agent_id=websearch_agent.id,
    handoffs=[inflation_agent.id]
)

# Calculator and Graph agents are terminal--they don't hand off further
# But if needed, we could let them hand off to each other:
calculator_agent = client.beta.agents.update(
    agent_id=calculator_agent.id,
    handoffs=[graph_agent.id]  # Optional
)

graph_agent = client.beta.agents.update(
    agent_id=graph_agent.id,
    handoffs=[calculator_agent.id]  # Optional
)

Paso 4: Ejecutando el agente

Ejemplo A: ¿Cuál es la tasa de inflación actual en la India?

En este ejemplo, el mensaje “¿Cuál es la tasa de inflación actual en la India?” se pasa a Economics_Agent, que es el principal punto de entrada para manejar consultas económicas. Dado que la pregunta requiere datos en tiempo real que no están incluidos en el conocimiento estático del agente, el Economics_Agent entrega automáticamente la consulta al WebSearch_Agent, que está equipado con capacidades de búsqueda web.

prompt = "What is the current inflation rate in India?"
response = client.beta.conversations.start(
    agent_id=economics_agent.id,
    inputs=prompt
)
print(response.outputs[-1].content[0].text)

Ejemplo B: ¿Cuál es el valor ajustado por la inflación de 5,000 del año 2010 a 2023 con una tasa de inflación anual de 6.5%? Explique los pasos de cálculo y traza un gráfico con etiquetas de datos

Este bloque de código envía el indicador a un agente de economía, verifica si el agente desencadena una llamada de función específica (ajuste_for_inflation), ejecuta esa función localmente con los argumentos proporcionados y luego devuelve el resultado calculado al agente. Finalmente, imprime la respuesta del agente, que incluye la explicación del cálculo de inflación, junto con el código de Python para trazar la tendencia.

import json

from mistralai.models import FunctionResultEntry

prompt = """What is the inflation-adjusted value of 5,000 from the year 2010 to 2023 with annual inflation rate of 6.5%. 
Explain calculation steps and plot a graph with data labels"""

response = client.beta.conversations.start(
    agent_id=economics_agent.id,
    inputs=prompt
)

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

    # Run local function
    function_result = json.dumps(adjust_for_inflation(**args))

    # Return result to Mistral
    result_entry = FunctionResultEntry(
        tool_call_id=response.outputs[-1].tool_call_id,
        result=function_result
    )

    response = client.beta.conversations.append(
        conversation_id=response.conversation_id,
        inputs=[result_entry]
    )

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

El agente devolvió el siguiente bloque de código para trazar la tendencia del valor ajustado por la inflación con el tiempo.

import matplotlib.pyplot as plt
import numpy as np

# Parameters
original_amount = 5000
start_year = 2010
end_year = 2023
inflation_rate = 6.5 / 100  # Convert percentage to decimal

# Calculate the number of years
num_years = end_year - start_year + 1

# Calculate the adjusted value for each year
years = np.arange(start_year, end_year + 1)
adjusted_values = original_amount * (1 + inflation_rate) ** (years - start_year)

# Plot the graph
plt.figure(figsize=(10, 6))
plt.plot(years, adjusted_values, marker="o", linestyle="-", color="b")

# Add data labels
for year, value in zip(years, adjusted_values):
    plt.text(year, value, f'${value:.2f}', ha="right")

# Add titles and labels
plt.title('Inflation-Adjusted Value Over Time')
plt.xlabel('Year')
plt.ylabel('Adjusted Value')

# Save the plot as an image
plt.savefig('inflation_adjusted_value.png')

# Show the plot
plt.show()

Mira el Computadora portátil. 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 98k+ 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.