使って気づいた、Geminiにあって自分になかったもの
使って気づいた、Geminiにあって自分になかったもの
動かして初めてわかること
my-rag-brainを実際に使い始めて、不便に感じることが出てきた。
search_memoryで過去の記録を引き出したとき、その内容が「どの会話から来たのか」がわからない。検索結果を見ると、教訓や結論のテキストは確かに表示される。しかし、元の文脈——どんな問題があって、どんな経緯でその結論に至ったのか——に戻る手段がなかった。
ファイルパスもなければ、日付以外の手がかりもない。
これはGeminiとの設計差異だ
Geminiの仕様を確認した。
GeminiはRAG Engine、MemoryCorpus、そしてSources: Previous chatsという構成を持つ。過去の会話を検索するだけでなく、その会話そのものを出典として返せる。取得した情報が「どこから来たか」を、Groundingの仕組みで常に保持している。
自分のシステムに欠けているのはそこだった。
vault(lesson/conclusionなど蒸留済みエントリ)に記録された内容は、元の会話ファイルとの接続が切れていた。蒸留は情報を圧縮するが、出典を切り落としていた。
source_originを実装した
変更は4ファイルに及んだ。まず各ファイルの役割を整理する。
| ファイル | 役割 |
|---|---|
store.py | ChromaDBへの書き込み層。全チャンクのメタデータを管理する |
note_writer.py | MCPサーバーとCLIから呼ばれる記録の入口。store.pyを呼び出す |
distill_v2.py | diaryの生ノートをLesson/Conclusionに昇格させるパイプライン |
server.py | MCPサーバー本体。search_memoryツールの検索・表示ロジックを持つ |
書き込みの流れは distill_v2.py → note_writer.py → store.py → ChromaDB で、読み出しは server.py → ChromaDB だ。
① store.py — ChromaDBメタデータにフィールド追加
ChromaDBに投入するすべてのチャンクのメタデータにsource_originフィールドを追加した。
meta = {
"source_type": source_type,
"source_file": str(path),
"source_ref": source_ref,
"source_origin": source_origin, # 蒸留元ファイルパスを記録
"title": title,
"date": date_str,
...
}
② note_writer.py — 書き込み関数の引数追加
記録の入口となるwrite_note()にsource_origin引数を追加し、store.pyに受け渡す。
def write_note(text: str, source_type: str, ref: str = "",
priority: str = "", source_origin: str = ""):
...
ingest_file(str(target_file), source_type, ..., source_origin=source_origin)
③ distill_v2.py — 蒸留時に元ファイルパスを渡す
diaryを蒸留してvaultに書き込む際、元のdiaryファイルパスをsource_originとして渡す。これにより「この教訓はどの日の会話から来たか」が記録される。
write_note(
text=body,
source_type=note_type,
ref=f"distill_v2:{source_date}:{time_str}",
source_origin=str(md_path), # 例: data/diary/2026-05-27.md
)
④ server.py — 検索結果に出典を表示
search_memoryの結果を組み立てる際、source_originがあれば末尾に表示する。
source_origin = meta.get("source_origin", "")
...
if source_origin:
lines.append(f"📄 出典: {Path(source_origin).name}")
これで検索結果の末尾に 📄 出典: 2026-05-27.md と表示されるようになった。元の会話に戻れる。
なぜGroundingが重要なのか
記録は取れていた。しかし、記録の文脈に戻れなければ、知識は孤立したラベルになる。
SEがシステムを設計するとき、要件書だけでなく「なぜその要件が生まれたか」の背景を持っている状態と、持っていない状態では判断の質が違う。RAGも同じだった。
Geminiは出典を手放さない。自分のシステムもそうあるべきだった。
関連する記事
- Geminiの挙動から自分のRAGと同じ設計思想を確認した話は AIが自分と同じ設計思想に辿り着いていた話 に書いた。
- 同じ個人RAGを、手元のGPUだけでファインチューニングした話は RTX 2070ノートだけで個人RAGをファインチューニングした話 に書いた。
- 検索精度そのものを測定駆動で上げていった記録は ベクトル検索だけのRAGは「肝心なときに思い出さない」— ハイブリッド検索+測定で recall を 0.2→1.0 にした話 に書いた。
- この個人RAG全体の設計思想は AI に5回訂正された夜 — 個人 RAG を5年付き合える相棒にする設計思想 にまとめた。