Skip to main content
Glama

RAG · Experten-Chatbot für NTC CDMX (2004 / 2017 / 2023)

Retrieval-Augmented-Generation-System über die Normas Técnicas Complementarias del Reglamento de Construcciones de la Ciudad de México, mit hybrider Suche (BM25 + multilinguale Embeddings + RRF) und Zitaten nach Ausgabe und Abschnittsnummer.

Struktur

RAG/
├── src/
│   ├── config.py        # rutas y mapeo PDF → (edición, norma)
│   ├── extract.py       # PDF → páginas de texto por norma (temp/extracted_text/)
│   ├── structure.py     # páginas → secciones X.Y.Z (data/corpus/*.json)
│   ├── index_build.py   # secciones → catálogo + BM25 + embeddings (data/index/)
│   ├── retrieve.py      # retriever híbrido (BM25 + embeddings + RRF + numeral)
│   ├── answer.py        # generador de respuestas con LLM (DeepSeek V4 Flash)
│   ├── calc.py          # cálculos validados (viento, sismo, combinaciones)
│   ├── evaluate.py      # evaluación recall@k con el dataset de 21k Q&A
│   └── finetune_gen.py  # genera dataset RAG-formateado para fine-tune del generador
├── app/app.py           # interfaz web (Streamlit)
└── scripts/run_all.py   # orquesta el pipeline completo

Related MCP server: RAG Anything MCP Server

MCP-Server (für opencode, codex, Claude Desktop, etc.)

Das Projekt wird als MCP-Server mit drei Tools bereitgestellt:

Tool

Funktion

answer_ntc(query)

Antwortet mit RAG + LLM (DeepSeek V4 Flash) unter Angabe von Ausgabe, Norm und Abschnittsnummer; löst außerdem validierte Berechnungen

search_ntc(query, edition, norm, top_k)

Gibt die relevanten Abschnitte im Rohformat zurück

get_section(edition, norm, numeral)

Gibt den vollständigen Text einer bestimmten Abschnittsnummer zurück

Automatische Installation (registriert den Server in opencode und/oder codex):

.venv\Scripts\python.exe scripts\install_mcp.py            # opencode + codex
.venv\Scripts\python.exe scripts\install_mcp.py --opencode # solo opencode
.venv\Scripts\python.exe scripts\install_mcp.py --codex    # solo codex

Starten Sie opencode/codex neu, und der RAG steht als Tools (answer_ntc, usw.) zur Verfügung. Der Server liest den API-Schlüssel des Anbieters aus RAG/.env, der entsprechenden Umgebungsvariable oder ~/.config/ntc-cdmx/.env.

Installation mit einem einzigen Befehl (GitHub + uv)

uvx --from git+https://github.com/Sobrio25/ntc-cdmx-mcp ntc-cdmx-install

Dieser Befehl installiert und registriert das MCP in opencode, Codex, Command Code und Kilo Code. Starten Sie die Clients neu, und answer_ntc, search_ntc und get_section sind verfügbar. Der Index (BM25 + Embeddings) wird im Paket mitgeliefert; der API-Schlüssel des Anbieters wird in ~/.config/ntc-cdmx/.env konfiguriert.

Um nur die ausführbare Datei zu installieren:

uv tool install git+https://github.com/Sobrio25/ntc-cdmx-mcp

Den Server manuell testen:

ntc-cdmx                                     # stdio (modo instalado)
.venv\Scripts\python.exe src\mcp_server.py   # stdio (modo desarrollo)

Pipeline

# 1) Extraer y estructurar e indexar
.venv/Scripts/python.exe scripts/run_all.py --steps extract structure index

# 2) Evaluar recall del retriever (muestra 400 preguntas del dataset de 21k)
.venv/Scripts/python.exe scripts/run_all.py --steps eval

# 3) Interfaz web
.venv/Scripts/python.exe -m streamlit run app/app.py

LLM konfigurieren

Die Antworten verwenden DeepSeek V4 Flash. Konfigurieren Sie den Anbieter/API-Schlüssel in src/answer.py (LLM_MODEL, LLM_BASE_URL). Ohne Schlüssel antwortet der Chatbot mit den abgerufenen Abschnitten (ohne LLM), was zum Debuggen nützlich ist.

Validierte Berechnungen (src/calc.py)

Wenn die Frage eine Berechnung verlangt (z. B. „Berechne den Winddruck für Vz=35 m/s“), erkennt die Engine dies und verwendet eine gegen den Normentext verifizierte Formel, ohne den LLM einzusetzen. Enthaltene Rechner:

Berechnung

Formel

Quelle

Dynamischer Winddruck

qz = 0.52·Vz² (m/s → Pa)

NTC-Viento 2023, §5.1.3

Bemessungswinddruck

pz = 0.47·Cp·VD²

NTC-Viento 2017/2004, §3.2

Windwiderstandskraft

F = 0.47·CD·VD²·A

NTC-Viento 2017/2004, §3.3

Minimale seismische Basiskraft

Vo,min = amin·Wo

NTC-Sismo 2023, §7.5

Lastkombination

Gruppe B: 1.3·CM+1.5·CV · Gruppe A: 1.5·CM+1.7·CV

NTC-Criterios 2023, §3.4.1

Fehlen Daten, fragt der Chatbot explizit danach.

Fine-Tuning des Generators (src/finetune_gen.py)

Erzeugt einen Datensatz im Chat-Format, bei dem jedes Beispiel den abgerufenen Kontext enthält (damit der Generator lernt, aus dem Kontext zu antworten, anstatt die Normen auswendig zu lernen):

.venv/Scripts/python.exe src/finetune_gen.py --max 2000 --top_k 8 --require_all

Filtert automatisch die Beispiele heraus, deren „Gold“-Antwort NICHT durch den abgerufenen Kontext gestützt wird (fehlende zitierte Abschnittsnummern → werden verworfen).

Evaluierung

Das Modul evaluate.py verwendet Ihren Datensatz aus Documents\Fine_Tuning\NTC_CDMX\dataset.jsonl: Für jede Frage mit zitierten Abschnittsnummern in der „Gold“-Antwort wird geprüft, ob die Abschnittsnummer unter den abgerufenen Abschnitten vorkommt.

Referenzergebnis (Stichprobe 164 Fragen mit Zitat, Top-6): recall@q ≈ 0.58. Etwa 18 % der vom Datensatz zitierten Abschnittsnummern existieren nicht im Korpus ihrer Ausgabe (möglicherweise falsche Zitate im Datensatz oder Extraktionslücken).

Technische Hinweise

  • Die Ausgaben 2004 und 2017 stammen aus Amtsblättern (mehrere Dokumente pro PDF); die Grenzen jeder Norm sind in src/config.py hinterlegt.

  • Die Aufteilung erfolgt nach nummerierten Abschnitten (niemals nach Absätzen), wobei Formeln/Tabellen erhalten bleiben.

  • Jeder Abschnitt trägt Metadaten {edición, norma, numeral, página}, um präzise zu zitieren.

  • Die PDFs von 2023 haben auf der Festplatte Dateinamen mit beschädigten Zeichen; der Extraktor löst diese über ein numerisches Präfix auf.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    AI-powered MCP server that enables Claude and other LLMs to interact directly with construction documents, drawings, and specifications through advanced RAG and hybrid search capabilities.
    9
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    An MCP server that provides comprehensive multimodal Retrieval-Augmented Generation (RAG) capabilities for processing and querying document directories, supporting text, images, tables, and equations.
    37
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for a modular RAG system that enables natural language question answering over enterprise documents with intent-aware routing, adaptive retrieval, and citation-backed responses.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for local RAG over personal notes, PDFs, and documents, enabling plain-English querying and hybrid search with multi-hop context expansion.
    MIT