Volver a Proyectos
🤖 Backend IA · Producción

Clinical AI Multi-Agent

Backend de IA multi-agente de nivel producción para soporte en decisión clínica. Recibe la descripción de un caso, clasifica la urgencia mediante triage con LLM, activa agentes especialistas en paralelo y devuelve una evaluación integrada y tipada, con tolerancia a fallos parciales.

POST /clinical-case/analyze
        │
        ▼
   AgentRouter   ── triage LLM (temp=0.0)
   urgencia + agentes sugeridos
        │
        ▼
   Integrator ── asyncio.gather (paralelo)
   ┌───────────────┬───────────────┐
   ClinicalAgent   EmergencyAgent  CardiologyAgent ...
   │   cada agente: retriever | prompt | llm | parser
   │   (RAG sobre guías clínicas en pgvector)
   └───────────────┴───────────────┘
        │
        ▼
   AnalyzeOutput
   summary · findings · red_flags ·
   recommendations · confidence ·
   failed_agents · warnings

La API · OpenAPI

Superficie REST documentada con esquemas tipados: triage, análisis multi-agente y consulta de casos.

Documentación OpenAPI (Swagger UI) de Clinical AI Multi-Agent: endpoints de triage, análisis y casos clínicos con esquemas tipados

Stack Tecnológico

  • APIFastAPI 0.136 (async)
  • AgentesLangChain LCEL
  • LLMNvidia NIM · Groq · OpenAI
  • Vector storepgvector (RAG)
  • Base de DatosPostgreSQL · SQLAlchemy 2.0 · Alembic
  • ValidaciónPydantic v2
  • DeployDocker · GHCR · Traefik

El Concepto

Un único endpoint recibe un caso clínico en lenguaje natural. Un router basado en LLM clasifica la urgencia y decide qué agentes especialistas (emergencias, cardiología, farmacología, radiología…) necesita el caso según su contenido semántico, no solo según el nivel de urgencia. Cada agente ejecuta su propia cadena RAG independiente y el Integrator combina los resultados en una única evaluación tipada.

Decisiones Técnicas

  • Triage determinista: el router corre a temperature=0.0 para que la clasificación de urgencia y la selección de agentes sean reproducibles, no aleatorias.
  • Activación por contenido: los agentes especialistas se activan por el contenido del caso (una lectura de ECG activa cardiología) y no por el nivel de urgencia.
  • Ejecución paralela: todos los agentes seleccionados corren concurrentemente con asyncio.gather; tres agentes de ~2 s tardan ~2 s en total, no 6 s.
  • RAG por agente: cada agente recupera guías clínicas relevantes desde pgvector vía LangChain (retriever | prompt | llm | parser) y parsea una respuesta tipada con Pydantic.
  • Resiliencia: con return_exceptions=True, si un agente falla o expira, el resto devuelve igual su resultado; los campos failed_agents y warnings hacen explícita la degradación parcial.
  • Proveedores intercambiables: LLM y embeddings son agnósticos del proveedor (Nvidia NIM, Groq, OpenAI, LM Studio) mediante una capa compatible con OpenAI.

Lo que Demuestra

Es la pieza donde la arquitectura backend y la IA aplicada se encuentran: orquestación asíncrona, recuperación semántica, contratos de datos tipados y resiliencia ante fallos parciales, todo empaquetado con Docker multi-stage, integración continua hacia GHCR y despliegue en VPS con Traefik y TLS automático. No es una demo de LLM, es un servicio diseñado para producción.