RAG 構築 学習ノート — ベクトル検索とネットワーク(グラフ)RAG¶
開始日: 2026-06-10 動機: 連載で RAG を「読む」経験(02/03/10/12/26/27)は積んだが、ゼロから自分で組んだことがない。ベクトル RAG を素手で実装し、修論の KG/GNN 研究・副指導の動的知識グラフ(
~/dkg-jaist-report)と接続するグラフ RAG まで到達する 参考:software-design/02・03(RAG基礎)、10(CRAG)、12(Adaptive RAG)、26・27(DSPy による RAG 最適化)、Vault の03_engineering/03-2_notes(ベクトルDB調査ノート) 写経教材:lectures/rag_basics/— STEP 1〜5 に対応する 8 例(素手実装 ex01〜07 + LangChain 版 ex08)。各 STEP はまずここを写経してから自分のsNN_*.pyを書く
学習ロードマップ¶
- [ ] STEP 0: 復習と弱点の列挙 — software-design 02/03/12 の STUDY_NOTES を読み返し、「検索→注入→生成」の各段で自分が説明できない箇所を「メモ」節に列挙する
- [ ] STEP 1: ベクトル RAG を素手で実装(
s01_vector_rag.py)— ベクトル DB なし。text-embedding-3-small+ numpy の cosine 類似度だけで検索する。チャンク分割(固定長 vs 段落単位)も自作し、分割の違いが回答に与える影響を観察する - [ ] STEP 2: 検索品質の評価(
s02_retrieval_eval.py)— 自作 QA セット 20 件で recall@k / MRR を測る。チャンクサイズと overlap を振って差を数値で見る(「なんとなく良くなった」を禁止する) - [ ] STEP 3: ハイブリッド検索 — BM25(rank-bm25)とベクトル検索を RRF(Reciprocal Rank Fusion)で統合。日本語の形態素分割(fugashi 等)が BM25 に効くかも確認する
- [ ] STEP 4: ベクトル DB に載せ替え — Chroma か Qdrant に STEP 1 を移植し、メタデータフィルタ・永続化・スケールの観点で「numpy 素手」との違いを整理する
- [ ] STEP 5: グラフ RAG の最小実装(
s03_graph_rag.py)— LLM でトリプル(主語・述語・目的語)を抽出 → NetworkX で知識グラフを構築 → 質問中のエンティティ起点でサブグラフを取り出して文脈に注入。同じ質問でベクトル RAG(STEP 1)と回答を比較し、グラフが勝つ質問タイプ(多段ホップ・関係性質問)を特定する - [ ] STEP 6: GraphRAG(コミュニティ要約型)の原理 — Microsoft GraphRAG の Local / Global search の仕組みを読み、Leiden クラスタリング + コミュニティ要約の最小版を自作 KG 上で再現する。ネットワーク科学(コミュニティ検出・中心性)が RAG にどう効くかを修論の語彙で説明できるようにする
- [ ] STEP 7: 自分の研究と接続 —
~/dkg-jaist-reportの CoinPost 動的知識グラフを STEP 5 の検索基盤に載せ、「日本語金融ニュース QA」をグラフ RAG で答えさせる。時間軸(動的 KG)を検索にどう入れるかを実験する
メモ¶
(学習を進めながら追記する)
作成: 2026-06-10 / 最終更新: 2026-06-10