Sistema de debate automatizado donde dos agentes IA (Optimista y Escéptico) debaten sobre un tema y un tercer agente (Juez) emite un veredicto final.
- 🤖 Agentes especializados: Optimista, Escéptico y Juez con personalidades distintas
- 🔄 Workflow con LangGraph: Orquestación del debate mediante un grafo de estados
- 🎯 Tema personalizable: El usuario puede ingresar el tema del debate desde la terminal
- 📊 Veredicto detallado: El juez proporciona un análisis completo y explicativo
- ⚙️ Configuración flexible: Constantes centralizadas para fácil personalización
- 🛡️ Manejo de errores robusto: Reportes detallados con stack traces y soluciones sugeridas
- Python 3.8+
- Google API Key (para Gemini)
- Dependencias listadas en
requirements.txt
-
Clona el repositorio o navega al directorio del proyecto
-
Instala las dependencias:
pip install -r requirements.txt- Crea un archivo
.enven la raíz del proyecto (puedes copiar.env.example):
GOOGLE_API_KEY=tu_api_key_aqui- (Opcional) Configura LangSmith para ver los traces:
LANGCHAIN_API_KEY=tu_langsmith_api_keyEjecuta el script principal:
python main.pyEl sistema te pedirá ingresar un tema para el debate (o presionar Enter para usar el tema por defecto).
============================================================
🎙️ SISTEMA DE DEBATE - INGRESO DE TEMA
============================================================
📝 Tema por defecto: Deberíamos permitir que las IAs tengan derechos legales como los humanos
💡 Ingresa un nuevo tema para el debate (o presiona Enter para usar el tema por defecto):
➜ [Usuario ingresa tema o presiona Enter]
Desitions/
├── src/
│ ├── debate/
│ │ ├── __init__.py
│ │ ├── config.py # Configuración del LLM y variables de entorno
│ │ ├── constants.py # Constantes centralizadas
│ │ ├── state.py # Definición del estado del debate (TypedDict)
│ │ ├── agents.py # Definición de los agentes (nodos)
│ │ ├── router.py # Lógica de control (cuándo continuar o ir al juez)
│ │ └── graph.py # Construcción del grafo de LangGraph
│ ├── utils/
│ │ ├── __init__.py
│ │ └── response.py # Funciones auxiliares para procesar respuestas
│ └── errors/
│ ├── __init__.py
│ └── handler.py # Manejo detallado de errores
├── tests/ # Tests (por implementar)
│ └── __init__.py
├── scripts/ # Scripts de utilidad
├── main.py # Punto de entrada principal
├── requirements.txt # Dependencias del proyecto
├── README.md # Este archivo
├── .gitignore # Archivos ignorados por Git
└── .env.example # Ejemplo de configuración de variables de entorno
El sistema ahora soporta configuración externa mediante el archivo config.yaml en la raíz del proyecto. Puedes personalizar:
- LLM: modelo, temperature, etc.
- Debate: max_turns, max_retries, longitudes mínimas, etc.
- Logging: nivel, formato, archivo de log
- Tema y mensaje por defecto
Si el archivo config.yaml no existe, el sistema usa los valores por defecto de src/debate/constants.py.
Los prompts de los agentes se pueden personalizar en src/debate/prompts.yaml. Puedes modificar:
- Prompts del sistema para cada agente (optimista, escéptico, juez)
- Respuestas por defecto
- Prompts mejorados para el juez
También puedes editar src/debate/constants.py directamente para personalizar:
MAX_RETRIES: Número máximo de reintentos para generar respuesta (default: 3)MIN_RESPONSE_LENGTH: Longitud mínima de respuesta de agentes (default: 5)MIN_VERDICT_LENGTH: Longitud mínima del veredicto del juez (default: 150)MAX_TURNS: Número máximo de turnos antes de ir al juez (default: 4)DEFAULT_TEMPERATURE: Temperatura del modelo (default: 0.7)DEFAULT_MODEL: Modelo de Gemini a usar (default: "gemini-2.5-flash-lite")DEFAULT_TOPIC: Tema por defecto del debate
Puedes cambiar el modelo en src/debate/config.py o editando DEFAULT_MODEL en src/debate/constants.py.
Para ver modelos disponibles, ejecuta:
python scripts/check-models.py(Nota: Este script puede no existir aún. Puedes revisar la documentación de Google Generative AI para ver modelos disponibles)
El sistema utiliza LangGraph para crear un workflow de agentes:
- Optimista: Presenta argumentos positivos sobre el tema
- Escéptico: Presenta objeciones y riesgos
- Router: Decide si continuar el debate o ir al juez (basado en turn_count)
- Juez: Analiza todos los argumentos y emite un veredicto detallado
Optimista → Escéptico → [Router] → (Continuar) Optimista
↓
(Ir al Juez)
↓
Juez → Fin
- SOLID & DRY: Código modular sin duplicación
- Separación de responsabilidades: Cada módulo tiene un propósito específico
- Constantes centralizadas: Magic numbers eliminados
- Manejo robusto de errores: Reportes detallados para debugging
- ✅ Logging implementado (reemplaza prints)
- ✅ Type hints completos añadidos
- ✅ Tests unitarios básicos creados
- ✅ Prompts separados en archivo YAML (
src/debate/prompts.yaml) - ✅ Configuración externa YAML (
config.yaml)
Asegúrate de que el archivo .env existe y contiene:
GOOGLE_API_KEY=tu_api_keyEl modelo configurado no está disponible. Ejecuta python scripts/check-models.py para ver modelos disponibles (si existe) y cambia DEFAULT_MODEL en src/debate/constants.py.
Si los agentes generan respuestas vacías, el sistema intentará 3 veces antes de usar una respuesta por defecto. Esto puede deberse a:
- Problemas con la API de Google
- Configuración incorrecta del modelo
- Rate limits
Este proyecto es de código abierto. Úsalo libremente para tus proyectos.
Las contribuciones son bienvenidas. Por favor:
- Haz un fork del proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
Para preguntas o sugerencias, abre un issue en el repositorio.