Skip to main content
Glama

RAG · NTC CDMX 전문가 챗봇 (2004 / 2017 / 2023)

멕시코시티 건축 규정의 보충 기술 규범에 대한 RAG(Retrieval-Augmented Generation) 시스템으로, 하이브리드 검색(BM25 + 다국어 임베딩 + RRF)과 판본 및 조항별 인용을 제공합니다.

구조

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 서버 (opencode, codex, Claude Desktop 등)

이 프로젝트는 세 가지 도구(tools)를 제공하는 MCP 서버로 노출됩니다:

도구

기능

answer_ntc(query)

RAG + LLM(DeepSeek V4 Flash)으로 응답하며 판본, 규범, 조항을 인용하고, 검증된 계산도 수행합니다

search_ntc(query, edition, norm, top_k)

관련 섹션을 원시 형태로 반환합니다

get_section(edition, norm, numeral)

특정 조항의 전체 텍스트를 반환합니다

자동 설치(opencode 및/또는 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

opencode/codex를 다시 시작하면 RAG가 도구(answer_ntc 등)로 제공됩니다. 서버는 RAG/.env의 공급자 API 키, 해당 환경 변수 또는 ~/.config/ntc-cdmx/.env에서 키를 읽습니다.

단일 명령 설치 (GitHub + uv)

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

이 명령은 MCP를 opencode, Codex, Command Code 및 Kilo Code에 설치하고 등록합니다. 클라이언트를 다시 시작하면 answer_ntc, search_ntc, get_section을 사용할 수 있습니다. 인덱스(BM25 + embeddings)는 패키지에 포함되어 있으며, 공급자의 API 키는 ~/.config/ntc-cdmx/.env에 설정합니다.

실행 파일만 설치하려면:

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

서버를 수동으로 테스트하려면:

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

파이프라인

# 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 설정

응답은 DeepSeek V4 Flash를 사용합니다. src/answer.py(LLM_MODEL, LLM_BASE_URL)에서 공급자/API 키를 설정하세요.

키가 없으면 챗봇은 검색된 섹션만으로 응답하며(LLM 없음), 디버깅에 유용합니다.

검증된 계산 (src/calc.py)

질문이 계산을 요구하면(예: "Vz=35 m/s에 대한 풍압을 계산해 줘") 엔진이 이를 감지하고 LLM을 거치지 않고 규범 텍스트와 대조해 검증된 공식을 사용합니다. 포함된 계산기:

계산

공식

출처

동적 풍압

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

NTC-Viento 2023, §5.1.3

설계 풍압

pz = 0.47·Cp·VD²

NTC-Viento 2017/2004, §3.2

풍력 항력

F = 0.47·CD·VD²·A

NTC-Viento 2017/2004, §3.3

최소 지진 밑면 전단력

Vo,min = amin·Wo

NTC-Sismo 2023, §7.5

하중 조합

그룹 B: 1.3·CM+1.5·CV · 그룹 A: 1.5·CM+1.7·CV

NTC-Criterios 2023, §3.4.1

데이터가 누락되면 챗봇이 명시적으로 요청합니다.

생성기 파인튜닝 (src/finetune_gen.py)

채팅 형식의 데이터셋을 생성하며, 각 예제에는 검색된 컨텍스트가 포함됩니다(생성기가 규범을 암기하는 대신 컨텍스트를 기반으로 응답하도록 학습시키기 위함):

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

검색된 컨텍스트로 뒷받침되지 않는 "gold" 응답이 있는 예제를 자동으로 필터링합니다(인용된 조항이 없으면 → 폐기).

평가

evaluate.py 모듈은 Documents\Fine_Tunning\NTC_CDMX\dataset.jsonl의 데이터셋을 사용합니다: "gold" 응답에 인용된 조항이 있는 각 질문에 대해 해당 조항이 검색된 섹션에 나타나는지 확인합니다.

참고 결과(인용 포함 164개 질문 샘플, top-6): recall@q ≈ 0.58. 데이터셋이 인용한 조항의 약 18 %는 해당 판본의 코퍼스에 존재하지 않습니다(데이터셋의 잘못된 인용 또는 추출 누락 가능성).

기술 참고 사항

  • 2004 및 2017 판본은 관보(gacetas)로 제공되며(PDF 하나에 여러 문서 포함), 각 규범의 경계는 src/config.py에 매핑되어 있습니다.

  • 분할은 번호가 매겨진 섹션 단위로 수행되며(절대 단락 단위 아님), 수식/표를 보존합니다.

  • 각 섹션에는 정확한 인용을 위해 {edición, norma, numeral, página} 메타데이터가 포함됩니다.

  • 2023 PDF는 디스크의 파일 이름에 손상된 문자가 있습니다. 추출기는 숫자 접두사로 이를 해결합니다.

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