mcpField
E
Enterprise Internal Knowledge Base: Production-Ready RAG + MCP

Enterprise Internal Knowledge Base: Production-Ready RAG + MCP

ローカル
github.comメモリ・ナレッジ022 週間前に更新

Enterprise Internal Knowledge Base: Production-Ready RAG + MCP について

Enterprise Internal Knowledge Baseは、文書ベースの質疑応答を構築・評価するチーム向けの、MCPサーバーとして公開されたRAGパイプラインのデモです。構造を考慮した取り込み、クエリのトレース、CIの評価ゲートを組み合わせ、公開VA教育マニュアルをサンプルコーパスに使います。

主な機能

  1. 01構造を考慮した文書の前処理と分割
  2. 02ベクトル検索と再ランキング
  3. 03引用付きの順位付けチャンクを返すMCPクエリツール
  4. 04Langfuseによるクエリトレース
  5. 05ゴールデンセット評価によるCIマージゲート

活用シーン

  1. 01文書コレクションを使ったRAGパイプラインの構築
  2. 02検索と回答のトレース確認
  3. 03プルリクエストで回答品質の低下を検出
  4. 04公開VAマニュアルを使ったパイプラインの再現

MCP 対応

MCPサーバーは`query`ツール、`document://{source_id}`リソース、`cite_from_chunks`プロンプトを公開します。MCPクライアントには引用付きの順位付けチャンクを返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

エンタープライズ向け内部ナレッジベース — 本番運用に対応した RAG + MCP

MCP サーバーとして公開されるパブリックな検索拡張生成パイプラインです。退役軍人省の教育マニュアルからサンプルコンテンツを使用しています。

このリポジトリでは、評価、可観測性、構造を考慮した取り込みを実装しています。コストやレイテンシーの調整、テナント単位のアクセス制御、その他の本番運用上の考慮事項については、以下の記事で解説しています。

📖 Towards AI の記事全文: Enterprise Internal Knowledge Base RAG MCP: POC-to-Production


これが存在する理由

RAG のデモは検索パイプラインの品質に注目しがちですが、本番環境の RAG がその後に続く 10 のステップで失敗することは見落とされています。コードレビューを通過しても回答品質を大きく損なうプロンプトやモデルの変更、特定のクエリまで追跡できないコストやレイテンシーの変動、監査で初めて明らかになるテナント間の情報漏えいなどです。このリポジトリでは、実際にそれらをどう検知するかを示しています。

コーパスは公開されています(退役軍人省の教育マニュアル — 238 件のドキュメント、9,000 件以上のチャンク)。誰でもパイプラインをクローンして実行し、応用できます。


クイックスタート

git clone https://github.com/kimsb2429/internal-knowledge-base
cd internal-knowledge-base

# 1. Start Postgres + pgvector
docker compose up -d

# 2. Python env + dependencies
python3 -m venv .venv && source .venv/bin/activate
pip 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 server
python scripts/test_mcp_server.py     # 7/7 tests pass

# 5. Start the MCP server (stdio transport)
python scripts/mcp_server.py
Claude Desktop から利用する

~/Library/Application Support/Claude/claude_desktop_config.json に追加します:

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

その後、「テキサス州で GI Bill の請求を扱う RPO はどこですか?」 のように Claude に質問してください。MCP サーバーは、引用付きのランキング済みチャンクを返します。


アーキテクチャ

取り込み(コーパスごとに 1 回):

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

クエリ(MCP ツールの呼び出しごと):

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

技術スタック:

  • ベクトルストア: Postgres + pgvector(Docker、ポート 5433)。content_tsv GIN インデックスはハイブリッド検索に対応
  • 埋め込み: mxbai-embed-large(1024 次元、sentence-transformers を使ってローカルで実行)— API コスト $0
  • リランカー: mxbai-rerank-base-v2(完全評価)/FlashRank MiniLM(CI の高速モード、22M ONNX、クエリあたり約 2 秒)
  • 生成: Claude Sonnet
  • MCP サーバー: FastMCP 3.2.4 — ツール(query)、リソース(document://{source_id})、プロンプト(cite_from_chunks)
  • 可観測性: Langfuse Cloud、トレースごとの公開共有
  • 評価: DeepEval + 110 クエリのゴールデンセット + GitHub Actions のマージゲート

評価スコア

コンテキスト化したチャンクとリランカーを使用した、110 問のゴールデンセット全体の結果です:

指標スコア
忠実度0.95
回答の関連性0.91
コンテキストの適合率0.61
コンテキストの再現率0.52
コンテキストの関連性0.56

🔗 Langfuse のライブトレース(公開、ログイン不要)。

注目すべき結果: Anthropic の Contextual Retrieval パターンは、この規模ではリランキングに加えてわずかな改善をもたらしました(AnsRel は +4.8pp、CtxPrec は +4.1pp)。公表された数値が示唆していた再現率 +35% には遠く及びません。数値を誇張すれば、この取り組みの意義が損なわれるため、実測結果をそのまま報告しています。


マージゲートとしての CI での評価

すべての PR で、フィクスチャ DB に対してゴールデンセットを高速モード(FlashRank リランカー、所要時間約 3〜4 分、Sonnet の呼び出し料金 $0.30)で実行します。top1/topk/keyword_recall が ±5pp を超えて悪化する PR、または idk_rate が +10pp を超える PR はブロックされます。

恒久的な成果物: PR #5 — 意図的に失敗してから成功させた PR です。CI の赤表示で top1 の 20pp の回帰を検知し、緑表示で修正を確認できます。Actions タブがその証拠です。

ワークフロー: .github/workflows/eval-gate.yml。


このリポジトリで扱わない内容

本番運用で必要になる項目の一部は、実装ではなく拡張ポイントとして設けています:

  • マルチテナントのスコープ設定 — すべての MCP ツールに auth_context パラメーターがあり、型も定義されていますが、現在は未使用です(SSO/ACL の拡張ポイントを示しています)
  • 取り込みの並行処理 — チャンカーと埋め込み生成器はシングルスレッドです。本番環境では、剰余分散方式のワーカープールを使用します
  • ハイブリッド検索の接続 — content_tsv GIN インデックスは稼働中です。クエリ時の BM25 + RRF 融合は、リリース後の追加項目として残しています

これらのトピックについては、上記の記事で解説しています。


リポジトリの構成

docs/                    Research, evidence base, deep-dives
data/                    Crawled corpus + golden query set
scripts/
  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 gate
evals/                   Fixture DB dump + baseline JSON
.github/workflows/       eval-gate.yml — merge-gate workflow

生コーパスからの再現(約30分)

各スクリプトは冪等で、中断後も安全に再開できます。

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

続いて、python scripts/run_eval.py --fast を実行し、評価のベースラインが再現されることを確認します。


さらに詳しく


ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。