Elastic AI Agent を Local LLM で動かしてみた。

Tech blog hero image: city skyline at night with futuristic circuit graphics and the Japanese title Elastic AI Agentを Local LLM で動かしてみた. BLOG

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 5

Found 5 results

167 seconds ↑ 8,878 tokens ↓ 197 tokens

Answer

2026-06-01T00:00:00Z以降のログ数(上位5件)

送信先ごとのログ数は以下の通りです:

送信先ログ数
CN723
IN625
US311
ID125
BR106

このデータは、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 などの利用料金は別料金となります。)


  1. kibana_sample_data_logs の登録方法
    ↩︎
  2. Observability 用の推奨モデル

    Security 用の推奨モデル
    ↩︎