Skip to content

FranciscoZanonDP/LangGraph-Debate-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de Debate con Agentes IA

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.

Características

  • 🤖 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

Requisitos

  • Python 3.8+
  • Google API Key (para Gemini)
  • Dependencias listadas en requirements.txt

Instalación

  1. Clona el repositorio o navega al directorio del proyecto

  2. Instala las dependencias:

pip install -r requirements.txt
  1. Crea un archivo .env en la raíz del proyecto (puedes copiar .env.example):
GOOGLE_API_KEY=tu_api_key_aqui
  1. (Opcional) Configura LangSmith para ver los traces:
LANGCHAIN_API_KEY=tu_langsmith_api_key

Uso

Ejecuta el script principal:

python main.py

El sistema te pedirá ingresar un tema para el debate (o presionar Enter para usar el tema por defecto).

Ejemplo de ejecución

============================================================
🎙️  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]

Estructura del Proyecto

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

Configuración

Configuración YAML

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.

Prompts YAML

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

Constantes principales

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

Modelo

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)

Arquitectura

El sistema utiliza LangGraph para crear un workflow de agentes:

  1. Optimista: Presenta argumentos positivos sobre el tema
  2. Escéptico: Presenta objeciones y riesgos
  3. Router: Decide si continuar el debate o ir al juez (basado en turn_count)
  4. Juez: Analiza todos los argumentos y emite un veredicto detallado

Flujo del debate

Optimista → Escéptico → [Router] → (Continuar) Optimista
                                ↓
                            (Ir al Juez)
                                ↓
                              Juez → Fin

Desarrollo

Principios de diseño

  • 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

Mejoras implementadas

  • ✅ 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)

Solución de problemas

Error: No se encontró GOOGLE_API_KEY

Asegúrate de que el archivo .env existe y contiene:

GOOGLE_API_KEY=tu_api_key

Error: Modelo no encontrado

El 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.

Error: Respuesta vacía

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

Licencia

Este proyecto es de código abierto. Úsalo libremente para tus proyectos.

Contribuciones

Las contribuciones son bienvenidas. Por favor:

  1. Haz un fork del proyecto
  2. Crea una rama para tu feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

Contacto

Para preguntas o sugerencias, abre un issue en el repositorio.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages