Elastic 9.4.0 より Elastic Agent Builder が GA になりました。
今回は、Elastic Agent Builder で作成した Tool や AI Agent が Local LLM 環境でも実際に動作するのか検証してみました。
検証環境
- PC : Windows 11 Pro (32 GB RAM)
- Docker Container : Rancher Desktop 1.22.3
- Elastic Stack : Elastic 9.4.2 Trial License (Docker 上で動作)
- Local LLM 実行環境 : LM Studio 0.4.16
- Local LLM : Qwen 3.5 2B (Q4_K_M)
- Context Length: 14419 / GPU Offload: 24
- テストデータ : kibana_sample_data_logs (Kibana に付属のサンプルデータ)
準備
- サンプルデータ kibana_sample_data_logs を Kibana の画面から登録しておきます。(※脚注11)
- Docker の Host マシン上で LM Studio を起動します。
- LM Studio に qwen3.5-2b をダウンロードし、ロードします。
- LM Studio の Developer Mode で Server を 11434 ポートで開始します。
- Context Length : 15000 程度
- GPU Offload : 24
Tool, AI Agent, Connector の作成
今回は、 「kibana_sample_data_logs のログ数を送信先ごとに集計し、上位10件を取得する」 ための Tool, AI Agent を作成していきます。
また、AI Agent と LLM の中継を行う Connector も作成します。
AI Agent のシーケンス図(概略) ※あくまで一例です。

Tool の作成
AI Agent → Tool の順にトップダウンで作成することも可能ですが、 今回は Tool → AI Agent の順にボトムアップで作成していきます。
Kibana にログイン後、Home / Elasticsearch / Agents メニューをクリックします。

Tools メニューをクリックし、さらに、Manage all tools をクリックします。
※注 [Add tool] ではありません。

Tools library 画面が表示されるので、[+ New tool] をクリックします。

Tool の新規登録画面が表示されます。

下記のように入力していきます。
- Type : ES|QL
- ES|QL Query : 下記のクエリーを入力 (ログを送信先ごとに集計し、上位n件を返すクエリー)
FROM kibana_sample_data_logs
| WHERE @timestamp > ?start_datetime AND @timestamp < NOW()
| STATS count = COUNT(*) BY geo.dest
| SORT count DESC
| KEEP geo.dest, count
| LIMIT ?limit- ES|QL Parameters (1)
- Name : start_datetime
- Description : 調査の起点となる日時
- Type : date
- Optional : true
- Default value : 05/01/2026
- ES|QL Parameters (2)
- Name : limit
- Description : 上位何件のログを取得したいか?
- Type : integer
- Optional : true
- Default value : 10
- Tool ID : tool_get_kibana_sample_data_logs_count_by_geo_dest
- Description : 下記を入力
kibana_sample_data_logs について、指定された開始日時 (start_datetime) 以降の送信先 (geo.dest) ごとのログ数を調べる。
ログ数の多い順に上位 limit 件のログ数を返す。入力し終えたら、[Save & test] を押して、Tool の保存と ES|QL のテストを行います。
AI Agent の作成
Tool を作成し終えたら、次は Tool を呼び出す AI Agent を作成します。
デフォルトで表示されている AI Agent 名の右にある、下向きのアイコンをクリックします。
[Manage agents] をクリックします。

AI Agent の一覧が表示されます。画面右上の [+ New agent] をクリックします。

AI Agent の新規登録画面が表示されます。

下記のように入力していきます。
- Agent ID : get_kibana_sample_data_logs_count_by_geo_dest
- Custom Instructions : 下記を入力
あなたは kibana_sample_data_logs についての分析を行うエージェントです。
# 指示1
与えられた質問から、調査対象の開始日時、および取得したい件数を抽出しなさい。
その開始日時を start_datetime 、取得したい件数を limit として記憶しなさい。
# 指示2
次のツールを使って、送信先ごとのログ数を取得しなさい。
その際、指示1 で抽出した開始日時を start_datetime 、取得したい件数を limit parameter として渡しなさい。
- tool : tool_get_kibana_sample_data_logs_count_by_geo_dest- Display name : Get kibana_sample_data_logs count by geo.dest
- Display description : 下記を入力する。
kibana_sample_data_logs について
指定された開始日時 (start_datetime) 以降のログ数を送信先 (geo.dest) ごとに集計する。
ログ数の多い順に limit 件の送信先を返却する。(Custom Instructions が LLM に対する指示となります。)
入力し終えたら、先ほど作成した Tool : tool_get_kibana_sample_data_logs_count_by_geo_dest を参照するよう設定します。
画面上部の Tools タブをクリックします。

- デフォルトで設定されている Tool を全てオフにします。
- 次に、先ほど作成した Tool : tool_get_kibana_sample_data_logs_count_by_geo_dest にチェックを入れます。
- 画面右上の [Save] をクリックします。
Connector の作成
AI Agent を作成したので、AI Agent と LLM を中継する Connector を作成します。
Stack Management / Alerts and Insights / Connectors をクリックします。

Connector の一覧画面が表示されます。右上の [(+) Create connector] をクリックします。

接続タイプの選択画面が表示されます。
今回は、OpenAI 互換の LM Studio 経由で接続するので、OpenAI を選択します。

OpenAI (互換の)Connector の登録画面が表示されます。

今回は、Docker の Host である host.docker.internal の 11434 ポートが接続先となるので 次のように入力していきます。
- Connector name : local_qwen_3_5_2b
- Select an OpenAI provider : OpenAI
- URL : http://host.docker.internal:11434/v1/chat/completions
- Default model : qwen3.5-2b
- API key : LM Studio で設定した API Key
- LM Studio で API Key を省略した場合は、dummy など適当に入力する。
- Add HTTP header
- Key : content-type
- Value : application/json
入力し終えたら Test で接続できることを確認する。
Feature Settings
先ほど作成した Connector : local_qwen_3_5_2b を利用できるよう、Feature Settings で設定します。
Stack Management / Model Management / Feature Settings をクリックします。

Feature Settings 画面が表示されます。
Agent Builder の Assigned models の (+) Add a model をクリックして、先ほど作成した local_qwen_3_5_2b を選択します。

AI Agent の実行
準備ができたので AI Agent を実行してみます。
Home / Elasticsearch / Agents から get_kibana_sample_data_logs_count_by_geo_dest を選択します。
Connector に local_qwen_3_5_2b が選択されていることを確認します。
local_qwen_3_5_2b 以外が選択されている場合は、そのコネクター名をクリックして、local_qwen_3_5_2b に変更します。

それでは、チャット欄に質問を入力してみます。
2026-06-01T00:00:00Z 以降のログ数を送信先ごとに表示してください。ただし、ログ数が多い順に上位5件のみ表示してください。私の環境では、回答を得られるまでに2分40秒ほどかかりました。
回答に至るまでの Reasoning も表示されます。
Reasoning
Calling tool tool_get_kibana_sample_data_logs_count_by_geo_dest
Parameters
{ "start_datetime": "2026-06-01T00:00:00.000Z", "limit": 5}ESQL
FROM kibana_sample_data_logs
| WHERE @timestamp > "2026-06-01T00:00:00.000Z" AND @timestamp < NOW()
| STATS count = COUNT(*) BY geo.dest
| SORT count DESC
| KEEP geo.dest, count
| LIMIT 5Found 5 results
167 seconds ↑ 8,878 tokens ↓ 197 tokens
Answer
2026-06-01T00:00:00Z以降のログ数(上位5件)
送信先ごとのログ数は以下の通りです:
| 送信先 | ログ数 |
|---|---|
| CN | 723 |
| IN | 625 |
| US | 311 |
| ID | 125 |
| BR | 106 |
このデータは、tool_get_kibana_sample_data_logs_count_by_geo_dest ツールの結果に基づいています。
実行結果の考察
正しい結果が返ってきました。
(上記の結果は、実行するタイミングによって参照するデータの範囲が変わるため、違うタイミングでは異なる結果となります。)
このように Tool, AI Agent, Connector を作成することで Local LLM でも AI Agent を動かすことができました。
正しい結果を返すためには、適切な Tool の作成、適切な AI Agent の Instruction の設定、適切な LLM の選択が必要となります。
(なお、Tool から MCP Server へ接続することも可能です。また、AI Agent の実行には Tool だけでなく、Skill や Workflow も利用することが可能です。)
LLMの改善
今回のローカル環境 (Qwen 3.5 2B) では、回答を得られるまでに約2分40秒の時間がかかりました。
また、非常に軽量のモデルを利用しているため、より複雑なビジネスの質問には対応しきれない可能性が高いです。(※脚注22)
もし実運用を見据えてパフォーマンスを改善する場合、以下の2つのアプローチが考えられます。
- a. ローカル環境のマシンリソースを増強し、より強力な大型モデルを動かす
- b. クラウド上の強力な LLM 外部 API を呼び出す
ローカル環境の増強はコストや手間の面でハードルが高いため、手軽に強力な LLM を試す方法としては EIS(Elastic Integration Server) を使ったクラウド LLM の呼び出しがおすすめです。
EIS を経由すれば、Anthropic Claude Sonnet 4.6 などを簡単に呼び出すことができます。 興味のある方は、ぜひ以下の参考記事もあわせてご覧ください。試しに Anthropic Claude Sonnet 4.6 で同じ質問を入力したところ10秒ほどで結果が返却され、しかも指示していないにもかかわらず、グラフまで表示されました。
(※EISを利用するには、有償の Elastic Cloud 環境が必要です。Anthropic Claude Sonnet 4.6 などの利用料金は別料金となります。)


