著者:村田 知弥、株式会社日立製作所
はじめに
この記事では、Elastic Agent Builderの概要とアーキテクチャーを紹介し、簡単なエージェントを作成する手順を解説します。
Elasticsearchを利用している方や、AIエージェントの構築に興味がある方に向けた内容です。
なお、この記事に掲載している画面例および操作デモでは、テスト・デモ用途向けに生成された合成金融データ(Synthetic Financial Data)を使用しています。実在する企業名や銘柄コードが含まれる場合がありますが、掲載されている情報はデモ用途向けに生成されたものです。
AI活用の進化:回答から業務実行へ
RAGによるLLM活用と限界
RAG (Retrieval-Augmented Generation) は、質問に対して関連情報を検索し、その内容をLLM (Large Language Model) への入力に加えることで、回答の品質を高める手法です。LLM単体では学習していない最新情報や社内データを活用できるため、企業で生成AIを活用するための仕組みとして広く利用されてきました。
この図では、ユーザーの質問をチャットUIが受け取り、RAGが知識DBから関連情報を検索し、その情報をもとにLLMが回答を生成しています。ただしこの構成では「質問ごとに検索して回答する」という決まった流れで動くため、業務を自律的に実行することはできません。
AIエージェントによる業務実行
生成AIの活用は、「質問への回答」から「業務の実行」へと進化しています。AIエージェントは、ユーザーの目的に応じて計画を立て、情報検索やツール実行を繰り返しながらタスクを遂行します。
この図では、AIエージェントが計画・ツール選択・検索・実行を自律的に繰り返しながら回答を洗練しています。ここではRAGは、エージェントが必要なときに呼び出す外部資料を参照する手段の1つとして使われます。外部ツールの実行には、MCP (Model Context Protocol) が含まれます。
AIエージェントはRAGを置き換えるものではありません。 RAGを手段として活用しながら、必要に応じてツールを実行し、業務の実行までを担います。
支えるプロトコル:A2AとMCP
エージェントが外部ツールや他のエージェントと柔軟に連携するために、A2AとMCPという2つの標準プロトコルが利用されます。
| 用語 | 説明 |
|---|---|
| A2A (Agent2Agent) | AIエージェント間で通信・連携するためのプロトコル |
| MCP (Model Context Protocol) | 外部ツールやデータと連携するためのプロトコル |
図では、AIエージェントがA2Aを通じて他のエージェントと連携し、MCPを通じて外部ツールやサービスを利用しています。
Elastic Agent Builderの概要
Elasticsearchとは
Elasticsearchは、大量データから必要な情報を高速に検索できる検索エンジンです。キーワード検索だけでなく、ベクトル検索やハイブリッド検索にも対応しており、RAGやAIアプリケーションの検索基盤として広く利用されています。
Elasticsearchの主な強みは以下の点です。
- 高速かつスケーラブルな検索・分析基盤
- 構造化データと非構造化データの両方を扱える柔軟性
- キーワード検索とベクトル検索を組み合わせたハイブリッド検索
Elastic Agent Builderとは
Elastic Agent Builderは、Elasticsearch上のデータを活用してAIエージェントを構築・実行するための機能です。RAGによる情報検索に加え、MCPやA2Aを活用した外部連携にも対応しています。
- AIエージェントの開発
- Kibana上のGUIからAIエージェントを構築
- Elasticsearch上のデータを活用するエージェントやツールを作成
- スキル、ツール、MCP、A2Aを組み合わせた業務特化型エージェントを開発
- AIエージェントの利用
- チャット画面から自然言語でエージェントに指示
- RAGによる情報検索や回答生成を実行
- MCPやA2Aを利用して、外部ツールや他のエージェントと連携
ユースケース例
RAG中心の運用が、Agent Builderによってどのように変わるかの例です。ただし、Agent Builderと外部ツールを組み合わせた想定ユースケースであり、Agent Builder単体の機能を示すものではありません。
| 領域 | 従来(RAGメイン) | Agent Builder |
|---|---|---|
| Observability | アラート後のログ目視分析 | 原因特定から再起動、チケット起票まで自動化 |
| Security | 手動でのIP検索・分析 | 脅威検知と同時にFW遮断などの対処を自動実行 |
| Enterprise Search | 社内規定のハイブリッド検索と要約 | 申請・手続きまで実行 |
| 業務自動化 | 別途ワークフロー開発が必要 | MCP/A2A連携によるE2Eの業務自動化 |
| ヘルプデスク | 手動で過去ログ検索・要約 | 自律調査と回答案作成を自動化 |
Elastic Agent Builderのアーキテクチャー
全体像
Elastic Agent Builderの構成図を以下に示します。
Elastic Agent Builderは、Elasticsearch上のデータを理解・検索・操作できるAIエージェントを、GUI中心で構築・実行するための基盤です。図は大きく「作成」と「実行」の2つのフェーズで捉えられます。
- AIエージェントの作成(開発者): Kibanaのエージェント開発画面から、エージェントへの指示や利用可能なツールを追加し、ユースケースに合わせたエージェントを作成する
- AIエージェントの実行(利用者): 推論と検索(RAG)を繰り返しながら回答を洗練させる。推論にはLLMサービスを利用し、検索対象はElasticsearchに蓄積されたテキスト/ベクトルデータである
利用者からのアクセス経路は複数あり、Kibanaのエージェントチャット画面から対話するほか、各種API経由でAIアプリや他のAIエージェントから接続できます。Elastic Agent BuilderはMCP ServerおよびA2A Serverとして動作し、外部のMCP ClientやA2A Clientから利用できます。
構成要素としては、Kibana側にエージェントの開発画面、チャット画面、およびエージェント実行基盤が配置されます。 Elasticsearch側には、社内情報や機密情報などの独自データを収集・ベクトル化して蓄積し、ハイブリッド検索によるRAGに活用します。 外部サービスとしては、LLMサービス(OpenAI、Anthropic、Amazon Bedrock、Azure OpenAI、Google Vertex AI、ローカルLLMなど)と、外部ツールとしてのMCPサーバーが連携先になります。
主要機能
開発時に使う構成要素と、利用時の機能は次の通りです。
| 開発時 | 内容 |
|---|---|
| Agents | 独自の指示やツールを持つエージェントを作成・設定 |
| Skills | エージェントに専門知識を与える再利用可能な指示セット |
| Tools | データ検索や処理を実行するための機能 |
| MCP Server | 外部MCPホストへAgent Builderのツールを公開 |
| A2A Server | 外部A2Aクライアントとエージェントを接続 |
利用時は、自然言語で対話するAgent Chatと、用途に応じたエージェントを選択するAgentsが提供されます。
エージェントの構造:Overview、Skills、Tools
エージェントは3つの層で構成されます。
- Overview:Agentの定義。役割・人格・判断軸・前提・制約などを指示として記述する
- Skills(任意・複数設定可能):特定タスク向けの指示やToolsなどを束ねたもの。必要に応じて自動的に呼び出される
- Tools(複数設定可能):実際に実行できる手段。クエリ、Workflow、MCPなどで定義され、処理を実行する
リレーションとしては、AgentにOverviewと任意の数のSkillsが紐づき、SkillsにはToolsを割り当てられます。 実行時は、LLMが利用可能なToolsの中から必要なものをその都度選択します。 Skillsを持たないAgentや、Toolsを割り当てないSkillも作成できます。 LLMとAgentは、利用時に1つずつ選択します。
推論ループの流れ
LLMに渡されるのは次の3ブロックです。
- [ Instructions / System ]:Overview(役割・制約)と Skills(思考パターン・判断基準)
- [ Messages ]:User message(ユーザー入力)と Assistant message(過去履歴)
- [ Tools / Functions ]:Tools(実行可能な手段の一覧)
LLMは内部出力(function call)で呼び出すToolを指定し、その実行結果が文脈に追加されて次の推論に渡ります。このループを繰り返しながら、LLMはInstructionsとそれまでのTool結果をもとに、Tool実行を続けるか終了して最終出力するかを自律的に判断します。
つまり、LLMが推論し、Toolを実行し、その結果を受けてまたループすることで回答を洗練していきます。これが従来のRAGとは異なる、AIエージェントならではの特徴です。
開発時の設定
Kibana UI内のAgent Builderで、Overview、Skills、Toolsを設定します。
Toolのタイプは以下から選択します。ToolのDescriptionは生成AIがツールの用途を認識する情報になるため、記述が重要です。
| タイプ | 説明 |
|---|---|
| Built-in | Elasticsearch標準機能 |
| ES|QL | クエリと入力パラメータを厳密に指定する |
| Index search | Indexのみ指定してクエリは生成AIに生成させる |
| MCP | 外部MCPサーバーを利用する |
| Workflow | Elasticワークフローを利用する |
なお、ES|QLはElasticsearch Query Languageであり、データのフィルタリング、変換、分析を行うためのパイプ構文を使用したクエリ言語です。
Elastic Agent Builder操作デモ
本章ではElastic Agent Builderを利用して、Elasticsearch上の財務データを分析するAIエージェントを作成します。
前提環境
本デモでは、以下の環境を利用しています。
- デプロイ形態:Self-Managed
- バージョン:Elastic Stack v9.3.2
- LLMプロバイダー:Anthropic
- 利用モデル:Claude 3 Haiku
Elastic Agent BuilderはElastic Stack v9.3以降で利用できます。 また、Elastic Agent BuilderはLLMを内蔵していないため、事前に利用するLLMの推論エンドポイント設定が必要です。利用にはSelf-Managed SubscriptionのEnterpriseライセンスが必要ですが、30日間の無料トライアルでも評価利用が可能です。
なお、本デモで利用したClaude 3 Haikuは、2026年4月にClaude APIでの提供が終了しており、現在は利用できません。同じ構成を試す場合は、Claude Haiku 4.5など提供中のモデルに置き換えてください。
本記事ではElasticsearch、KibanaおよびLLMの推論エンドポイントの構築、設定手順は割愛します。環境構築についてはElastic公式ドキュメントを参照してください。
デモの概要
このデモでは、Elasticsearch上の財務データを分析するAIエージェントを作成し、自然言語で財務分析を行う手順を確認します。
- データ:Synthetic Financial Data (GitHubから取得)
- エージェント:Synthetic Financial Data Analyst
- Skillsは利用せず、Toolsのみを割り当てたシンプルなエージェント
- ベクトル検索は利用せず、ES|QLベースで分析
流れは以下の通りです。
- 財務データを投入
- インデックス作成
- ツール作成
- エージェント作成
- 質問を試行
デモ全体の流れを以下の図に示します。
画面の開き方
ここからは実際の画面操作です。Elastic Agent Builderの表示方法は2通りあります。Kibanaで以下いずれかの操作を行ってください。
- メニューから「Elasticsearch→Agents」をクリック
- 画面右上の「AI Agent」をクリック
Kibana UIはElastic Stackのバージョンにより異なります。また、表示言語が日本語か英語かで表記が異なります。ご注意ください。
サンプルデータの投入
GitHub上で公開されているデモ用データを利用してElasticsearchへ投入します。作成されるインデックスは次の5つです。
| インデックス | 内容 | キー |
|---|---|---|
financial_accounts |
口座情報 | account_id |
financial_holdings |
ポートフォリオ保有資産 |
holding_id, account_id, symbol
|
financial_asset_details |
資産メタデータ | symbol |
financial_news |
市場ニュース記事 |
article_id, primary_symbol
|
financial_reports |
財務報告書 |
report_id, primary_symbol
|
Toolの作成
上記インデックスに対して、5つのToolを作成します。
| Tool | 内容 | 主なクエリ |
|---|---|---|
sfd.get_portfolio_holders_by_symbol |
指定した銘柄を保有している口座一覧を取得 | WHERE symbol → LOOKUP JOIN accounts → SORT quantity |
sfd.get_sector_exposure_summary |
指定セクターに対する投資状況を集計 | LOOKUP JOIN asset_details → WHERE sector → STATS → SORT total_market_value |
sfd.get_recent_news_for_symbol |
指定銘柄に関する最近のニュースを取得 | WHERE primary_symbol, company_symbol, published_date → SORT published_date |
sfd.get_negative_news_exposure_summary |
ネガティブニュースの高額保有口座への影響を集計 | WHERE sentiment, published_date → STATS → LOOKUP JOIN holdings → WHERE is_high_value → LOOKUP JOIN accounts → STATS → SORT affected_accounts |
sfd.get_recent_reports_for_symbol |
指定銘柄に関する最近のレポートを取得 | WHERE primary_symbol, company_symbol, report_date → SORT report_date |
主な処理のみを記載しています(KEEP、EVAL、RENAME、LIMITなどは省略)。
作成手順は次の通りです。
-
Elastic Agent Builder画面を開き、右上の「More」→「View all tools」をクリック
-
新規作成は右上の「New tool」、既存の確認/編集は一覧からtoolを選択
-
ToolのTypeを選択し、必要なパラメータを入力する
-
ToolのIDとDescriptionを記入する
-
Save
Descriptionの情報を元に生成AIがツールの用途を認識するため、ここの記述品質が精度に直結します。各TypeのベストプラクティスやES|QLの構文は、Elastic Docsの以下が参考になります。
Agentの作成
-
右上の「More」→「View all agents」をクリック
-
新規作成は「New agent」、既存の確認・編集は一覧から選択
-
AgentのIDとCustom Instructionsを記入
-
Labels/Display name/Display descriptionを記入
-
Toolsタブで、Agentに割り当てるToolのチェックボックスにチェックを入れる
-
Save
Custom Instructionsは生成AIのプロンプトに相当する設定です。
記載内容はElastic Docsの以下を参考に作成します。
- Create and manage custom agents in Elastic Agent Builder
- Best practices for prompt engineering in Elastic Agent Builder
デモではsynthetic-financial-data-agentを作成し、5つのToolを割り当てたうえで、概ね以下のような指示を設定しています。
# 目標
あなたは、Elasticsearch内の合成金融デモ環境を担当する専任アナリストです。
割り当てられたカスタムツールのみを使用して、口座、保有銘柄、
セクター別エクスポージャー、ニュース、レポート、
およびネガティブニュースへのエクスポージャーに関する質問へ回答してください。
# 手順
1. 質問に銘柄コード、セクター、センチメント、または日付範囲が必要かどうかを特定する。
2. 必要な入力が不足している場合は、値を推測せず簡潔な確認質問を行う。
3. 要求に対して利用可能な最も具体的なツールを使用する。
4. 質問が複数のトピックにまたがる場合は、複数のツール結果を統合して回答する。
5. ツール出力の日付、件数、財務数値は要約前に必ず確認する。
# ガイドライン
- ツール結果に存在しない事実を作成しない。
- データセットがリアルタイムである、または外部検証済みであると主張しない。
- 明示的に指定されていない限り、デフォルトの日付範囲を仮定しない。
- ツールが結果を返さない場合は、一致するレコードが見つからなかったことを明記する。
- エージェントは割り当てられた金融デモのユースケースに集中する。
# 出力
- ユーザーから明示的に他言語が指定されない限り、日本語で回答する。
- 簡潔かつ明確に表現する。
- 利用可能な場合は、関連する日付、銘柄、件数、数値を含める。
チャットで質問してみる
利用するモデルとしてClaude 3 Haikuを、Agentに「Synthetic Financial Data Analyst」を選択し、チャット入力エリアから質問します。
質問例は次の通りです。空欄には銘柄コードを入れてください。
2025-07-01以降の〇〇関連ニュースを教えてください。
〇〇を保有している口座を3件だけ教えてください。
〇〇を高額保有している口座はありますか。
AIエージェントが利用可能なツールから適切なものを選択して検索を実行し、結果を解釈して回答します。試すときは以下の点に注意してください。
- Claude 3 Haikuは高速・低コストなモデルであるため、デモではより高性能なモデルを使ったほうが良い回答が得られる可能性があります
- 同じチャットで続けて質問すると、使用モデルによっては回答精度が下がることがあります。質問のたびに新しいチャットを作成するのが安全です
- 回答は質問のたびに異なります
うまく回答できない場合は、回答の「Completed reasoning」を開くと、回答を生成するまでのプロセス(どのツールをどのように呼び出したか)を確認できます。切り分けや、意図したツールが利用されているかの確認に有用です。
以下のように回答とその理由が表示されれば成功です。
おわりに
この記事では、Elastic Agent Builderの概要、アーキテクチャーを紹介し、エージェントを作成する操作手順を解説しました。
Elastic Agent Builderは、Elasticsearchという検索基盤の強みをそのまま活かしつつ、エージェント、スキル、ツールとMCP、A2A連携によってエージェント型RAGをGUI中心で構築できる点が魅力です。
操作デモで見た通り、Skillsを使わなくても、ES|QLのToolsを数本作ってAgentに割り当てるだけで、自然言語での分析は動き始めます。回答精度は、ToolsのDescriptionとAgentのCustom Instructionsの書き方に左右されます。まずは小さなインデックス1つ、Tool1つから試し、挙動を見ながら育てていくのがおすすめです。
Elastic Agent Builderに興味がある方の参考になれば幸いです。
以上













