# 実験素材：LLM Wiki・RAG・全文検索を同じ質問で比べる

記事「`llm-wiki-vs-rag-full-text-search`」の実験で使ったコーパス、台帳、スクリプト、生の結果です。実験日は2026-10-15です。

## 中身

| 場所 | 内容 |
|---|---|
| `spec.py` | 架空プロジェクトの事実台帳（資料39本ぶん）。正解はここから決めた |
| `gen_corpus.py` / `gen_noise.py` | 台帳から資料を書かせたスクリプト（`claude -p`、モデルは claude-sonnet-5-5） |
| `corpus/` | プロジェクト資料39本（約5.9万字） |
| `noise/` | 日常業務の資料80本（約15.6万字）。大きいコーパス用 |
| `questions.py` | 質問29問と採点の正規表現。主比較は Q22 を除く28問。探し直しなしはさらに Q26〜Q29 が未実行で24問 |
| `ingest.py` / `wiki_schema_CLAUDE.md` | LLM Wikiの取り込み（1資料1回の `claude -p`）と、渡した運用ルール |
| `run.py` | 条件ごとの質問実行（fts・wiki・rag・full） |
| `score.py` / `judge.py` / `final.py` | 正規表現採点、LLM判定、集計 |
| `results/*.jsonl` | 1回ごとの生の結果（回答、費用、ターン数、道具呼び出し、トークン数） |
| `judged.jsonl` | LLM判定の結果 |
| `ingest_costs.json` | wiki取り込み119回の費用・ターン数・所要時間 |
| `final.json` | 条件ごとの集計 |
| `../experiment.zip` | 上記一式と、完成したwiki2つ（資料39本版・119本版） |

## 条件

- どの条件も、モデルは `claude-sonnet-5-5`、システムプロンプトは1行、`--strict-mcp-config` と空の設定で、Claude Codeの設定や記憶は混ぜていない。
- **全文検索**：Read・Grep・Globだけを渡したエージェントが `corpus/` を探す。
- **全文検索（探し直しなし）**：同じだが、検索は1回だけと指示。Q22を除き、Q26〜Q29未実行の24問×3回。対応する24問ではS/Lとも1shot 61/72（84.7%）、RAG(k5) 63/72（87.5%）、通常FTS 72/72（100%）。主比較28問とは分けて読む。
- **RAG**：`intfloat/multilingual-e5-base`（CPU）で、400字・重なり80字の断片を埋め込み、質問に近い上位k個（5と15）を1回のLLM呼び出しに渡す。道具なし。
- **LLM Wiki**：資料を日付順に1本ずつ取り込み、できたwikiだけを Read・Grep・Glob で探す。`raw/` は渡さない。
- **全文投入**：全資料を1回のプロンプトに入れる。道具なし。

## 再現するとき

- パスは `/tmp/lwrf/...` を前提にしている。置き換えて使う。
- 埋め込みには `sentence-transformers` が要る。
- `claude -p` はローカルのログインで動かした。費用は `total_cost_usd`（API定価換算。実際の請求ではない）。
- 質問は並列6本で実行したので、プロンプトキャッシュが効いている。単発で聞くと費用は上がりうる。入力トークン数（`in_tok + cache_read + cache_write`）はキャッシュに左右されない。

## 限界

探し直しなしの補助比較は上記24問で、Q26〜Q29の結果はない。主散布図も探し直しなしは24問、他方式は28問（全文投入Lのみ1回、他は3回）という元の集計対象を描く。同じ質問集合の比較は記事の対応24問の表を参照。保存データ・集計値は変更していない。

架空の資料・日本語・1つのモデル・各条件3回です。数百ページ以上、PDFや画像、他のモデルでは未検証です。採点の経緯は記事の末尾にあります。
