rag-basics — 依存最小の RAG(Python)
RAG外部の知識ソースを検索し、結果を LLM の入力に加えて回答の根拠にする手法。検索の判断を Agent に任せる構成は Agentic RAG と呼ばれる。 の骨格「取り込み → 検索 → 根拠付き生成」を、ベクトル DB も重いフレームワークも使わず、純 Python で示すサンプルです。次のドキュメントの内容を実装しています。
- RAG 実装パターン — 検索と生成の分離、根拠(出典)提示
このサンプルの要点
- 埋め込みテキストや画像を、意味的な近さが距離に対応する数値ベクトルに変換したもの。RAG・記憶・分類の土台で、「何が近いか」はモデルで変わるため自社データで評価して選ぶ。モデル変更は全チャンクの再インデックスを伴う。は文字 bigram で代用: 実運用では埋め込みモデルを使いますが、ここでは依存を増やさないため、文字 2-gram の頻度ベクトルで近さを測ります(
docs.jsonの小さな文書集合が対象)。「ベクトル化して近さで引く」考え方は本物と同じです - 検索と生成を分ける: 検索(純 Python・コサイン類似度で上位 k 件)と生成(LLM)を分離し、検索結果を出力して根拠が見えるようにしています
- 資料だけを根拠に答えさせる: プロンプトで「資料になければ分からないと答える」よう指示し、出典 id を付けさせます(幻覚モデルが事実でない内容をもっともらしく生成する現象。「もっともらしい続きを生成する」という学習目的の自然な帰結であり、対策は指示の強化ではなく、根拠の外部供給(RAG)・出典要求・検証という構造側にある。対策)
前提
- Python 3.11 以降(
--mockと検索は追加依存なし・標準ライブラリのみで動きます) - 実 API 実行時のみ: Anthropic API キー(環境変数
ANTHROPIC_API_KEY)とpip install -r requirements.txt
実行
# モック実行(API キー不要・依存インストール不要)
python rag.py --mock "経費の申請締切はいつですか?"
# 実 API 実行(要 ANTHROPIC_API_KEY)
pip install -r requirements.txt
python rag.py "経費の申請締切はいつですか?"検索結果(どの文書が上位に来たか・スコア)が表示され、その資料を根拠に回答されます。
動作確認日
- 今回の再確認: 2026-10-04(Python 3.12.14、作業専用 venv、固定した anthropic 1.4.0 / httpx2 2.12.0 / mcp 2.2.0)。全 6 サンプルの
--mockを含む 17 回帰テストプロンプト・ツール・モデルの変更で既存の品質が壊れていないかを、評価データセットの再実行と前回比較で検知するテスト。が合格しました。実 SDK の HTTP モックとローカル MCPツールやデータソースを LLM アプリケーションに接続するための標準プロトコル。概要は ツール使用、接続の実務は ツール接続標準(MCP とエコシステム) stdio を確認し、実 LLM API は呼んでいません(実行手順)
以下は過去の確認記録です。
- モック実行(
--mock)+ 検索: 2026-09-10 に確認(Python 3.11.3、追加依存なし) - SDK 回帰テスト: 2026-09-10 に確認(anthropic 1.4.0、httpx2 2.12.0 の HTTP モック)。打ち切り・拒否応答を通常の完成出力として返さないことを確認(実行手順)
- 実 API 実行(生成): 未確認(各自の環境で確認し、この欄に日付を追記してください)
TODO・未確認事項
モデルの選択
既定モデルは claude-opus-5-5 です(モデル仕様確認: 2026-10-03)。環境変数 ANTHROPIC_MODEL で上書きできます。PowerShell では $env:ANTHROPIC_MODEL = "claude-sonnet-5-5"、POSIX シェルでは export ANTHROPIC_MODEL=claude-sonnet-5-5 を実行してから起動します。--mock は API を呼びません。モデル移行時は強制ツール指定・思考履歴・出力上限の互換性を確認してください。実 API の動作確認日は従来の記録を維持し、今回のモック回帰結果は作業記録に分けます。