Enterprise Internal Knowledge Base: Production-Ready RAG + MCP

io.github.kimsb2429由 GitHub 帳號 kimsb2429 發布v0.1.0更新於 Oct 24, 2026

Production-ready RAG + MCP demo: eval-in-CI merge gate, Langfuse traces, structure-aware chunking.

已驗證STDIO僅桌面知識與記憶AI 與機器學習

概覽

AI 產生的概覽

一個本機 RAG 示範型 MCP 伺服器,以公開的退伍軍人事務部教育手冊語料回答問題,回傳附引用的排序片段。

可以做什麼
透過單一 query 工具與依來源 ID 存取的文件的資源,在 pgvector 儲存的 VA 教育手冊語料中檢索並回傳附引用的排序片段。提供引用提示詞,方便讓回答建立在檢索到的片段上。
適用情境
適合體驗或研究具備評估、追蹤與結構化切分的正式環境 RAG 流程,或針對內建的 VA 教育手冊範例語料提問。
執行需求
以 Python 腳本透過 stdio 在本機執行。需要 Python 與此儲存庫的相依套件、以 Docker 執行監聽 5433 埠的 Postgres 加 pgvector,並還原固定資料庫傾印。生成使用 Claude Sonnet,意味著需要 Anthropic API 金鑰;追蹤使用 Langfuse Cloud。
安裝前請注意
語料是公開範例內容,並非真實內部文件。生成會呼叫 Claude Sonnet 而產生 API 費用,可選的脈絡化處理約需 12 美元的 Anthropic 批次呼叫。追蹤紀錄在 Langfuse 上公開分享。auth_context 參數雖存在但未使用,租戶存取控制尚未實作。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Enterprise Internal Knowledge Base: Production-Ready RAG + MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Enterprise Internal Knowledge Base — Production-Ready RAG + MCP

A public Retrieval-Augmented Generation pipeline exposed as an MCP server. Sample content from Veterans Affairs education manuals.

The repo implements evaluation, observability, and structure-aware ingestion. Cost/latency tuning, tenant-level access control, and other production concerns are discussed in the article linked below.

📖 Full writeup in Towards AI: Enterprise Internal Knowledge Base RAG MCP: POC-to-Production


Why this exists

RAG demos tend to focus on the quality of the retrieval pipeline, without recognizing that production RAG fails on the next ten steps: prompt or model changes that pass code review but tank answer quality, cost and latency drift that cannot be traced to specific queries, cross-tenant leakage that only surfaces in audit. This repo shows what catching them looks like in practice.

The corpus is public (VA Education manuals — 238 documents, 9,000+ chunks) so anyone can clone, run, and adapt the pipeline.


Quickstart

bash
git clone https://github.com/kimsb2429/internal-knowledge-basecd internal-knowledge-base
# 1. Start Postgres + pgvectordocker compose up -d
# 2. Python env + dependenciespython3 -m venv .venv && source .venv/bin/activatepip install -r requirements.txt
# 3. Restore corpus fixture (~2 min — 238 docs + 9k chunks pre-embedded)docker exec -i ikb_pgvector pg_restore -U ikb -d ikb < evals/fixture_v1.dump
# 4. Smoke-test the MCP serverpython scripts/test_mcp_server.py     # 7/7 tests pass
# 5. Start the MCP server (stdio transport)python scripts/mcp_server.py

Consuming from Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{  "mcpServers": {    "ikb": {      "command": "python",      "args": ["/absolute/path/to/internal-knowledge-base/scripts/mcp_server.py"]    }  }}

Then ask Claude things like "What RPO handles GI Bill claims in Texas?" — the MCP server returns ranked chunks with citations.


Architecture

Ingestion (one-time per corpus):

mermaid
graph LR    A[KnowVA crawler<br/>HTML + PDF] --> B[Source-specific<br/>preprocessor]    B --> C[Structure-aware<br/>chunker]    C --> D[mxbai-embed-large<br/>local, 1024-dim]    D --> E[(pgvector)]    F[Anthropic Contextual<br/>Retrieval] -.-> E    E -.-> F    style E fill:#e1f5fe

Query (per MCP tool call):

mermaid
graph LR    A[Claude Desktop<br/>MCP client] --> B[FastMCP server]    B --> C[pgvector top-K]    C --> D[Reranker<br/>mxbai or FlashRank]    D --> E[Claude Sonnet<br/>generation]    E --> A    E --> F[Langfuse trace]    style F fill:#fff9c4

Stack:

  • Vector store: Postgres + pgvector (Docker, port 5433); content_tsv GIN index for hybrid-ready
  • Embeddings: mxbai-embed-large (1024 dims, local via sentence-transformers) — $0 API cost
  • Reranker: mxbai-rerank-base-v2 (full eval) / FlashRank MiniLM (CI fast mode, 22M ONNX, ~2s/query)
  • Generation: Claude Sonnet
  • MCP server: FastMCP 3.2.4 — Tools (query), Resources (document://{source_id}), Prompts (cite_from_chunks)
  • Observability: Langfuse Cloud, per-trace public sharing
  • Eval: DeepEval + 110-query golden set + GitHub Actions merge gate

Eval scores

Full 110-question golden set, contextualized chunks + reranker:

MetricScore
Faithfulness0.95
Answer Relevance0.91
Context Precision0.61
Context Recall0.52
Context Relevance0.56

🔗 Live Langfuse trace (public, no login).

Notable result: Anthropic's Contextual Retrieval pattern produced modest lift on top of reranking (+4.8pp AnsRel, +4.1pp CtxPrec) at this scale — well short of the +35% recall their published numbers suggested. Reported as found; juiced numbers would defeat the point.


Eval-in-CI as a merge gate

Every PR runs the golden set in fast mode (FlashRank reranker, ~3-4 min wall, $0.30 in Sonnet calls) against a fixture DB. PRs that regress more than ±5pp on top1/topk/keyword_recall, or +10pp on idk_rate, are blocked.

Forever-artifact: PR #5 — a deliberate failing-then-passing PR. Red CI catches a 20pp top1 regression; green CI confirms the fix. The Actions tab is the proof.

Workflow: .github/workflows/eval-gate.yml.


What this repo doesn't cover

A few production-shape items are seams, not implementations:

  • Multi-tenant scoping — auth_context parameter present on every MCP tool, typed, currently unused (labels the SSO/ACL seam)
  • Ingestion concurrency — single-threaded chunker + embedder; production would use a modulus-distributed worker pool
  • Hybrid search wiring — content_tsv GIN index is live; BM25 + RRF fusion at query time stays a post-launch addition

The writeup linked above covers these topics.


Repo layout

docs/                    Research, evidence base, deep-divesdata/                    Crawled corpus + golden query setscripts/  crawl_knowva.py            eGain v11 API crawler  enrich_metadata.py         Headings, ACL, authority tier, content_category  knowva_preprocess.py       Source-specific HTML normalization  chunk_documents.py         Structure-aware splitter (preserves table colspan/rowspan)  embed_and_store.py         mxbai-embed-large → pgvector  contextualize_chunks.py    Anthropic Batches API for Contextual Retrieval  rerank.py                  mxbai-rerank + FlashRank  retrieve.py / generate.py  RAG path  mcp_server.py              FastMCP exposure  run_eval.py / score_eval.py / check_regression.py   Eval harness + CI gateevals/                   Fixture DB dump + baseline JSON.github/workflows/       eval-gate.yml — merge-gate workflow

Reproducing from raw corpus (~30 min)

Each script is idempotent and resume-safe.

bash
python scripts/crawl_knowva.py            # Crawl raw HTML (skip if data/knowva_manuals/articles/ exists)python scripts/enrich_metadata.py         # Add headings, ACL, authority tierpython scripts/knowva_preprocess.py       # Normalize HTML quirkspython scripts/chunk_documents.py         # Structure-aware splitpython scripts/embed_and_store.py         # mxbai → pgvectorpython scripts/contextualize_chunks.py    # Anthropic Batches API (~$12, optional but recommended)

Then python scripts/run_eval.py --fast to verify the eval baseline reproduces.


Further reading


License

MIT — see LICENSE.

來源:README.md,提交 e1bd519

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分