シリーズ · 連載中

素朴な RAG の限界 — 100 行で動くけど「使える」とは言えない理由

推奨読書順

  1. Part 1

    素朴な RAG の限界 — 100 行で動くけど「使える」とは言えない理由

    LLM + ベクトル検索で「動く RAG」を 100 行で組んでみる。実装は驚くほど短い。けれど「動く」と「使える」の間には大きな谷がある。シリーズ「今更聞けない RAG の作り方、評価の仕方」第 1 回。

  2. Part 2

    Retrieval を真面目に — chunking と hybrid search で recall を数値改善する

    素朴な RAG の retrieval を、metadata 保持型 chunking と BM25+dense hybrid search で立て直す。版違い文書と同義語 miss を観察し、status filter で旧版 (archived) を top-5 から追い出す効果を実測で確認する。シリーズ「今更聞けない RAG の作り方、評価の仕方」第 2 回

  3. Part 3

    Generation を引用付きで書く — Anthropic Citations API と cross-encoder reranker

    Part 2 の hybrid+filter で旧版は落ちたが、意味的に近い trap と引用喪失が残る。本記事 (Part 3) では cross-encoder reranker で top-20 → top-3 まで絞って semantic trap を圏外へ落とし、Anthropic Citations API で doc_id 付きの grounding を設計する。trap の rank が 2 位から 9 位へ動く様子を実測で観察し、検証は Part 4 へ送る。シリーズ「今更聞けない RAG の作り方、評価の仕方」第 3 回

  4. Part 4

    評価 (クライマックス) — RAGAs 4 指標で Part 1-3 の改善を客観評価する

    Part 1-3 で打った手 (naive / hybrid / rerank+citations) は感覚的には効いた。本記事 (Part 4) では RAGAs の 4 指標 (Faithfulness / Answer Relevance / Context Precision / Context Recall) で 30 件の golden set を Ollama (qwen3:8b judge) で回し、各 Part の改善を数値で再確認する。測定して初めて分かった「英語 reranker が日本語で aggregate を下げる」失敗と、gen=judge 同型バイアスの読み方も実機で議論する。シリーズ「今更聞けない RAG の作り方、評価の仕方」第 4 回

  5. Part 5

    本番運用 — Logging Safety / Drift / Cost / Rollback で RAG を運用する

    Part 4 で組んだ offline 評価は「変更前後で回帰がないか」を見るためのもの。本記事 (Part 5、シリーズ完結) では online 運用で必須になる Logging Safety (PII redaction を含む)、embedding drift 検出、コスト構造分解、インシデント対応とロールバックを扱う。「個人情報を含むコーパスで default のままログを取ると重大インシデント」を構造的に避ける設計を companion repo の実装と並べて示す。シリーズ「今更聞けない RAG の作り方、評価の仕方」完結編