RAG評価基盤の作り方:精度・再現率・運用コストを同時に最適化する実践手順

RAG評価基盤の作り方:精度・再現率・運用コストを同時に最適化する実践手順 RAG(Retrieval Augmented Generation)は導入が進んでいますが、運用で最も難しいのは「改善したつもり」が頻発する点です。embedding モデルを変えた、chunk サイズを変えた、reranker を追加した。どれも良さそうに見えるのに、ユーザー満足は上がらない。このギャップを埋めるのが評価基盤です。 本記事では、RAG を継続改善するための評価パイプラインを、データセット設計から CI 統合まで具体的に解説します。 RAG評価で見るべき3層 RAG の品質は 1 指標では測れません。最低でも次の3層を分けて評価します。 Retrieval層: 正しい文書を取れているか Generation層: 回答が正確で有用か System層: レイテンシ・コスト・安定性 この分離がないと、生成品質低下の原因が retrieval なのか prompt なのか判別できません。 ステップ1:評価データセットを設計する 1-1. 問い合わせカテゴリを分割 例として次の5カテゴリに分けます。 定義確認(用語説明) 手順質問(How-to) 例外対応(エラー解決) 比較検討(A vs B) 根拠提示(出典必須) カテゴリごとに難易度と重要度を持たせ、偏りを防ぎます。 1-2. 正解の持ち方 正解は「理想回答1つ」では不十分です。RAGでは表現揺れが自然なので、次を保存します。 期待要素(必須ポイント) 禁止要素(誤情報、過剰断定) 参照すべき文書ID この形式にすると、自動評価と人手レビューを両立できます。 ステップ2:Retrieval評価を自動化 代表指標: Recall@k MRR nDCG 例えば、正解文書IDを持つ場合は次のように計算します。 1 2 3 def recall_at_k(retrieved_ids, gold_ids, k=5): topk = set(retrieved_ids[:k]) return 1.0 if len(topk.intersection(gold_ids)) > 0 else 0.0 運用では平均値だけでなく、カテゴリ別分布を見ることが重要です。手順質問だけ recall が低い場合、chunk 戦略や見出し抽出に問題がある可能性が高いです。 ...

February 28, 2026 · 2 min · AI2CORE 編集部

LLM運用の可観測性を実装する:OpenTelemetryでつくるPrompt/Token/Latency監視の実践

LLM運用の可観測性を実装する:OpenTelemetryでつくるPrompt/Token/Latency監視の実践 LLMアプリは「動く」だけでは本番品質になりません。運用を始めると、次のような問題が必ず発生します。 昨日まで 1.2 秒だった応答が突然 4 秒台になる コストが月末に急増したが、どの機能が原因かわからない 回答品質が落ちたと言われるが、どのプロンプト変更が影響したか追えない リトライ回数や外部API待ちの偏りが可視化されていない この課題を解く鍵が「可観測性(Observability)」です。本記事では OpenTelemetry を軸に、LLM アプリの監視をゼロから構築する実装を、実際に運用で使える粒度で説明します。 なぜ APM だけでは LLM を見切れないのか 従来の Web アプリ監視(CPU、HTTP レイテンシ、エラーレート)だけでは、LLM 特有の故障点が見えません。理由は、LLM の品質とコストが「入力テキスト」と「推論設定」に強く依存するためです。 少なくとも次の軸が必要です。 Prompt 可視化: システム/ユーザー/ツール呼び出しの構成 Token 可視化: input/output token、モデル別単価、キャッシュヒット率 推論経路可視化: retrieval → rerank → generation の各ステップ時間 品質シグナル: hallucination 率、参照文書一致率、ユーザー評価 つまり、HTTP 1 本のログでは不十分で、トレース単位で LLM 実行を分解する必要があります。 アーキテクチャの全体像 最初に、実装対象を次の構成とします。 API: FastAPI LLM: OpenAI / Azure OpenAI(抽象化) RAG: pgvector + reranker Observability: OpenTelemetry SDK + OTLP Exporter + Grafana Tempo/Loki/Prometheus 処理フローは次の通りです。 ...

February 27, 2026 · 3 min · AI2CORE 編集部

2026年のAIエージェント進化論:シングルプロンプトからマルチエージェント協調へ

2026年のAIエージェント進化論:シングルプロンプトからマルチエージェント協調へ はじめに 「この複雑なレポート作成、AIに丸投げできないだろうか?」 「ユーザーからの曖昧な指示を解釈して、コードを書き、テストし、デプロイまで自動化したい。」 AI、特に大規模言語モデル(LLM)の進化に触れたエンジニアなら、一度はこんな夢を描いたことがあるのではないでしょうか。しかし、ChatGPTのような単一のプロンプトで対話するモデルに複雑なタスクを依頼すると、途中で文脈を見失ったり、期待とは異なるアウトプットが出てきたりと、その限界に直面することも少なくありません。 ReAct(Reasoning and Acting)のようなフレームワークを用いてツールを使わせる「シングルエージェント」は大きな進歩でしたが、それでもなお、複雑で多段階のタスクを自律的にこなすには力不足でした。まるで、一人の優秀な新入社員に、いきなり会社の全業務を任せるようなものです。 もし、AIが一人ではなく、「専門家チーム」として協調して働いてくれたらどうでしょう?リサーチ担当、コーディング担当、レビュー担当、そしてプロジェクト全体を管理するマネージャー。それぞれが専門知識を持ち、互いにコミュニケーションを取りながら、一つの大きな目標に向かって自律的にタスクを遂行する。 本記事では、そんな未来を実現する技術として注目を集める**「マルチエージェント・システム」**について、その概念から具体的な実装方法までを深く掘り下げます。特に、この分野を牽引する2大フレームワーク、**Microsoftの「AutoGen」とLangChainの「LangGraph」**に焦点を当て、そのアーキテクチャ、実装のポイント、そして現場で活かすための実践的なTipsを、豊富なコード例とともに解説していきます。 この記事を読み終える頃には、あなたはシングルプロンプトの呪縛から解き放たれ、自律的なAIエージェントチームを編成するための確かな知識とインスピレーションを得ているはずです。 なぜ今、マルチエージェント・システムなのか? LLMの能力が飛躍的に向上し、GPT-4oのようなマルチモーダル対応モデルが登場する中で、なぜわざわざ複数のエージェントを協調させる必要があるのでしょうか。その理由は、**「シングルエージェントの限界」と「タスクの複雑性への対応」**にあります。 シングルエージェントの限界 従来のシングルエージェントのアーキテクチャは、基本的に一つの「思考の連鎖(Chain of Thought)」に依存しています。これは、直線的な思考プロセスには強いものの、以下のような課題を抱えています。 思考の硬直性: 一つの計画に固執し、途中で問題が発生しても柔軟に軌道修正するのが苦手です。複数の選択肢を並行して検討したり、第三者の視点でレビューしたりといった、人間が行うような複雑な意思決定が困難です。 コンテキストの肥大化: タスクが複雑になるほど、プロンプトに含めるべき情報(過去のやり取り、ツールの使用履歴、中間生成物)が増大します。これはAPIコストの増加、処理速度の低下、そしてLLMが重要な情報を見失う「Lost in the Middle」問題を引き起こします。 責任範囲の曖昧さ: 一つのエージェントにあらゆる役割(計画、実行、検証、修正)を詰め込もうとすると、プロンプトが極めて複雑になり、かえって性能が低下します。各ステップで何をすべきかが曖昧になり、幻覚(ハルシネーション)のリスクも高まります。 人間の組織に学ぶ「専門化」と「協調」 これらの課題を解決するヒントは、私たち自身の社会、つまり「組織」にあります。優れた企業は、一人の天才が全てをこなすのではなく、営業、開発、マーケティング、品質管理といった専門部署が互いに連携・協調することで、複雑で大きな目標を達成します。 マルチエージェント・システムは、この組織論をAIの世界に持ち込むアプローチです。 専門化 (Specialization): 各エージェントに特定の役割と専門知識を与えます。「コードを書くのが得意なエージェント」「書かれたコードを厳しくレビューするエージェント」「ユーザーとの対話を受け持つエージェント」といったように、責任範囲を限定することで、各エージェントのプロンプトをシンプルかつ高性能に保てます。 協調 (Collaboration): エージェント同士がメッセージを交換し、対話することで、問題を解決します。例えば、コーディングエージェントが書いたコードをレビューエージェントがチェックし、修正点をフィードバックする。この対話のループを通じて、生成物の品質をスパイラル状に向上させることができます。 自律性 (Autonomy): 全体の目標が与えられると、エージェントチームは自律的にタスクを分解し、役割を分担し、協調してタスクを遂行します。これにより、人間がマイクロマネジメントする必要がなくなります。 このパラダイムシフトは、単なるAIの性能向上ではなく、AIによる問題解決の「方法論」そのものの進化と言えるでしょう。 具体的な解決策:AutoGenとLangGraphによる実装 それでは、実際にマルチエージェント・システムを構築するためのフレームワークを見ていきましょう。ここでは、特に人気の高いAutoGenとLangGraphを取り上げ、それぞれの思想と実装方法を解説します。 1. AutoGen:対話による自律的タスク解決 AutoGenは、Microsoft Researchが開発したフレームワークで、エージェント間の対話を中心に据えた設計が特徴です。複数のエージェント(ConversableAgent)を定義し、それらが互いにチャットを繰り返すことで、タスクが進行していきます。 AutoGenのアーキテクチャ AutoGenの基本的な登場人物は以下の通りです。 AssistantAgent: LLMを搭載した標準的なAIエージェント。与えられた役割(例:「あなたはPythonの専門家です」)に基づいて発言やコード生成を行います。 UserProxyAgent: 人間の代理人として振る舞う特殊なエージェント。他のエージェントからコードを受け取ると、それを実際に実行しようと試みます。実行結果(成功、失敗、エラーメッセージ)を次のメッセージとして相手に返すことで、対話のループが生まれます。また、人間の入力を促し、介入(Human-in-the-Loop)を可能にします。 GroupChatManager: 3体以上のエージェントが参加するグループチャットを管理し、次に誰が発言するかを制御します。 実装例:コード生成&実行タスク ここでは、「あるURLから株価データを取得し、それをプロットして画像ファイルとして保存する」というタスクを、2体のエージェントで解決する例を見てみましょう。 1. セットアップ 1 pip install "pyautogen[retrievechat]" 2. 設定ファイルの準備 プロジェクトのルートに OAI_CONFIG_LIST という名前でJSONファイルを作成し、APIキーを設定します。 1 2 3 4 5 6 [ { "model": "gpt-4o", "api_key": "sk-..." } ] 3. Pythonコード ...

February 24, 2026 · 4 min · AI2CORE 編集部

【速報】Google Gemini 3.1 Pro登場!新機能と使い方を徹底解説

はじめに 皆さん、こんにちは!テクノロジーの進化は本当に早いもので、Googleから最新のAIモデル「Gemini 3.1 Pro」が正式に発表されました。 このニュースは世界中のエンジニアを驚かせており、テック系コミュニティの聖地とも言えるHacker Newsでは、投稿からわずか数時間で882ポイントという異例の高評価を獲得しました。これほどまでに注目されているのは、単なるスペックアップを超えた「実用性の進化」があるからです。 「AIの進化が早すぎて追いつけない……」と感じている初心者エンジニアの方も多いかもしれませんが、安心してください。この記事では、Gemini 3.1 Proの何がすごいのか、そして今日からどうやって使いこなすのかを、どこよりも噛み砕いて解説します! Gemini 3.1 Proとは? Gemini 3.1 Proは、Googleが開発した「Gemini」シリーズの最新鋭モデルです。従来のGemini 3の長所を引き継ぎつつ、特に「推論(考える力)」と「文脈の理解(記憶力)」が大幅に強化されています。 エンジニアにとってのGemini 3.1 Proは、例えるなら**「プロジェクトの全コードを記憶し、複雑なバグの修正案を即座に提案してくれる、超優秀な先輩エンジニア」**のような存在です。 なぜ「Pro」なのか? Googleのモデルには「Ultra」「Pro」「Flash」などのラインナップがありますが、Proモデルは「性能」と「コスト・速度」のバランスが最も優れています。開発者がAPIを使ってアプリケーションに組み込む際、最も選ばれているのがこのProシリーズなのです。 ここがすごい!Gemini 3.1 Proの3つの進化点 従来のモデルと比べて、具体的にどこが変わったのでしょうか?注目すべき3つのポイントを挙げます。 1. 「熟考型」の推論プロセス Gemini 3.1 Proには、人間が難しい問題を解くときにじっくり考えるような「System 2 Thinking」に近い仕組みが導入されました。これにより、これまでは間違えやすかった複雑な数学の問題や、高度な論理パズル、さらには大規模なシステムのデバッグにおいて、圧倒的に正確な回答を返せるようになっています。 2. 200万トークンの超長大コンテキスト 「トークン」とは、AIが一度に扱える情報の単位です。Gemini 3.1 Proは、最大で200万トークンという驚異的な量を一度に読み込むことができます。 これは、「厚辞苑数冊分のテキスト」や「数万行のソースコード全体」を丸ごとAIに読み込ませて、その内容について質問できることを意味します。「あの関数の定義、どこにあったっけ?」と探す手間は、もう過去のものになるかもしれません。 3. ハルシネーション(もっともらしい嘘)の劇的な減少 AIが自信満々に嘘をつく現象「ハルシネーション」が、Gemini 3.1 Proでは大幅に抑えられています。特に関数呼び出し(Function Calling)の正確性が増しており、外部ツールやデータベースと連携させた際の信頼性が向上しました。 【実践】PythonでGemini 3.1 Proを動かしてみよう それでは、実際にAPIを使ってGemini 3.1 Proを操作してみましょう。初心者の方でも、以下の3ステップで簡単に始められます。 1. ライブラリの準備 ターミナルで以下のコマンドを実行し、最新のSDKをインストールします。 1 pip install -U google-generativeai

February 21, 2026 · 1 min · AI2CORE 編集部

AIエージェント開発の必須知識:RAGとVector DBの基礎

AIエージェント開発の必須知識:RAGとVector DBの基礎 はじめに 「自社の膨大なマニュアルやナレッジベースの内容を、ChatGPTのように対話形式で手軽に引き出したい」 「開発中のAIチャットボットに、社内規定や顧客との過去のやり取りを正確に回答させたい」 「でも、機密情報を含む自社データを、外部のAIサービスに学習データとして渡すのはセキュリティ的に絶対に避けたい」 AI、特に大規模言語モデル(LLM)の活用を検討する多くのエンジニアや開発担当者が、このような課題に直面しているのではないでしょうか。LLMは非常に強力ですが、その知識は特定の時点までのものであり、自社の独自データについては何も知りません。 この課題を解決するために「ファインチューニング」を検討するかもしれません。しかし、ファインチューニングには大量の教師データと高い計算コストが必要な上、情報の更新があるたびにモデルを再学習させるのは現実的ではありません。さらに、AIがもっともらしい嘘をつく「ハルシネーション」という問題も依然として残ります。 本記事では、これらの課題をエレガントに解決する技術として、今、AIエージェント開発の現場でデファクトスタンダードとなりつつある**RAG(Retrieval-Augmented Generation:検索拡張生成)**というアプローチを徹底的に解説します。 RAGは、LLMに自社データを「学習」させるのではなく、必要な情報を「検索」して外部から与えることで、LLMの能力を最大限に引き出す画期的な手法です。そして、その中核を担うのが**Vector DB(ベクトルデータベース)**です。 この記事を読み終える頃には、あなたは以下のことを理解し、自社のAIエージェント開発に活かすための一歩を踏み出せるようになっているはずです。 LLMが抱える根本的な課題(知識のカットオフ、ハルシネーション) なぜファインチューニングだけでは不十分なのか RAGがどのようにしてこれらの課題を解決するのか、その具体的な仕組み RAGの心臓部であるEmbeddingとVector DBの役割 PythonとLangChainを使ったRAGの基本的な実装方法 それでは、AIエージェント開発の新たな扉を開く、RAGとVector DBの世界へご案内します。 なぜRAGとVector DBが重要なのか? LLMの限界と従来の課題 RAGの重要性を理解するためには、まずLLMが単体で抱える限界を知る必要があります。 LLMが抱える3つの大きな壁 知識のカットオフ(Knowledge Cut-off) GPT-4のような最先端のLLMでさえ、その知識は学習データが収集された特定の日時で止まっています。例えば、GPT-4の初期モデルは2021年9月までの情報しか持っていません。そのため、それ以降の出来事や、新製品の情報、最新の社内規定について質問しても、答えることができません。ビジネスの世界では情報の鮮度が命であり、この「知識の壁」は致命的な欠点となります。 ハルシネーション(Hallucination:幻覚) LLMは、事実に基づかない情報を、あたかも真実であるかのように生成することがあります。これをハルシネーションと呼びます。特に、学習データに含まれていない専門的な内容や、社内情報のようなクローズドなドメインについて質問された場合に、この現象は顕著になります。顧客サポート用のAIが誤った製品情報を伝えたり、社内アシスタントが架空の規定を案内したりする事態は、企業の信頼を著しく損なうリスクをはらんでいます。 情報セキュリティとプライバシー 自社の機密情報や顧客の個人情報を扱う場合、それらを外部のLLM提供企業のサーバーに学習データとしてアップロードすることには、非常に大きなセキュリティリスクが伴います。一度学習データとして取り込まれてしまうと、他のユーザーへの回答に利用されてしまう可能性もゼロではなく、データのコントロールを失うことになります。 従来の解決策「ファインチューニング」とその限界 これらの課題を解決するアプローチとして、以前は「ファインチューニング」が主流でした。これは、既存の学習済みモデルに対して、自社データを含む追加の教師データセットを与えて再学習させる手法です。 ファインチューニングは、LLMに特定の文体や口調を真似させたり、特定のタスク(例えば、要約や感情分析)への性能を特化させたりするのには有効です。しかし、「知識を注入する」という目的においては、いくつかの大きな課題があります。 高いコスト: ファインチューニングには、大量の高品質な教師データ(質問と回答のペアなど)の準備と、モデルの学習を実行するための高価な計算リソース(GPU)が必要です。 知識の更新が困難: 新しい情報(例えば、週次レポートや新しいマニュアル)を追加したい場合、その都度ファインチューニングをやり直す必要があります。これは時間的にも金銭的にも非効率です。 透明性の欠如: ファインチューニングされたモデルが、なぜその回答を生成したのか、どの情報を根拠にしているのかを追跡することは非常に困難です。ハルシネーションが起きた場合の原因究明も難しくなります。 そこで登場したのが、**RAG(検索拡張生成)**です。RAGは「学習」ではなく「検索」というアプローチで、これらの問題を根本から解決します。 具体的な解決策:RAGの仕組みとVector DBの役割 RAGは、その名の通り「検索(Retrieval)」でLLMの知識を「拡張(Augmented)」し、回答を「生成(Generation)」するアーキテクチャです。LLMを「非常に優秀だが記憶喪失のコンサルタント」、Vector DBを「完璧な記憶力を持つ外部の専門図書館」に例えると分かりやすいでしょう。 コンサルタント(LLM)は、質問を受けるたびに、まず図書館(Vector DB)へ行って関連資料を調べ(検索)、その資料を読み込みながら(コンテキストとしてプロンプトに含める)、質問に対する的確な回答を生成します。 この仕組みにより、LLMは常に最新かつ正確な情報に基づいて回答できるようになり、ハルシネーションを劇的に抑制できます。 RAGの全体像と処理フロー RAGのシステムは、大きく2つのフェーズに分かれています。 データ準備フェーズ(Indexing): 事前に自社ドキュメントを検索可能な状態にして、Vector DBに保存しておくフェーズ。 実行フェーズ(Retrieval & Generation): ユーザーからの質問を受け取り、Vector DBから関連情報を検索して、LLMが回答を生成するフェーズ。 この流れを図で示すと以下のようになります。 graph TD subgraph "データ準備フェーズ(Indexing)" A[ドキュメント群<br>PDF, TXT, Markdown, etc.] --> B(Load<br>ドキュメント読み込み); B --> C(Split<br>テキストを適切なサイズに分割); C --> D(Embed<br>分割したテキストをベクトル化); D --> E[Vector DB<br>ベクトルと元のテキストを保存]; end subgraph "実行フェーズ(Retrieval & Generation)" F[ユーザーからの質問] --> G(Embed<br>質問をベクトル化); G --> H{Vector DB<br>類似ベクトル検索}; E --> H; H --> I[関連性の高い<br>テキストチャンク(コンテキスト)]; F & I --> J(Prompt<br>質問とコンテキストを結合し<br>プロンプトを作成); J --> K[LLM (e.g., GPT-4)<br>回答生成]; K --> L[ユーザーへの回答]; end それでは、このフローの各要素を詳しく見ていきましょう。 ...

February 13, 2026 · 3 min · AI2CORE 編集部