← 知識の保存先の使い分け(SSOT層)

11 ssot-search v2 — RAG検索の仕組みと精度改善

4,000文書の知識ベースから「あの話、どこに書いてたっけ?」を1発で見つける仕組み


RAGとは — 「覚えている」のではなく「探してくる」

RAG(ラグ・Retrieval-Augmented Generation)は、LLMに質問する前に「関連する資料を検索して文脈として渡す」構成の総称です。

本プロジェクト(ssot-search v2)では答えの「生成」は行わず、検索に特化しています。つまり SSOT 全体から「目的の知識が書かれた断片」を1発で見つけ出す検索エンジンです。LLMの記憶に頼らず、自分の記録から根拠を引いてくるのが目的です。

💡 一言でいうと: 4,000冊のノートの中から「あの話、どのページ?」と聞くと、10回中7〜8回は関連ページ5枚以内で見つけてくれる助手、です。


検索パイプラインの4工程

工程 やったこと 例え
① チャンキング 4,021個のMarkdown文書を、意味のまとまりごとに24,010断片へ分割 厚い辞書を見出しのカード1枚ずつに切り分ける
② 埋め込みモデル選定 日本語特化の ruri-v3-130m を公開ベンチマーク(JMTEB)比較のうえ選定 翻訳者を雇うとき「日本語が得意な人」を試験成績で選ぶ
③ ベクトルDB構築 各断片を「意味の座標(ベクトル)」に変換し ChromaDB に格納。意味が近い文ほど近い座標になる 図書館の本を「内容が似ている順に棚に並べ直す」
④ 差分更新(30分毎) auto-sync(30分毎の自動バックアップ)と連動し、変更のあった断片だけを再索引。全量再構築は不要 辞書を作り直さず、改訂ページだけ差し替える

「検索したい文」も同じ座標系に変換して、近い座標の断片を取り出すのが意味検索です。「ファイル名やキーワードが一致」しなくても、書いている内容が近ければ見つかります。


精度を測る — 39問のテストセット

「検索が賢くなった気がする」で終わらせず、試験を先に用意して数字で測定しました。


結果 — Recall@5 0.026 → 0.744

検索方式 Recall@5 Recall@10 MRR@10
v1(キーワード一致) 0.026 0.077 0.014
v2(意味検索) 0.744 0.744 0.547
RRF統合(v1+v2の併合) 0.718 0.744 0.391

Recall@5 は「正しい答えが書かれた断片が、検索上位5件に入る割合」です。旧検索(キーワード一致)は **2.6%**=100問中2〜3問しか当たらない状態で、v2(意味検索)で **74.4%**=10問中7〜8問で上位5件に正解が来るまで改善しました。

正直な負けも記録しています。v1とv2を併合するRRF統合は、Recall@10ではv2と同率(上位10件に入る正解を1つも落とさない)だった一方、順位精度(MRR@10)は0.391に低下。レビューで期待された「統合が両者を超える」は未達です。評価後のパラメータ調整は**ベンチ過学習(テストにだけ強くなること)**を招くため実施せず、未達のまま記録に残しています。改善は採点基準を変えずに次回再測定で行います。

⚠ 評価の誠実性の話です。数字を良く見せるためにテストを削ったり基準を変えたりすると、測定の意味がなくなります。「未達」という結果をそのまま残すこと自体が、この評価の信頼性の証明です。


どう使うか

Claude Code セッション内で /ssot-search スキルを呼ぶと、SSOT 全文書を意味検索できます。日常の「過去の決定を探す」「あの設定どこだっけ」が、ファイル名を思い出さずに引けます。


設計の教訓

  1. 測る前に試験を固定する — 結果を見てからの基準変更は、測定ではなく作文になる
  2. 問題を作った本人に解かせない — 問題生成と評価対象を別系統(別LLM・ブラインド)に分ける
  3. 負けも記録する — 「統合すれば良くなるはず」が外れた事実は、次の改善の最も確実な手がかりになる