A
AIエージェントの仕組み
ch5-s2 · Vector Store

ベクトルストア構築

約 14 分

この回のゴール

1. 全体像 — インデックスと検索

Q: 太郎は 3 個のリンゴを持っている。そこに花子が 7 個くれた。合計は?
A: 10 個

2. 埋め込みモデルの選び方

2026 年時点でよく使われるモデル:

モデル 提供 次元 用途
paraphrase-multilingual-MiniLM-L12-v2 HF 384 軽量・多言語
text-embedding-3-small OpenAI 1536 バランス
text-embedding-3-large OpenAI 3072 高精度
voyage-3 Voyage AI 1024 2024 年時点の最強クラス

注意: Claude API 自体は埋め込み専用 API を提供していません(2026 年現在)。RAG の検索部分は別途用意します。

3. FAISS — なぜベクトル DB が必要か

ナイーブ実装(小規模向け)

Q: 太郎は 3 個のリンゴを持っている。そこに花子が 7 個くれた。合計は?
A: 太郎は最初に 3 個持っていた。花子から 7 個もらったので、3 + 7 = 10。答えは 10 個。

FAISS の役割

Thought:    「太郎が持ってる数を知る必要がある」
Action:     lookup_person(name="太郎")
Observation: "太郎: リンゴ 3 個"
Thought:    「次は花子がくれた数」    ← 観測を踏まえて次の思考
Action:     lookup_transaction(...)
Observation: "花子 → 太郎: 7 個"
Thought:    「これで計算できる」
Action:     calculator(expression="3+7")
Observation: "10"
Thought:    「答えは 10 個」
Answer:     10 個

4. メタデータと組み合わせる

ベクトル DB は通常「ベクトル → ID」しか返しません。メタデータ は別途管理:

回答する前に必ず以下の手順で進めてください:

1. <thought> タグで何を考えているか書く
2. 必要なら tool を使う
3. 結果を踏まえて <thought> で次を考える
4. 十分な情報が揃ったら <answer> で答える

5. 正規化とコサイン類似度

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=16000,
    thinking={"type": "enabled", "budget_tokens": 4000},   # 👈
    messages=[...],
    tools=[...],
)

for block in response.content:
    if block.type == "thinking":
        print("思考:", block.thinking)   # 👈 内部思考が見える
    elif block.type == "tool_use":
        print("アクション:", block.name)

正規化すれば、内積 = コサイン類似度 になります:

$$ \cos(\vec{a}, \vec{b}) = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}| |\vec{b}|} \xrightarrow{\text{正規化後}} \vec{a} \cdot \vec{b} $$

だから FAISS の IndexFlatIP(内積)が cos 類似度検索になります。

6. 検索品質の評価

7. Top-k の選び方

k 効果 欠点
k=1 トークン少、ピンポイント 関連文書を逃すと即アウト
k=3〜5 最もバランス(実務) 適度なトークン量
k=10+ 取りこぼしは少ない トークン肥大、ノイズ混入

実務の定番は k=3〜5 です。


まとめ

この回の限界(次への動機)

長文を「1 つの文書」としてそのまま埋め込むと、意味が平均化されて検索ヒットしない。長文をどう区切る? 👉 次回「チャンク分割戦略」で、固定長・段落・再帰・セマンティックの 4 戦略を比較します。

参考文献

A
本家 Claude Academy で手を動かす
この回に対応する Anthropic 公式のレッスンです。ここは「なぜそう動くか」、向こうは「どう書くか」。サインインなしで読めます。
📝 理解度クイズ (3 問) 💡 ログインすると進捗が保存されます

💬 このサブステップの Q&A

まだ質問はありません。最初の質問を投稿してみましょう。

質問の投稿にはログインが必要です。