Este documento describe la arquitectura actual de ai_assist, un asistente inteligente modular que integra múltiples modelos LLM y adaptadores de memoria para generar respuestas informadas con capacidad de análisis contextual profundo y meta-análisis entre modelos.
graph TD
subgraph Usuario
UI["UI Web (HTMX)"]
end
subgraph App_Interna
UI --> ChatRouter["/chat router"]
ChatRouter --> ChatCore
ChatCore --> MemoryOrchestrator
ChatCore --> LLMOrchestrator
MemoryOrchestrator --> STM["ShortTermMemory"]
MemoryOrchestrator --> LTM["LongTermMemory"]
STM --> FAISS
STM --> Redis
STM --> SQLite
LTM --> ChromaDB
LTM --> Postgres
LTM --> MongoDB
LLMOrchestrator --> LLM1["Ollama"]
LLMOrchestrator --> LLM2["Mistral"]
LLMOrchestrator --> LLM3["DeepSeek"]
LLMOrchestrator --> MetaLLM["Meta-LLM (ranking)"]
end
- Propósito: Rápido acceso a interacciones recientes.
- Adaptadores disponibles:
- FAISS: Búsqueda vectorial local.
- Redis: Búsqueda parcial y por clave-valor.
- SQLite: Soporte SQL + metadatos.
- Controlado por:
ShortTermMemory → MemoryOrchestrator
- Propósito: Recuperar información relevante histórica, persistente o cruzada.
- Adaptadores disponibles:
- ChromaDB: Base vectorial.
- PostgreSQL: Datos estructurados.
- MongoDB: Datos documentales.
- Controlado por:
LongTermMemory → MemoryOrchestrator
- Decide dónde guardar y consultar cada interacción.
- Permite fusión de contexto corto y largo.
- Ejecutar consultas a varios LLMs en paralelo.
- Realizar un meta-análisis y elegir la mejor respuesta basada en contexto y consistencia.
- LLMOrchestrator: Gestiona llamadas paralelas a los modelos.
- MetaLLM: Evalúa las respuestas candidatas y escoge la mejor usando un prompt especializado.
- Soporta: Ollama, Mistral, DeepSeek (modular y ampliable)
flowchart LR
input["Prompt enriquecido"] --> ask_all["ask_all()"]
ask_all -->|paralelo| LLM_A["Ollama"]
ask_all --> LLM_B["DeepSeek"]
ask_all --> LLM_C["Mistral"]
LLM_A --> responses
LLM_B --> responses
LLM_C --> responses
responses --> MetaLLM
MetaLLM --> final_answer["Respuesta Seleccionada"]
- Responsabilidad: Actúa como página central de orquestación entre la memoria y el sistema de LLMs.
- Consulta STM y LTM desde MemoryOrchestrator.
- Fusiona el contexto usando el PromptBuilder.
- Ejecuta el orquestador de LLMs.
- Guarda resultados en memoria.
- index.html: Terminal estilo retro usando Bootstrap 386.
- Usa HTMX para interacción asíncrona sin recarga.
- Separada lógicamente en carpeta
web/
:templates/
static/
routes/
utils/
- Usuario envía mensaje.
- ChatRouter lo pasa a ChatCore.
- Se consulta STM y LTM → contexto.
- Se construye el prompt.
- Se consulta el orquestador de LLMs.
- Se evalúa con MetaLLM y se selecciona la mejor respuesta.
- Se guarda en memorias.
- Se responde a la interfaz.
- Agregar módulo de tareas asíncronas (e.g. cron_core, web_crawler_core).
- Mejorar interfaz editable de memoria.
- Soporte para roles/agentes paralelos.
- Persistencia avanzada y backups cifrados.
- FastAPI (servidor principal)
- HTMX (frontend interactivo)
- Chroma, FAISS, Redis, PostgreSQL, MongoDB (backends de memoria)
- Jinja2 (templates dinámicos)
- LLMs: Mistral, DeepSeek, Ollama
- Docker Ready (localhost y redes internas)
- Python 3 y pip (pre-instalados en el dev container)
- Todas las dependencias listadas en
requirements.txt
Instala todas las dependencias de Python:
pip3 install -r requirements.txt
Inicia la app FastAPI usando uvicorn:
uvicorn app.main:app --reload --host 0.0.0.0
- Reemplaza
main:app
si tu punto de entrada es diferente. - El flag
--reload
habilita recarga automática para desarrollo.
Una vez corriendo, abre la app en tu navegador por defecto:
"$BROWSER" http://localhost:8000
Si tienes tests configurados (por ejemplo, con pytest):
pytest
main.py
— Punto de entrada principal para la app FastAPIrequirements.txt
— Dependencias de Python- Módulos y archivos de configuración adicionales según necesidad
- Todos los comandos deben ejecutarse dentro del dev container.
- Para más información sobre FastAPI, consulta la documentación oficial de FastAPI.