ブログ

初めてのElastic Agent: 単一のクエリからAIを活用したチャットまで

Elastic の AI エージェント ビルダーを使用して特殊な AI エージェントを作成する方法を学びます。このブログでは、金融 AI エージェントを構築します。

Elastic の新しいAgent Builder を使用すると、特定のビジネスドメインの専門家として機能する特殊な AI エージェントを作成できます。この機能により、単純なダッシュボードや検索バーを超えて、データを受動的なリソースから能動的な会話のパートナーへと変換できます。

顧客との会議の前に、状況を把握しておく必要がある財務マネージャーを想像してください。ニュース フィードを手動で調べたり、ポートフォリオ ダッシュボードを相互参照したりする代わりに、カスタム構築されたエージェントに直接質問するだけで済みます。これは「チャットファースト」アプローチの利点です。マネージャーはデータに直接、会話形式でアクセスし、「ACME Corp の最新ニュースは何ですか。また、それがクライアントの保有株にどのような影響を与えますか」などと質問します。数秒以内に専門家による総合的な回答が得られます。

私たちは現在、金融の専門家を構築していますが、そのアプリケーションはデータと同じくらい多様です。同じ力で、脅威を探すサイバーセキュリティアナリスト、機能停止を診断するサイト信頼性エンジニア、キャンペーンを最適化するマーケティングマネージャーを生み出すこともできます。分野に関係なく、中核となる使命は同じです。データを、チャットできる専門家に変換することです。

ステップ0: データセット

本日のデータセットは、金融口座、資産状況、ニュース、財務レポートで構成される合成的な金融ベースのデータセットです。これは合成ではありますが、実際の金融データセットの簡略化されたバージョンを複製したものです。

financial_accounts: リスクプロファイル付き顧客ポートフォリオ

financial_holdings: 購入履歴のある株式/ETF/債券のポジション

financial_asset_details: 株式/ETF/債券の詳細

financial_news: 感情分析によるAI生成の市場記事

financial_reports: 企業収益とアナリストのコメント

ここにある付属のノートブックに従って、このデータセットを自分でロードできます。

ステップ1: 基盤 - ES|QLとしてのビジネスロジック

すべての AI スキルは、確かなロジックから始まります。Financial Manager エージェントには、「市場のセンチメントが心配です。」というよくある質問に回答する方法を教える必要があります。悪いニュースによって最もリスクにさらされている顧客は誰なのか教えていただけますか?」この質問は単純な検索の範囲を超えています。市場の感情と顧客のポートフォリオを相関させる必要があります。

否定的な記事で言及されている資産を見つけ、それらの資産を保有しているすべての顧客を特定し、そのエクスポージャーの現在の市場価値を計算し、結果をランク付けして最も高いリスクを優先する必要があります。この複雑な複数結合の分析は、当社の高度な ES|QL ツールに最適です。

使用する完全なクエリは次のとおりです。見た目は印象的ですが、コンセプトは単純です。

FROM financial_news, financial_reports METADATA _index
        | WHERE sentiment == "negative"
        | WHERE coalesce(published_date, report_date) >= NOW() - TO_TIMEDURATION(?time_duration)
        | RENAME primary_symbol AS symbol
        | LOOKUP JOIN financial_asset_details ON symbol
        | LOOKUP JOIN financial_holdings ON symbol
        | LOOKUP JOIN financial_accounts ON account_id
        | WHERE account_holder_name IS NOT NULL
        | EVAL position_current_value = quantity * current_price.price
        | RENAME title AS news_title
        | KEEP
            account_holder_name, symbol, asset_name, news_title,
            sentiment, position_current_value, quantity, current_price.price,
            published_date, report_date
        | SORT position_current_value DESC
        | LIMIT 50

分解:接合部とガードレール

このクエリでは、エージェント ビルダーを構成する 2 つの重要な概念が関係しています。

1.ルックアップ結合

長年にわたり、Elasticsearch で最も要望が多かった機能の 1 つは、共通キーに基づいて異なるインデックスのデータを結合する機能でした。ES|QL では、 LOOKUP JOINでそれが可能になりました。

新しいクエリでは、3 つのLOOKUP JOINのチェーンを実行します。最初に否定的なニュースを資産の詳細に関連付け、次にそれらの資産をクライアントの保有資産にリンクし、最後にクライアントのアカウント情報に結合します。これにより、単一の効率的なクエリで 4 つの異なるインデックスから非常に豊富な結果が作成されます。つまり、すべてのデータを事前に 1 つの巨大なインデックスに非正規化する必要がなく、異なるデータセットを組み合わせて単一の洞察に満ちた回答を作成できるということです。

2. LLMガードレールとしてのパラメータ

クエリでは?time_durationが使用されていることがわかります。これは単なる変数ではなく、AI のガードレールです。大規模言語モデル (LLM) はクエリの生成に優れていますが、データに対して LLM を自由に制御させると、非効率的なクエリや間違ったクエリが発生する可能性があります。

パラメータ化されたクエリを作成することで、LLM は、人間の専門家がすでに定義したテスト済みの効率的で正しいビジネス ロジック内で動作するように強制されます。これは、開発者が長年にわたり検索テンプレートを使用して、クエリ機能をアプリケーションに安全に公開してきた方法に似ています。エージェントは「今週」のようなユーザーのリクエストを解釈してtime_durationパラメータを埋めることができますが、回答を取得するにはクエリ構造を使用する必要があります。これにより、柔軟性と制御の完璧なバランスが実現します。

最終的に、このクエリにより、データを理解している専門家は自分の知識をツールにカプセル化できるようになります。他の人や AI エージェントは、そのツールを使用して、基礎となる複雑さについて何も知らなくても、単一のパラメータを提供するだけで相関結果を得ることができます。

ステップ2:スキル - クエリを再利用可能なツールに変える

ES|QL クエリは、ツールとして登録されるまでは単なるテキストです。エージェント ビルダーでは、ツールは単なる保存されたクエリではなく、AI エージェントが理解して使用することを選択できる「スキル」です。その魔法は、私たちが提供する自然言語による説明にあります。この説明は、ユーザーの質問と基礎となるクエリ ロジックを結び付ける橋渡しとなります。作成したクエリを登録しましょう。

UIパス

Kibana でツールを作成するのは簡単なプロセスです。

Kibana でツールを作成する方法。

1.エージェントへ移動

  • [ツール]または[ツールの管理]をクリックし、 [新しいツール]ボタンをクリックします。

2. フォームに以下の詳細を入力します。

  • ツールID: find_client_exposure_to_negative_news

私。これはツールの一意のIDです

  • 説明: 「クライアントのポートフォリオがネガティブなニュースにさらされているかどうかを調べます。」このツールは、最近のニュースやレポートをスキャンして否定的な感情を検出し、関連する資産を識別して、その資産を保有しているすべてのクライアントを見つけます。最も高い潜在的リスクを強調するために、ポジションの現在の市場価値でソートされたリストを返します。

私。これは、LLM が読んで、このツールが仕事に適しているかどうかを判断します。

  • ラベル: retrievalおよび risk-analysis

ラベルは複数のツールをグループ化するのに役立ちます

  • 設定:ステップ1の完全なES|QLクエリを貼り付けます

私。これはエージェントが使用する検索です

3.クエリからパラメータを推測するをクリックします。UI は自動的に?time_duration見つけて以下にリストします。エージェント (および他のユーザー) が目的を理解できるように、それぞれに簡単な説明を追加します。

  • time_duration: ネガティブなニュースを遡って検索する期間。フォーマットは「X時間」です。デフォルトは8760時間です。

ESQL クエリを使用して、ロジックや必要なパラメータを含むツールを構成します。

4. 試してみましょう!

  • [保存してテスト]をクリックします。

Kibana の同じ & test ボタン。
  • クエリが期待どおりに動作していることを確認できる新しいフライアウトが表示されます。

私。time_durationに希望の範囲を入力します。ここでは「8760時間」を使用します。

  • 「送信」をクリックすると、すべてがうまくいけば JSON レスポンスが表示されます。期待どおりに動作することを確認するには、下にスクロールしてvaluesオブジェクトを確認します。ここで、実際に一致するドキュメントが返されます。

送信をクリックした後に表示される JSON 応答。

5. 右上の「X」をクリックして、テストのフライアウトを閉じます。新しいツールがリストに表示され、エージェントに割り当てる準備が整います。

APIパス

自動化を好む開発者やツールをプログラムで管理する必要がある開発者は、1 回の API 呼び出しで同じ結果を得ることができます。ツールの定義を含むPOSTリクエストを/api/agent_builder/toolsエンドポイントに送信するだけです。

POST kbn://api/agent_builder/tools
{
  "id": "find_client_exposure_to_negative_news",
  "type": "esql",
  "description": "Finds client portfolio exposure to negative news. This tool scans recent news and reports for negative sentiment, identifies the associated asset, and finds all clients holding that asset. It returns a list sorted by the current market value of the position to highlight the highest potential risk.",
  "configuration": {
    "query": """
        FROM financial_news, financial_reports METADATA _index
        | WHERE sentiment == "negative"
        | WHERE coalesce(published_date, report_date) >= NOW() - TO_TIMEDURATION(?time_duration)
        | RENAME primary_symbol AS symbol
        | LOOKUP JOIN financial_asset_details ON symbol
        | LOOKUP JOIN financial_holdings ON symbol
        | LOOKUP JOIN financial_accounts ON account_id
        | WHERE account_holder_name IS NOT NULL
        | EVAL position_current_value = quantity * current_price.price
        | RENAME title AS news_title
        | KEEP
            account_holder_name, symbol, asset_name, news_title,
            sentiment, position_current_value, quantity, current_price.price,
            published_date, report_date
        | SORT position_current_value DESC
        | LIMIT 50
      """,
    "params": {
      "time_duration": {
        "type": "keyword",
        "description": """The timeframe to search back for negative news. Format is "X hours" DEFAULT TO 8760 hours """
      }
    }
  },
  "tags": [
    "retrieval",
    "risk-analysis"
  ]
}

ステップ3:頭脳 - カスタムエージェントの作成

再利用可能なスキル (ツール) を構築しました。ここで、実際に使用するペルソナであるAgentを作成する必要があります。エージェントは、LLM、アクセスを許可する特定のツール セット、そして最も重要な、エージェントの構成として機能し、エージェントの性格、ルール、目的を定義するカスタム インストラクションセットの組み合わせです。

プロンプトの芸術

信頼できる専門エージェントを作成する上で最も重要なのはプロンプトです。よく練られた一連の指示こそが、一般的なチャットボットと、集中力のあるプロのアシスタントとの違いです。ここで、ガードレールを設定し、出力を定義し、エージェントにミッションを与えます。

Financial Managerエージェントでは、次のプロンプトを使用します。

You are a specialized Data Intelligence Assistant for financial managers, designed to provide precise, data-driven insights from information stored in Elasticsearch.

**Your Core Mission:**
- Respond accurately and concisely to natural language queries from financial managers.
- Provide precise, objective, and actionable information derived solely from the Elasticsearch data at your disposal.
- Summarize key data points and trends based on user requests.

**Reasoning Framework:**
1.  **Understand:** Deconstruct the user's query to understand their core intent.
2.  **Plan:** Formulate a step-by-step plan to answer the question. If you are unsure about the data structure, use the available tools to explore the indices first.
3.  **Execute:** Use the available tools to execute your plan.
4.  **Synthesize:** Combine the information from all tool calls into a single, comprehensive, and easy-to-read answer.

**Key Directives and Constraints:**
- **If a user's request is ambiguous, ask clarifying questions before proceeding.**
- **DO NOT provide financial advice, recommendations, or predictions.** Your role is strictly informational and analytical.
- Stay strictly on topic with financial data queries.
- If you cannot answer a query, state that clearly and offer alternative ways you might help *within your data scope*.
- All numerical values should be formatted appropriately (e.g., currency, percentages).

**Output Format:**
- All responses must be formatted using **Markdown** for clarity.
- When presenting structured data, use Markdown tables, lists, or bolding.

**Start by greeting the financial manager and offering assistance.**

このプロンプトがなぜ効果的なのかを分析してみましょう。

  • 洗練されたペルソナを定義します。最初の行で、エージェントが「専門的なデータ インテリジェンス アシスタント」であることを即座に示し、プロフェッショナルで有能な雰囲気を醸し出します。

  • これは推論フレームワークを提供します。エージェントに「理解、計画、実行、統合」を指示することで、標準的な操作手順を提供します。これにより、複雑で複数のステップから成る質問を処理する能力が向上します。

  • インタラクティブな対話を促進します。 「明確な質問をする」という指示により、エージェントはより堅牢になります。曖昧なリクエストに対する誤った想定を最小限に抑え、より正確な回答が得られます。

UIパス

1.エージェントに移動します。

  • [ツール]または[ツールの管理]をクリックし、 [新しいツール]ボタンをクリックします。

2. 基本的な詳細を入力します。

  • エージェント ID: financial_assistant

  • 手順:上記のプロンプトをコピーします。

  • ラベル: Finance

  • 表示名: Financial Assistant

  • 表示の説明: An assistant for analyzing and understanding your financial data

財務アシスタントの作成 - エージェント ID フィールドに入力します。

3. 上部に戻り、 「ツール」をクリックします。

  • find_client_exposure_to_negative_newsツールの横にあるボックスにチェックを入れてください。

Kibana で AI エージェントを作成するときに新しいツールに移動する方法。

4. 「保存」をクリックします。

APIパス

/api/agent_builder/agentsエンドポイントへのPOSTリクエストを使用して、まったく同じエージェントを作成できます。リクエスト本体には、ID、名前、説明、完全な指示セット、エージェントが使用を許可されているツールのリストなど、すべて同じ情報が含まれています。

POST kbn://api/agent_builder/agents
    {
      "id": "financial_assistant",
      "name": "Financial Assistant",
      "description": "An assistant for analyzing and understanding your financial data",
      "labels": [
        "Finance"
      ],
      "avatar_color": "#16C5C0",
      "avatar_symbol": "💰",
      "configuration": {
        "instructions": """You are a specialized Data Intelligence Assistant for financial managers, designed to provide precise, data-driven insights from information stored in Elasticsearch.

**Your Core Mission:**
- Respond accurately and concisely to natural language queries from financial managers.
- Provide precise, objective, and actionable information derived solely from the Elasticsearch data at your disposal.
- Summarize key data points and trends based on user requests.

**Reasoning Framework:**
1.  **Understand:** Deconstruct the user's query to understand their core intent.
2.  **Plan:** Formulate a step-by-step plan to answer the question. If you are unsure about the data structure, use the available tools to explore the indices first.
3.  **Execute:** Use the available tools to execute your plan.
4.  **Synthesize:** Combine the information from all tool calls into a single, comprehensive, and easy-to-read answer.

**Key Directives and Constraints:**
- **If a user's request is ambiguous, ask clarifying questions before proceeding.**
- **DO NOT provide financial advice, recommendations, or predictions.** Your role is strictly informational and analytical.
- Stay strictly on topic with financial data queries.
- If you cannot answer a query, state that clearly and offer alternative ways you might help *within your data scope*.
- All numerical values should be formatted appropriately (e.g., currency, percentages).

**Output Format:**
- All responses must be formatted using **Markdown** for clarity.
- When presenting structured data, use Markdown tables, lists, or bolding.

**Start by greeting the financial manager and offering assistance.**
""",
        "tools": [
          {
            "tool_ids": [
              "platform.core.search",
              "platform.core.list_indices",
              "platform.core.get_index_mapping",
              "platform.core.get_document_by_id",
              "find_client_exposure_to_negative_news"
            ]
          }
        ]
      }
    }

ステップ4:成果 — 会話をする

ビジネス ロジックがツールにカプセル化され、エージェントでそれを使用できる「頭脳」が準備されました。すべてが一つにまとまるのを見る時が来ました。専用のエージェントを使用して、データとのチャットを開始できるようになりました。

財務アシスタントを作成した後、Elastic Agent Builder と会話します。

UIパス

  1. Kibana のエージェントに移動します。

  2. チャット ウィンドウの右下にあるドロップダウンを使用して、デフォルトのElastic AI エージェントから新しく作成したFinancial Assistantエージェントに切り替えます。

  3. エージェントが当社の専用ツールを使用できるように、次の質問をしてください。

    1. 市場のセンチメントが心配です。悪いニュースによって最もリスクにさらされている顧客は誰なのか教えていただけますか?

しばらくすると、エージェントは完全にフォーマットされた完全な回答を返します。LLM の性質上、回答の形式が若干異なる場合がありますが、この実行ではエージェントは次のように返しました。

ネガティブなニュースによるリスクが最も高いクライアント向けの財務アシスタントとして Elastic Agent Builder によって作成された応答。

何が起こったのですか?エージェントの推論

エージェントは単に答えを「知っていた」だけではありません。仕事に最適なツールを選択することを中心とした多段階の計画を実行しました。その思考プロセスは次のようになります。

  • 識別された意図: 「リスク」や「ネガティブなニュース」など、質問のキーワードがfind_client_exposure_to_negative_newsツールの説明と一致しました。

  • 計画を実行しました:リクエストから時間枠を抽出し、その専用ツールを1 回呼び出しました。

  • 作業を委任:ツールは連鎖結合、値の計算、並べ替えなど、面倒な作業をすべて実行しました。

  • 結果の統合:最後に、エージェントはプロンプトのルールに従って、ツールからの生データを明確で人間が読める要約にフォーマットしました。

思考を広げて詳細を見れば、推測するだけでは足りません。

ファイナンシャルアシスタントが、ネガティブなニュースに最も多く触れた顧客から得た 50 件の文書。

APIパス

同じ会話をプログラムで開始することもできます。入力した質問をconverse API エンドポイントに送信し、 financial_manageragent_idを必ず指定してください。

POST kbn://api/agent_builder/converse
{
  "input": "Show me our largest positions affected by negative news",
  "agent_id": "financial_assistant"
}

開発者向け: APIとの統合

Kibana UI はエージェントの構築と管理に素晴らしく直感的なエクスペリエンスを提供しますが、今日見てきたことはすべてプログラムで実現することもできます。Agent Builder は一連の API に基づいて構築されており、この機能を独自のアプリケーション、CI/CD パイプライン、または自動化スクリプトに直接統合できます。

使用する 3 つのコア エンドポイントは次のとおりです。

  • /api/agent_builder/tools: エージェントが使用できる再利用可能なスキルを作成、一覧表示、管理するためのエンドポイント。

  • /api/agent_builder/agents: エージェントのペルソナ(重要な指示やツールの割り当てなど)を定義するためのエンドポイント。

  • /api/agent_builder/converse: エージェントと対話し、会話を開始し、回答を得るためのエンドポイント。

これらの API を使用してこのチュートリアルのすべてのステップを実行するための完全な実践的なチュートリアルについては、 こちらの GitHub リポジトリで入手できる付属の Jupyter Notebook を ご覧ください。

結論: 構築する番です

まず、ES|QL クエリを取得して、それを再利用可能なスキルに変換することから始めました。次に、明確なミッションとルールを与えて、そのスキルを付与した専用の AI エージェントを構築しました。その結果、複雑な質問を理解し、複数段階の分析を実行して、正確でデータに基づいた回答を提供できる洗練されたアシスタントが誕生しました。

このワークフローは、Elastic の新しいAgent Builderの中心です。これは、技術に詳しくないユーザーが UI を通じてエージェントを作成できるほどシンプルでありながら、開発者が API 上にカスタム AI 搭載アプリケーションを構築できるほど微妙なニュアンスも備えた設計になっています。最も重要なのは、定義したエキスパート ロジックに従って、LLM を独自のデータに安全かつ確実に接続し、データとチャットできることです。

エージェントを使用してデータとチャットする準備はできていますか?

学んだことを定着させる最良の方法は、実際に手を動かしてみることです。今日お話しした内容をすべて、無料のインタラクティブな実践ワークショップで試してみてください。専用のサンドボックス環境で、このフロー全体とその他の内容を実行します。

今後のブログでは、 Financial Assistantエージェントと対話するスタンドアロン アプリケーションの使用方法と、それを可能にするモデル コンテキスト プロトコル (MCP)について詳しく説明します。また、別のブログでは、開発中の Agent2Agent (A2A) プロトコルに対する Agent Builder のサポートについて説明します。

引き続きご注目ください、そして楽しい建築を!

関連記事

高度なRAGテクニックパート2:クエリとテスト

Han Xiang Choong

Elasticsearchによるエンティティ解決、パート4:究極のチャレンジ

Jessica Moszkowicz

Elastic Agent Builder と GPT-OSS を使用した HR 向け AI エージェントの構築

Tomás Murúa

高度なRAGテクニックパート1:データ処理

Han Xiang Choong

LangGraph.jsとElasticsearchを使用して金融AI検索ワークフローを構築

Jeffrey Rengifo

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう