Skip to main content
Glama

leychile-rag

RAG agentic sobre la legislación chilena. Hacés una pregunta en lenguaje natural y obtenés una respuesta fundada en los artículos de la ley, con citas (norma + artículo + link) — no una alucinación. MVP sobre el Código del Trabajo.

Construido con LangGraph (RAG agentic con guardrails), FastAPI, pgvector sobre Neon y expuesto también como servidor MCP para que cualquier agente (Claude Desktop, Cursor) pueda consultar la ley chilena como una tool.

Proyecto personal / demo. No es asesoría legal: orienta y remite a la fuente oficial.

Arquitectura

flowchart LR
    subgraph Ingesta
      LC[LeyChile / BCN] -->|XML / SPARQL| ING[ingest.py]
      ING -->|chunk por artículo| EMB[(embeddings)]
      EMB --> PG[(pgvector · Neon)]
    end
    subgraph Consulta
      Q[pregunta] --> G
      subgraph G[LangGraph]
        E[embed_query] --> R[retrieve] --> GEN[generate + citas] --> V[verify / guardrail]
      end
      R -. similitud .-> PG
      V --> A[respuesta + citas]
    end
    API[FastAPI /ask] --> G
    MCP[MCP: preguntar_ley] --> G

El grafo recupera los artículos más relevantes, redacta la respuesta citando los artículos usados y, en verify, degrada a "no encontrado en el corpus" si no hubo recuperación — anti-alucinación.

Related MCP server: chile-procurement

Demo (salida real)

P: ¿Con cuánta anticipación debe avisar un trabajador si renuncia?
R: Un trabajador debe avisar a su empleador con treinta días de anticipación,
   a lo menos, si decide renunciar. Esto está establecido en el Art. 159 del
   Código del Trabajo.
   Citas: Código del Trabajo Art. 159, Art. 7, Art. 1

P: ¿Qué es un contrato individual de trabajo?
R: Un contrato individual de trabajo es una convención por la cual el empleador
   y el trabajador se obligan recíprocamente, donde el trabajador se compromete
   a prestar servicios personales bajo dependencia y subordinación del empleador,
   y este último a pagar una remuneración determinada. (Art. 7 del Código del Trabajo).
   Citas: Código del Trabajo Art. 7, Art. 159, Art. 1

Stack

Python · LangGraph · LangChain · OpenAI embeddings · Postgres + pgvector (Neon) · FastAPI · MCP (Model Context Protocol).

Quick start

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
pip install -e .
cp .env.example .env           # completar OPENAI_API_KEY y DATABASE_URL (Neon)

# Ingesta (seed = muestra incluida; leychile = baja el XML real)
python scripts/run_ingest.py seed

# API
uvicorn leychile_rag.api:app --reload
curl -s localhost:8000/ask -H 'content-type: application/json' \
  -d '{"pregunta":"¿Con cuánta anticipación debe avisar un trabajador si renuncia?"}'

Con Docker (imagen en GHCR)

Imagen pública publicada por CI en GitHub Container Registry (bring-your-own-key):

# Poblar el corpus una vez (seed) contra tu DB
docker run --rm \
  -e OPENAI_API_KEY=sk-... -e DATABASE_URL=postgresql://... \
  ghcr.io/marcovaldiviesob/leychile-rag:latest \
  python scripts/run_ingest.py seed

# Levantar la API
docker run -p 8000:8000 \
  -e OPENAI_API_KEY=sk-... -e DATABASE_URL=postgresql://... \
  ghcr.io/marcovaldiviesob/leychile-rag:latest

Cada usuario trae su propia OPENAI_API_KEY y su Postgres con pgvector (Neon): no hay endpoint público que gaste tu cuota ni exponga tu key.

Como servidor MCP

pip install mcp
python -m leychile_rag.mcp_server

Expone la tool preguntar_ley(pregunta) para cualquier cliente MCP. Se puede combinar con mcp-datos-gob-cl (datos públicos de Chile) para un agente que cruza datos + ley.

Fuente de datos

Textos legales desde LeyChile / BCN (Biblioteca del Congreso Nacional). El servicio XML puede requerir credencial o haber cambiado de endpoint y puede rate-limitar; la ingesta cachea y soporta un modo seed para correr el demo sin depender del fetch. El data/codigo_trabajo_sample.json es muestra ilustrativa, no fuente legal.

Roadmap

  • Parser robusto del XML/XSD de LeyChile (hoy regex tolerante).

  • Más cuerpos legales (Protección de Datos, Código Tributario).

  • Reranking + evaluación (eval set de preguntas laborales con respuestas citadas).

  • Deploy (Fly.io) + UI de chat mínima.

  • Observabilidad de las trazas del agente.

Licencia

MIT.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables access to Chile's government procurement data (Mercado Público / ChileCompra) via MCP, allowing AI agents to query public procurement information.
    21 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only consultation of legal proceedings from the Brazilian TRT8 labor court through an official source, enabling users to inquire about process details using natural language with any MCP-compatible client.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects AI assistants via MCP to Colombian legislation and jurisprudence with verifiable citations. Enables hybrid search over a local index of over 44,000 legal documents, returning exact, sourced quotes without generating text.
    AGPL 3.0