Esta plantilla proporciona una base de nivel empresarial para construir sistemas de Agentes de IA en Rust. Utiliza el framework Rig para la lógica agéntica y Axum para la interfaz HTTP, diseñado con una arquitectura modular y escalable.
- Arquitectura Orquestador-Especialistas: Patrón jerárquico donde un agente principal delega tareas complejas a sub-agentes expertos.
- Memoria Persistente (Redis): Historial de chat y estado de sesión mantenido en Redis, permitiendo conversaciones continuas y escalabilidad horizontal.
- Herramientas Tipadas: Sistema robusto de
Toolsdefinidas con structs de Rust, minimizando alucinaciones y errores de ejecución. - Observabilidad: Telemetría integrada con
tracingpara monitorear el flujo de decisiones de los agentes. - API RESTful: Interfaz HTTP lista para producción con Axum.
- Rust (versión estable reciente)
- Redis (ejecutándose localmente o accesible vía URL)
- API Keys de proveedores LLM (OpenAI, Anthropic o Google Gemini)
-
Clona el repositorio.
-
Copia el archivo de ejemplo:
cp .env.example .env
-
Configura tus variables en
.env. A continuación se detallan las más importantes:Variable Descripción Valor por Defecto PORTPuerto del servidor HTTP 8080REDIS_URLConexión a Redis redis://default@localhost:6379SESSION_TTLTiempo de vida de la sesión (segundos) 86400(24h)OPENAI_API_KEYKey para GPT-4o, etc. - GEMINI_API_KEYKey para modelos Gemini - ANTHROPIC_API_KEYKey para Claude 3.5 Sonnet - DEBUG_LEVELNivel de logs (INFO, DEBUG, TRACE) INFO
cargo runEl servidor iniciará en http://0.0.0.0:8080.
Interactúa con el orquestador. El sistema mantendrá el contexto basado en el session_id si se provee (header o body, según implementación de cliente).
Request:
{
"prompt": "Hola, necesito validar una dirección en Madrid",
"session_id": "user-123"
}Ejemplo cURL:
curl -X POST http://localhost:8080/chat \
-H "Content-Type: application/json" \
-d '{"prompt": "¿Cuál es el estatus del envío #99?", "session_id": "test-1"}'El sistema emula una organización inteligente:
Es el gerente general. Recibe todas las peticiones, mantiene la "Big Picture" y decide a quién asignar el trabajo.
- Responsabilidad: Entender la intención, mantener la conversación y delegar.
- Memoria: Recupera el historial de chat desde Redis antes de cada interacción.
Son expertos de dominio (ej. AddressSpecialist, DamageEvaluator).
- Se inyectan al orquestador como Herramientas Avanzadas.
- Tienen su propio System Prompt y pueden usar sus propias herramientas (ej. consultar base de datos, API externa).
- Ventaja: Permite usar modelos más pequeños/rápidos para tareas específicas, o prompts muy detallados sin "contaminar" el contexto principal.
Funciones puras o deterministas que ejecutan acciones concretas.
- Ejemplos:
GeoCoding,CostCalculator,TextReverser. - No usan LLM, son código Rust estándar.
- RedisProvider: Abstracción sobre
redis-rs. - Almacena el historial de mensajes serializado en JSON.
- Permite que el agente "recuerde" lo dicho 5 turnos atrás.
Pasos para añadir una nueva capacidad (ej. FinancialAnalyst) al sistema.
Duplica la carpeta src/agents/specialized/dummy y renómbrala a analyst.
Edita analyst/system_prompt.md. Define claramente qué hace y qué NO hace este agente.
"Eres un experto financiero. Tu trabajo es analizar riesgos..."
En analyst/mod.rs:
- Renombra los structs (
AnalystArgs,AnalystOutput). - Define los argumentos que necesita recibir (ej.
amount,currency). - Implementa el trait
Tool. La funcióndefinition()es crucial: describe al LLM orquestador cuándo usar esta herramienta.
- En
src/agents/specialized/mod.rs:pub mod analyst; - En
src/agents/orchestrator/mod.rs:- Instancia el agente:
let analyst = AnalystSpecialist::new(model.clone()); - Añádelo al builder:
.tool(analyst)
- Instancia el agente:
¡Listo! El orquestador ahora tiene un experto financiero en su equipo.
- Documentación del crate
rig: Para una comprensión profunda de los componentes y la API de Rig, consulta la documentación oficial en docs.rs.