企業向けRAGにおける知識工学とコックピットアーキテクチャ
構造対応チャンク分割、Dense+Keywordハイブリッド検索とRRF融合、ライフサイクルガバナンス、MCP境界制御、およびRetrieval Labによる評価ループの設計と実践。
企業向けナレッジQ&Aシステムにおいて、品質上のボトルネックはLLM自体のテキスト生成能力にあるのではなく、上流のドキュメント解析および検索パイプラインの欠陥に起因することが大半です。見出し階層の脱落、表構造の平坦化、契約番号・エラーコードの検索漏れ、旧規程と新規程の競合、照応指示語の欠落などが主な原因です。
これらの課題を構造的に解決するため、Enterprise AI Cockpit ではプロンプト調整に終始せず、ドキュメントの構造化解析、ハイブリッド検索融合、有効期間メタデータ管理、定量的評価ループを統合した「知識工学(Knowledge Engineering)」の再構築を実施しました。
インデックスとクエリの2大パイプライン分離
RAGシステムは、性質の異なる2つの独立したパイプラインから構成されます:
インデックス工程: 文書取込 -> 構造解析/見出し復元 -> 構造対応チャンク化 -> 証跡メタデータ付与 -> ベクトル化 -> ベクトル/転置インデックス格納
クエリ検索工程: 質問入力 -> 照応解決/文脈補完 -> 権限/有効期間フィルタ -> Dense + Keyword並列検索 -> RRF融合リランク -> コンテキスト統合 -> 回答生成 & 引用
いずれの工程でも情報の損失が生じ得ます。インデックス工程で見出し構造を失えば業務文脈が失われ、クエリ工程で有効期限を考慮しなければ廃止された旧規程を高精度に誤引用してしまいます。
障害発生時のボトムアップな診断フロー:
- 構造解析の検証: 見出し階層、表構造、業務識別コードが忠実に抽出されているか;
- 候補召回の検証: 正解チャンクがDenseまたはKeywordの候補集合(Candidate Set)に含まれているか;
- フィルタと融合の検証: メタデータフィルタや重複排除、RRF重み付けで正解が除外されていないか;
- バージョン競合の検証: 競合する過去版の規程が同一コンテキスト内に混在していないか;
- モデルの引用検証: LLMが提供されたエビデンスに忠実に回答しているか。
診断フロー: 構造解析 -> 候補召回 -> 融合重み付け -> バージョン整合性 -> モデル引用
構造対応チャンク分割と証跡メタデータ
固定文字数による単純分割は、文脈の分断や見出しと本文の乖離を引き起こします。改修後のシステムでは、Markdown見出し、階層番号、箇条書き、改行段落、文末境界を優先的に認識する構造対応チャンクアルゴリズムを採用しています。
各チャンクには親見出しパスが明示的にメタデータとして保持されます:
見出しパス: 業務規程 > アフターサポート > 返金承認基準
チャンク本文: 返金申請は受領後7日以内に、注文番号と決済証明を添付して提出しなければならない。
単一のチャンクがTop-kに独立してヒットした場合でも、見出しパスにより元の業務文脈を即座に復元できます。格納前にはコンテンツハッシュによる重複排除を行い、検索時には同一ドキュメントの隣接チャンクを動的に結合して重複文字列を除去し、プロンプト容量を効率化します。
データの追跡性を担保するため、source(元ファイルパス)、sourceType(MIMEタイプ)、parser(抽出器バージョン)、ingestedAt(登録日時)、contentHash(SHA-256)、chunkStrategy(分割戦略バージョン)を網羅的に記録します。
Dense + Keyword ハイブリッド検索と RRF 融合
セマンティック埋め込みベクトルは類義語や概念的類似度の把握に優れますが、契約番号(CN-2026-0818)、型番、エラーコードなどの完全一致検索には弱点があります。一方、語彙検索は識別子の完全一致に強みがありますが、同義語展開はできません。
本システムでは二系統の並列検索を実行します:
dense_candidates = pgvector.cosine_search(query_vector, candidate_k)
keyword_candidates = mysql.lexical_search(query_tokens, candidate_k)
fused_ranked = reciprocal_rank_fusion(dense_candidates, keyword_candidates, k=60)
final_ranked = apply_freshness_and_exact_match_boost(fused_ranked)
context_chunks = merge_adjacent_chunks(deduplicate(final_ranked), top_k)
候補の統合には Reciprocal Rank Fusion (RRF) を採用しています。尺度(スケール)の異なるコサイン類似度と語彙スコアを無理に正規化せず、順位(Rank)に基づいて安定した統合を行います。さらに、完全フレーズ一致、業務ID一致、タイトル一致、最新版フラグに基づく限定的なブースト(加点補正)を適用します。
この構成により、ベクトルDBの一時的な障害時にもキーワード検索が稼働し、システムの耐障害性が向上します。
知識ライフサイクルと有効期間メタデータ管理
社内ナレッジ管理において最も危険なのは、矛盾する新旧文書が同時にヒットすることです。単なる類似度検索では「草案」「廃止」「現行」「来月発効」といった業務ステータスを識別できません。
チャンクごとのメタデータにライフサイクル情報を組み込み、検索時に自動適用します:
| メタデータ項目 | 型 | 検索時フィルタリング規則 |
|---|---|---|
status | String | 本番Q&Aでは status IN ('active', 'published') を厳格に適用 |
effectiveFrom | Timestamp | 発効前の未来文書を通常検索から除外 |
effectiveTo | Timestamp | 期限切れ文書を通常検索から除外 |
supersededBy | String | 新版により改訂された過去版を除外 |
version | String | スコアが僅差の場合、新版を上位に優遇 |
管理コンソールでは、新版発行時の旧版自動廃止や、期限切れドキュメント・孤立ベクトルの定期クリーンアップタスクを運用できます。
マルチターン対話における照応補完とクエリ再構成
複数ターンの対話において、ユーザーの追質問には指示代名詞が多く含まれます(例:第1ターン「返金期限は?」、第2ターン「この規則は海外注文にも適用されるか?」)。第2ターンのテキストをそのままベクトル化すると、主語欠落により検索精度が著しく低下します。
指示代名詞や述語のみの質問を検知した場合、直前のユーザー発言の主語を検索クエリへ自動補完します:
Turn 1: 返金承認の期限はいつまでですか?
Turn 2: この規則は海外注文にも適用されますか?
合成検索クエリ: 返金承認の期限はいつまでですか? この規則は海外注文にも適用されますか?
合成クエリは検索処理にのみ使用され、LLM回答生成には元の会話履歴がそのまま渡されるため、プロンプトの意図しない歪みを防止します。
Model Context Protocol (MCP) ツールのガバナンス
静的ドキュメントと動的ツール実行の責務を厳格に分離しています:
- ナレッジベース: 規程集、マニュアル、過去実績などの静的・引用可能な事実を提供;
- MCPツール: 天気、地図、現在時刻、リアルタイムSQL検索、システム操作などの動的ステートを処理。
モデルはUI上でユーザーが明示的に選択したツールのみを利用可能とし、未選択時の暗黙的なツール呼び出しを禁止しています。ホスト側でパラメータスキーマのバリデーション、実行ステップ数制限、実行ログの記録を徹底しています。
ユーザー認可 -> ツールカタログ/スキーマ -> モデル計画 -> ホスト側バリデーション & サンドボックス実行 -> 実行結果観測 -> 最終回答生成
Retrieval Lab と定量的評価ループ
検索精度の継続的チューニングを可能にするため、管理画面に「Retrieval Lab(検索実験室)」を実装しました。対象ナレッジベースを選択してテスト質問を入力することで、Hybrid + RRF の順位、スコア、チャンク抜粋、メタデータを即座に検証できます。
ベンチマーク評価セット(Golden Dataset)に基づき、以下の指標を定期測定します:
- Recall@k: 正解チャンクがTop-k候補に含まれる割合;
- MRR (Mean Reciprocal Rank): 最初の正解チャンクの逆数順位平均;
- Citation Precision: 回答内の主張が引用元チャンクによって正しく裏付けられている割合;
- Version Conflict Rate: 期限切れ・競合チャンクが混入した割合;
- p50/p95 Retrieval Latency: 解析・検索・リランクのレイテンシ。
十分な確信度を持つエビデンスが存在しない場合は、システムが明示的に「該当する情報なし」と回答し、安易なハルシネーションを防止します。
改修された検索基盤は Enterprise AI Cockpit でご確認いただけます。