このセッションで学ぶこと

1
LLM活用の3大パターン 直接生成、RAG、エージェントの違いと使いどころを整理します
2
Function Calling / Tool Use LLMが外部ツールを呼び出すアーキテクチャを理解し、実装の勘所を掴みます
3
RAGパイプラインの構築 文書分割からベクトルDB、検索、プロンプト注入までの全工程を把握します
4
Hallucination対策と評価指標 出力の信頼性を担保するためのチェック手法と定量評価の方法を身につけます

1. LLM活用の3大パターン

LLMの使い方は大きく3つに分類できます。単純な方から順に、直接生成、RAG(検索拡張生成)、エージェント。プロジェクトの要件によってどのパターンが適切かが変わります。

直接生成
プロンプトだけでLLMに回答を生成させます。最もシンプルで導入が速い方法です。
  1. ユーザーが質問を入力
  2. プロンプト(System + User)をLLMに送信
  3. LLMが学習済み知識から回答を生成
  4. 回答を返却

向いている場面: 一般的なQ&A、文章生成、翻訳、コード生成など、外部データの参照が不要なタスク

RAG(検索拡張生成)
外部の知識ベースから関連情報を検索し、プロンプトに注入してから回答を生成します。
  1. ユーザーが質問を入力
  2. 質問をEmbeddingしてベクトルDBを検索
  3. 関連文書を取得
  4. 文書をプロンプトに注入
  5. LLMが根拠付きで回答を生成

向いている場面: 社内ナレッジ検索、最新情報の参照、根拠付き回答が必要な場面

エージェント
LLMが自律的にツールを呼び出し、複数ステップのタスクを実行します。
  1. ユーザーが目標を指示
  2. LLMがタスクを分解
  3. 必要なツールを選択・実行
  4. 結果を評価し次のアクションを判断
  5. 完了するまでループ

向いている場面: 複雑な調査、マルチステップの業務自動化、コード修正の自動化

3つのパターンは排他的ではありません。エージェントの中でRAGを使う、直接生成の結果をツールで検証する、といった組み合わせが実務では一般的です。

2. Function Calling / Tool Use のアーキテクチャ

Function CallingはLLMが「この場面ではこのツールを呼ぶべき」と判断し、必要なパラメータを生成する仕組みです。LLMがツールを直接実行するのではなく、「何を呼ぶか」を指示するだけで、実際の実行はアプリケーション側が行います。この分離がセキュリティ上の重要なポイントになります。

処理フロー

ユーザー入力
「東京の天気は?」
LLM
ツール呼出を判断
Tool Call
get_weather(city:"tokyo")
最終回答を生成
「東京は晴れ、気温12度です」
LLM
結果を統合
ツール実行結果
{"weather":"sunny","temp":12}

OpenAI vs Anthropic の実装比較

観点 OpenAI(Function Calling) Anthropic(Tool Use)
定義方法 tools配列にJSON Schemaで関数を定義 tools配列にinput_schemaで定義
呼出形式 tool_callsオブジェクト tool_useコンテンツブロック
並列呼出 対応(parallel_tool_calls) 対応(複数tool_useブロック)
強制実行 tool_choice: "required" tool_choice: {type: "any"}
ストリーミング 対応 対応
結果返却 roleを"tool"にしてtool_call_idと紐付け tool_resultコンテンツブロック

実装時の注意点

1
ツール定義の説明文が品質を決める
LLMはdescriptionを読んでツールを選択します。曖昧な説明だと間違ったツールを呼んでしまいます。パラメータのdescriptionにも具体例を含めると精度が上がります。
2
バリデーションは必須
LLMが生成したパラメータを無検証で外部APIに送るのは危険です。型チェック、範囲チェック、許可リスト照合を実行前に行ってください。
3
エラーハンドリングを設計する
ツール実行が失敗した場合の結果もLLMに返します。LLMはエラー情報を見てリトライの判断や、ユーザーへのフォールバック回答を生成できます。
4
ツール数は絞る
使えるツールが20個以上になると選択精度が下がります。頻度の低いツールはグループ化するか、Routerを挟んで段階的に提示してください。

3. RAGパイプラインの全体像

RAGは「検索して、注入して、生成する」の3ステップに見えますが、実際にはその前後に複数の工程があります。全工程を把握しておくことで、ボトルネックの特定と改善が速くなります。

パイプライン詳細

1
文書収集・前処理
対象文書を収集し、不要なフォーマット要素(ヘッダ、フッタ、ページ番号等)を除去します。PDF、Word、HTML、Markdownなど様々な形式を統一的に扱える前処理が必要です。
2
チャンク分割(Chunking)
文書を検索に適した単位に分割します。分割が粗すぎると検索ノイズが増え、細かすぎると文脈が失われます。チャンクサイズとオーバーラップの設計がRAGの精度を左右します。
3
Embedding(ベクトル化)
各チャンクをEmbeddingモデルに通して数値ベクトルに変換します。意味的に近いテキスト同士が近いベクトルになる性質を利用します。
4
ベクトルDB格納
生成したベクトルをベクトルデータベースに格納します。メタデータ(ファイル名、作成日、カテゴリ等)も一緒に保存しておくと、後のフィルタリングに活用できます。
5
クエリの検索
ユーザーの質問をEmbeddingし、ベクトルDB内の類似ベクトルを検索(ANN: Approximate Nearest Neighbor)します。上位k件の関連チャンクを取得します。
6
プロンプト注入
取得したチャンクをSystem PromptまたはUser Promptに埋め込みます。「以下の文書を根拠にして回答してください」のような指示とセットで使います。
7
回答生成
LLMが注入された文書を参照しながら回答を生成します。引用元を明示させる(Citation)とHallucination抑制に効果的です。

4. チャンク分割戦略の比較

チャンク分割はRAGの精度に直結します。「どう切るか」で検索結果が変わり、最終回答の品質が変わります。3つの戦略を比較します。

戦略 方法 チャンクサイズ目安 利点 欠点
固定長分割 文字数やトークン数で機械的に分割 500-1000 tokens 実装が容易 均一なチャンクサイズ 文脈が途中で切れる可能性があります
セマンティック分割 意味の区切り(段落、セクション)で分割 可変(段落単位) 文脈保持 意味的にまとまった単位 チャンクサイズが不均一になりやすいです
再帰的分割 複数の区切り文字を優先度付きで適用 500-1500 tokens バランス 文脈保持とサイズ制御を両立 パラメータ調整が必要です

推奨アプローチ

まず再帰的分割で開始
チャンクサイズ 800 tokens / オーバーラップ 200 tokens
検索精度を評価
結果を見て調整

オーバーラップとは隣接チャンク間で重複させるトークン数のことです。文脈が途切れるのを防ぐ効果があります。オーバーラップ率はチャンクサイズの15-25%が目安です。

5. Embeddingモデルの比較

Embeddingモデルの選定はRAGの検索精度に直接影響します。英語中心のモデルと日本語対応モデルで性能差が出るため、対象言語を考慮して選びます。

モデル プロバイダー 次元数 日本語対応 料金目安 特徴
text-embedding-3-large OpenAI 3072 良好 $0.13 / 1M tokens 高精度、次元数を削減可能(Matryoshka)
text-embedding-3-small OpenAI 1536 普通 $0.02 / 1M tokens コスト重視、小規模プロジェクト向き
embed-multilingual-v3.0 Cohere 1024 良好 無料枠あり / 有料プランあり 100言語以上対応、多言語検索に強いです
multilingual-e5-large Microsoft(OSS) 1024 良好 無料(自社ホスト) Hugging Faceで公開、自社デプロイ可
intfloat/multilingual-e5-large-instruct intfloat(OSS) 1024 良好 無料(自社ホスト) 指示文付きEmbedding、検索精度向上

日本語のRAGでは text-embedding-3-large が安定した選択肢です。コストを抑えたい場合は multilingual-e5系のOSSモデルを自社ホストする方法もあります。

6. ベクトルデータベース比較

ベクトルDBはEmbeddingを格納・検索する専用データベースです。プロジェクトの規模、運用形態、既存インフラとの相性で選びます。

DB名 形態 スケーラビリティ フィルタリング 料金 適合場面
Pinecone マネージド 高(サーバーレス対応) メタデータフィルタ対応 従量課金(Free Tierあり) 本番環境、運用負荷を下げたい場合
Weaviate OSS / マネージド GraphQL、ハイブリッド検索 OSS無料 / Cloud有料 ハイブリッド検索が必要な場合
Qdrant OSS / マネージド 豊富なフィルタ条件 OSS無料 / Cloud有料 高度なフィルタリングが必要な場合
pgvector PostgreSQL拡張 SQLによるフィルタ PostgreSQLの費用のみ 既存PostgreSQLがある場合
ChromaDB OSS 低-中 基本的なフィルタ 無料 PoC、ローカル開発、小規模プロジェクト

選定の判断基準

PoC / 検証段階
ChromaDB(ローカルで即起動)
既存PostgreSQLあり
pgvector(追加インフラ不要)
本番 / 大規模運用
Pinecone / Qdrant / Weaviate

7. 検索精度向上テクニック

ベクトル検索だけでは取りこぼしが発生します。キーワードの一致が重要な場面もあれば、ユーザーの質問が曖昧で検索がうまくいかない場面もあります。3つのテクニックで精度を底上げします。

Hybrid Search(ハイブリッド検索)
  • ベクトル検索(意味的類似性)とキーワード検索(BM25等)を組み合わせます
  • 固有名詞や専門用語はキーワード検索が強いです
  • 概念的な質問はベクトル検索が強いです
  • 両方のスコアを加重平均して最終ランキングを決めます
  • Weaviate、Qdrantが標準対応
Reranking(再ランキング)
  • 初回検索で取得した候補を、より精密なモデルで再評価します
  • Cross-Encoderモデルが質問と文書のペアを直接比較します
  • 初回検索の上位20-50件から上位5件を再選定します
  • Cohere Rerank API、cross-encoder/ms-marco系が有名です
  • 精度は上がりますがレイテンシが増えます(+100-300ms)
Query Expansion(クエリ拡張)
  • ユーザーの質問をLLMで複数のサブクエリに展開します
  • 元の質問とサブクエリの両方で検索し、結果を統合します
  • HyDE: 仮の回答を生成してそれでも検索する手法です
  • 質問が曖昧なときに特に効果が大きいです
  • LLM呼出が増えるのでコストとレイテンシに注意が必要です

実務での適用順序

Step 1: Hybrid Search
Step 2: Reranking
Step 3: Query Expansion

Step 1だけで十分な精度が出ることも多いです。Step 2, 3は精度が足りない場合に段階的に追加します。全部盛りにするとレイテンシとコストが跳ね上がるので、要件に応じて判断してください。

8. Hallucination対策チェックフロー

LLMが事実に基づかない情報を生成してしまうHallucination。完全にゼロにはできませんが、対策を重ねることでリスクを大幅に下げられます。4つの防御層で対処します。

G
Grounding(根拠付与)
RAGで取得した文書を根拠として必ず参照させます。System Promptに「提供された文書に記載のない情報は"分かりません"と回答してください」と明記します。回答を根拠の範囲内に限定することで、モデルの創作を抑制できます。
C
Citation(引用明示)
回答内に引用元(文書名、段落番号、URL等)を明示させます。ユーザーが根拠を確認できるようになり、誤りの発見が容易になります。プロンプトで「回答の各ポイントに対して[出典1]のように引用を付けてください」と指示します。
S
Self-consistency Check(自己整合性チェック)
同じ質問を複数回(Temperature > 0で)投げて、回答のばらつきを見ます。回答が安定していれば信頼度が高く、大きくブレるなら要注意です。コストは増えますが、重要な判定に対しては有効な検証手段になります。
V
Verification(外部検証)
別のモデルや外部ツールで回答の事実関係を検証します。LLM-as-a-Judgeで別モデルに「この回答は提供文書と整合しているか」を判定させる方法が広まっています。

対策の適用指針

リスクレベル 推奨対策
社内雑談Bot、アイデア出し Grounding のみ
社内FAQ、技術文書検索 Grounding + Citation
契約書レビュー、医療情報、金融判断 全4層 + 人間による最終確認

9. RAG評価指標

RAGの品質を「なんとなく良い」で終わらせません。定量的に測定して改善サイクルを回すための3つの指標を押さえます。

Faithfulness(忠実性)
生成された回答が、取得した文書の内容に忠実かどうかを測ります。文書に書かれていない情報を回答に含んでいないかを確認します。
目標: 0.85 以上
Answer Relevancy(回答関連性)
生成された回答が、ユーザーの質問に対して的確に答えているかを測ります。質問と回答の意味的な一致度を評価します。
目標: 0.80 以上
Context Recall(文脈再現率)
正解を導くために必要な文書が、検索結果に含まれているかを測ります。取得段階の漏れを検出します。
目標: 0.75 以上

評価ツールと手法

ツール / 手法 概要 特徴
RAGAS RAG専用の自動評価フレームワーク 月間40万DL超、2000万以上の評価実行[RAGAS公式]。Faithfulness, Answer Relevancy等を自動算出。OSSで無料利用可
Maxim AI エンタープライズ向けAI評価プラットフォーム 2026年の評価ツールランキングでトップ評価[Maxim AI]。品質モニタリングとコスト最適化を統合
LangSmith LangChain公式のトレーシング・評価ツール RAGパイプラインのネスト実行ステップ可視化、プロンプトのバージョン管理、A/Bテストに強いです
Arize Phoenix LLMオブザーバビリティプラットフォーム トレーシング、評価、Embeddingの可視化をカバー。OSS版あり
DeepEval LLMテスティングフレームワーク pytestライクなインターフェースで14以上の評価メトリクスを提供。CI/CD統合が容易
人間評価 担当者が手動で回答品質を採点 最も信頼性が高いです。スケールしませんが、自動評価の校正に必須です
LLM-as-a-Judge 別のLLMに回答品質を判定させます スケーラブルです。ただし判定モデル自身のバイアスに注意が必要です

改善サイクル

評価セット作成(50-100件)
現状のスコア測定
ボトルネック特定
改善実施
再測定

Context Recallが低い場合は検索段階(チャンク分割やEmbeddingモデル)に問題があります。Faithfulnessが低い場合はプロンプトの指示やGrounding設計に問題があります。指標を見てどこを直すべきかを判断します。

用語集

RAG(Retrieval-Augmented Generation)
外部の知識ベースから関連情報を検索し、その情報をプロンプトに注入してからLLMに回答を生成させる手法です。社内文書の活用やHallucination抑制に使われます。
Embedding
テキストを高次元の数値ベクトル(浮動小数点の配列)に変換する処理です。意味が近いテキスト同士は、ベクトル空間上で近い距離に配置されます。
Vector Database(ベクトルDB)
高次元ベクトルの格納と類似検索に特化したデータベースです。ANN(近似最近傍探索)アルゴリズムにより、数百万件のベクトルから数ミリ秒でTop-K件を返します。
Chunk(チャンク)
文書をEmbedding・検索するために分割した断片です。チャンクの大きさと分割方法がRAGの検索精度を大きく左右します。
Semantic Search(セマンティック検索)
テキストの意味的な類似性に基づいて検索する手法です。キーワードが一致しなくても意味が近ければヒットします。Embeddingを使ったベクトル類似度検索がこれにあたります。
Hybrid Search(ハイブリッド検索)
ベクトル検索(セマンティック)とキーワード検索(BM25等)を組み合わせる検索手法です。両者の強みを活かして検索精度を向上させます。
Reranking(再ランキング)
初回検索で取得した候補を、Cross-Encoderなどのより精密なモデルで再評価し、関連性の高い順に並べ替える手法です。精度は上がりますがレイテンシが増えます。
Function Calling(関数呼出)
LLMが「どのツール(関数)を、どんなパラメータで呼ぶべきか」を判断し、呼出指示を返す機能です。実際の関数実行はアプリケーション側が行います。OpenAIが先行して導入しました。
Tool Use
AnthropicにおけるFunction Callingの呼称です。概念は同じで、LLMがツールの選択とパラメータ生成を行い、実行結果を受け取って最終回答を生成します。
Grounding(グラウンディング)
LLMの回答を外部の信頼できる情報源に紐づけることです。RAGで取得した文書を根拠として参照させ、文書にない情報の生成を抑制する手法です。
Hallucination(幻覚)
LLMが事実に基づかない情報をもっともらしく生成してしまう現象です。固有名詞の誤り、存在しない論文の引用、数値のでっち上げなどが典型例です。
Few-shot
プロンプト内にタスクの入出力例を数個(2-5個程度)含めることで、LLMに期待する出力形式や振る舞いを示す手法です。Zero-shot(例なし)より精度が上がることが多いです。
Chain of Thought(CoT)
LLMに推論の過程をステップバイステップで記述させるプロンプト手法です。数学的問題や論理的推論で特に効果が高いです。「ステップごとに考えてください」と指示するだけで発動します。

参考URL一覧

Anthropic Tool Use Documentationdocs.anthropic.com OpenAI Function Calling Guideplatform.openai.com OpenAI Embeddings Guideplatform.openai.com Pinecone -- Retrieval Augmented Generation 解説pinecone.io ChromaDB Documentationtrychroma.com Weaviate Documentationweaviate.io Qdrant Documentationqdrant.tech pgvector -- PostgreSQLベクトル拡張github.com RAGAS -- RAG評価フレームワークragas.io LangSmith Documentationsmith.langchain.com Maxim AI -- エンタープライズAI評価プラットフォームgetmaxim.ai Arize Phoenix -- LLMオブザーバビリティarize.com DeepEval -- LLMテスティングフレームワークconfident-ai.com Google AI for Developersai.google.dev Cohere Rerank Documentationcohere.com