Configuración Inicial del Entorno
Antes de comenzar a construir el sistema multi-agente, es necesario configurar el entorno de desarrollo. Esto implica la instalación del SDK de OpenAI y la configuración de las claves de API necesarias para acceder a los servicios de OpenAI. A continuación, se detallan los pasos a seguir:
-
Instalación del SDK de OpenAI:
pip install -q openai-agents
Este comando instala el paquete openai-agents
desde el repositorio de PyPI. El flag -q
indica que la instalación se realizará en modo silencioso.
-
Configuración de las Claves de API:
Para acceder a los servicios de OpenAI, es necesario configurar las claves de API. Esto se puede hacer de varias maneras, como:
- Estableciendo las variables de entorno
OPENAI_API_KEY
y SET_TRACING_EXPORT_API_KEY
.
- Utilizando un archivo de configuración.
- Introduciendo las claves directamente en el código (no recomendado por razones de seguridad).
A continuación, se muestra un ejemplo de cómo configurar las claves de API utilizando variables de entorno:
import os
os.environ['OPENAI_API_KEY'] = 'YOUR_OPENAI_API_KEY'
os.environ['SET_TRACING_EXPORT_API_KEY'] = 'YOUR_SET_TRACING_EXPORT_API_KEY'
Es importante mantener las claves de API seguras y no compartirlas con terceros. Además, es recomendable utilizar un archivo de configuración o variables de entorno para evitar la inclusión de las claves directamente en el código.
-
Importación de las Bibliotecas Necesarias:
Una vez configurado el entorno, es necesario importar las bibliotecas necesarias para construir el sistema multi-agente. Esto incluye las bibliotecas de OpenAI, así como otras bibliotecas útiles para el procesamiento de datos y la visualización.
import nest_asyncio
nest_asyncio.apply()
import logging
from openai import OpenAI
from agents import Agent, InputGuardrail, GuardrailFunctionOutput, Runner, trace, set_tracing_export_api_key
from pydantic import BaseModel
from IPython.display import display, HTML
Estas bibliotecas proporcionan una serie de funciones y clases que facilitan la creación y gestión de los agentes, así como la implementación de los mecanismos de seguridad y el seguimiento del comportamiento del sistema.
Definición de Agentes Especializados
El siguiente paso consiste en definir los agentes que formarán parte del sistema multi-agente. En este ejemplo, se crearán tres agentes especializados en diferentes tareas educativas: un agente de 'guardrail' para verificar la validez de las entradas, un tutor de matemáticas y un tutor de historia.
-
Agente de 'Guardrail':
Este agente se encarga de verificar si la entrada del usuario está relacionada con tareas educativas. Si la entrada no es válida, el agente termina la sesión. A continuación, se muestra la definición del agente de 'guardrail':
guardrail_agent = Agent(
name="Guardrail Check",
instructions="""Analyze if the user input is a homework-related question.""",
output_type=HomeworkOutput
)
El agente de 'guardrail' utiliza la descripción en el campo instructions
para determinar si la entrada del usuario es válida. El campo output_type
especifica el tipo de salida del agente.
-
Tutor de Matemáticas:
Este agente se encarga de responder preguntas relacionadas con matemáticas. A continuación, se muestra la definición del tutor de matemáticas:
math_tutor_agent = Agent(
name="Math Tutor",
handoff_description="Specializes in mathematical problem-solving",
instructions="""Provide step-by-step solutions for math problems. Include examples and clear explanations."""
)
El tutor de matemáticas utiliza la descripción en el campo handoff_description
para indicar su especialización. El campo instructions
especifica las instrucciones para el tutor.
-
Tutor de Historia:
Este agente se encarga de responder preguntas relacionadas con historia. A continuación, se muestra la definición del tutor de historia:
history_tutor_agent = Agent(
name="History Tutor",
handoff_description="Specializes in historical questions",
instructions="""Offer detailed explanations of historical events with context and examples. For example, if asked about the fall of Constantinople:
Context
Constantinople's Significance:
Strategic Location: The city was at the crossroads of Europe and Asia, controlling key trade routes.
Cultural and Religious Center: As the capital of the Eastern Roman (Byzantine) Empire, it was a hub for Christianity and classical culture.
The Conquest
Conqueror: Sultan Mehmed II of the Ottoman Empire.
Preparation:
Military Innovation: Mehmed utilized massive cannons to breach the city walls, revolutionizing siege warfare.
Fleet and Army: He gathered a sizable navy and army, including elite Janissary troops.
Siege Highlights:
Commenced on April 6, 1453: The attack targeted the formidable Theodosian Walls protecting the city.
Use of Artillery: Cannons made significant holes in the defenses, a major advancement at the time.
Unique Naval Strategy: Mehmed moved ships overland to bypass the chain barrier across the Golden Horn harbor.
Fall of the City:
Final Assault on May 29, 1453: Constantinople fell after an intense assault by the Ottoman forces.
End of Byzantine Empire: This marked the end of Byzantine rule and the beginning of a new era for the city as the Ottoman capital.
Impact
Cultural and Political Shift:
Strengthened Ottoman Power: The city became a symbol of Ottoman strength and a base for further expansion.
Transformation into Istanbul: Constantinople was rejuvenated as Istanbul, becoming a center of Islamic culture and learning.
Examples of Legacy
Hagia Sophia: Transformed from a church to a mosque, symbolizing cultural and religious changes.
Trade Growth: The conquest opened strategic East-West trading lanes under Ottoman control.
"""
)
Al igual que el tutor de matemáticas, el tutor de historia utiliza la descripción en el campo `handoff_description` para indicar su especialización. El campo `instructions` especifica las instrucciones para el tutor, incluyendo ejemplos de preguntas y respuestas.
Creación del Flujo de Trabajo Multi-Agente
Una vez definidos los agentes, es necesario crear el flujo de trabajo que gestionará sus interacciones. Esto implica la creación de una función que reciba la entrada del usuario, la pase al agente de 'guardrail' para su verificación y, a continuación, la dirija al tutor de matemáticas o al tutor de historia, según el tema de la pregunta.
```python
def homework_guardrail(ctx, agent, input_data):
with trace("Guardrail Analysis", metadata={"input": input_data}, ctx=ctx) as t:
result = await Runner.run(guardrail_agent, input_data, context=ctx)
final_output = result.final_output
t.record_final_output(final_output)
is_homework = result.final_output.is_homework
return is_homework
async def create_analysis(input_request):
if homework_guardrail(ctx, guardrail_agent, input_request) == True:
if "math" in input_request or "mathematics" in input_request or "calculus" in input_request:
result = await Runner.run(math_tutor_agent, input_request, context=ctx)
return result.final_output
else:
result = await Runner.run(history_tutor_agent, input_request, context=ctx)
return result.final_output
else:
return "This helper can only help with Homework"
```
La función `create_analysis` recibe la entrada del usuario y la pasa al agente de 'guardrail' para su verificación. Si la entrada es válida, la función determina si la pregunta está relacionada con matemáticas o historia y la dirige al tutor correspondiente. Si la entrada no es válida, la función devuelve un mensaje indicando que solo puede ayudar con tareas educativas.
Este flujo de trabajo permite la creación de un sistema multi-agente flexible y adaptable, donde los agentes pueden colaborar para responder preguntas complejas y proporcionar una experiencia de aprendizaje personalizada.
Ejecución y Prueba del Sistema Multi-Agente
Una vez creado el flujo de trabajo, es necesario ejecutar y probar el sistema multi-agente para verificar su funcionamiento. Esto implica la introducción de preguntas relacionadas con matemáticas e historia y la verificación de que el sistema selecciona el agente adecuado y proporciona una respuesta correcta. A continuación, se muestran algunos ejemplos de preguntas y respuestas:
-
Pregunta: ¿Quién conquistó Estambul?
Respuesta: Sultan Mehmed II del Imperio Otomano.
-
Pregunta: ¿Cuál es la raíz cuadrada de 144?
Respuesta: 12
Estos ejemplos demuestran que el sistema multi-agente es capaz de seleccionar el agente adecuado según el tema de la pregunta y proporcionar una respuesta correcta. Además, el sistema registra los traces de la conversación en el playground de OpenAI, lo que permite el seguimiento y depuración del comportamiento del agente.
La ejecución y prueba del sistema multi-agente son esenciales para garantizar su funcionamiento Correcto y su capacidad para proporcionar una experiencia de aprendizaje personalizada. Además, el seguimiento de los traces de la conversación permite la identificación y corrección de posibles errores o deficiencias en el sistema.