博客

您的第一个弹性代理:从单一查询到人工智能驱动的聊天

了解如何使用 Elastic 的人工智能代理生成器创建专门的人工智能代理。在本博客中,我们将构建一个金融人工智能代理。

借助 Elastic 的全新代理生成器,您可以创建专门的人工智能代理,使其成为特定业务领域的专家。该功能使您不再局限于简单的仪表盘和搜索栏,而是将数据从被动的资源转变为主动的对话伙伴。

想象一下,一位财务经理需要在与客户会面之前加快速度。现在,他们只需向定制的代理直接提问,而无需手动挖掘新闻源和交叉参考投资组合仪表板。这就是"聊天优先" 方法的好处。经理与他们的数据直接对话,询问诸如"ACME 公司的最新消息是什么,它对我客户的持股有何影响?"并在几秒钟内得到综合的专家答复。

今天,我们正在打造一个金融专家,其应用就像您的数据一样多种多样。同样的能力可以造就一名网络安全分析师来寻找威胁,造就一名现场可靠性工程师来诊断故障,或者造就一名营销经理来优化营销活动。无论在哪个领域,核心任务都是一样的:将您的数据转化为您可以与之交谈的专家。

步骤 0:我们的数据集

我们当前的数据集是一个基于金融的合成数据集,包含金融账户、资产头寸、新闻和财务报告。虽然它是合成的,但复制了真实金融数据集的简化版本。

financial_accounts:具有风险特征的客户组合

financial_holdings:有购买记录的股票/ETF/债券仓位

financial_asset_details:股票/ETF/债券的详细信息

financial_news:人工智能生成的带有情感分析的市场文章

financial_reports:公司收益和分析师报告

您可以根据此处的随附笔记本自行加载该数据集。

步骤 1:基础--作为 ES|QL 的业务逻辑

每一项人工智能技能都以坚实的逻辑为起点。对于我们的财务经理代理,我们需要教它如何回答一个常见问题:"我担心市场情绪。你能告诉我哪些客户最容易受到坏消息的影响吗?这个问题超出了简单的搜索范围。这要求我们将市场情绪与客户投资组合联系起来。

我们需要找到负面文章中提到的资产,识别持有这些资产的每一位客户,计算其风险敞口的当前市值,然后对结果进行排序,优先考虑风险最高的客户。这种复杂的多连接分析是我们先进的 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

分解:接合点和护栏

在这个查询中,有两个重要的概念使代理生成器发挥作用。

1.查找联接

多年来,Elasticsearch 最受欢迎的功能之一就是根据一个共同的键来连接来自不同索引的数据。有了 ES|QL,LOOKUP JOIN

在我们的新查询中,我们会执行一连串的三个LOOKUP JOIN's:首先将负面新闻与资产详细信息连接起来,然后将这些资产与客户持有的资产连接起来,最后再与客户的账户信息连接起来。这样,在一次高效的查询中,就能从四个不同的索引中获得极其丰富的结果。这意味着我们可以将不同的数据集结合起来,创建一个具有洞察力的单一答案,而无需事先将所有数据反规范化为一个巨大的索引。

2.作为 LLM 护栏的参数

您会发现查询使用了?time_duration 。这不仅是一个变量,还是人工智能的护栏。虽然大型语言模型 (LLM) 是生成查询的好帮手,但让它们自由支配数据可能会导致查询效率低下甚至错误。

通过创建参数化查询,我们迫使 LLM 按照人类专家已经定义的经过测试、高效且正确的业务逻辑工作。这与多年来开发人员使用搜索模板安全地向应用程序公开查询功能的方式类似。代理可以解释用户的请求,如"this week" 来填充time_duration 参数,但它必须使用我们的查询结构来获取答案。这使我们在灵活性和控制性之间取得了完美的平衡。

最终,这种查询可以让了解数据的专家将其知识封装到一个工具中。其他人和人工智能代理只需提供一个参数,就能使用该工具获得相关结果,而无需了解底层的复杂性。

步骤 2:技能--将查询转化为可重复使用的工具

在我们将 ES|QL 查询注册为工具之前,它只是一个文本。在代理生成器中,工具不仅仅是一个已保存的查询;它还是一个"技能" ,人工智能代理可以理解并选择使用。神奇之处在于我们提供的自然语言描述。该描述是连接用户问题和底层查询逻辑的桥梁。让我们注册一下刚刚创建的查询。

用户界面路径

在 Kibana 中创建工具的过程非常简单。

如何在 Kibana 中创建工具。

1.导航至代理

  • 单击 " 工具 "或 "管理工具",然后单击 "新建工具"按钮。

2.在表格中填写以下详细信息:

  • 工具 ID: find_client_exposure_to_negative_news

i.这是工具的唯一 ID

  • 描述 "查找客户投资组合受负面新闻影响的情况。该工具会扫描最近的新闻和报道,查找负面情绪,识别相关资产,并找到持有该资产的所有客户。它会返回一个按头寸当前市值排序的列表,以突出潜在风险最高的头寸。"

i.法律硕士就是通过阅读这些内容来判断这个工具是否适合这项工作。

  • 标签retrievalrisk-analysis

标签用于帮助对多个工具进行分组

  • 配置:粘贴步骤 1 中的完整 ES|QL 查询

i.这是代理将使用的搜索

3.单击从查询中推断参数。用户界面会自动查找?time_duration ,并将其列在下面。为每项功能添加一个简单的说明,以帮助代理(和其他用户)了解其用途。

  • time_duration:搜索负面新闻的时间范围。格式为"X 小时" 默认为 8760 小时

使用 ESQL 查询配置工具,包括其逻辑和所需参数。

4.测试一下!

  • 单击保存& 测试。

& 测试按钮。
  • 您将看到一个新的快捷方式,可以在此测试查询,以确保其工作符合预期。

i.在time_duration 中输入所需的范围,这里我们使用 "8760 小时"。

  • 点击 "提交",如果一切顺利,您将看到一个 JSON 响应。要确保它按预期运行,请向下滚动并查看values 对象。这就是返回实际匹配文档的地方。

点击提交后出现的 JSON 响应。

5.点击右上角的 "X "关闭测试窗口。现在,您的新工具将出现在列表中,随时可以分配给代理。

应用程序接口路径

对于喜欢自动化或需要以编程方式管理工具的开发人员来说,只需调用一个 API 就能实现同样的效果。只需向带有工具定义的/api/agent_builder/tools 端点发送POST 请求即可。

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:大脑--创建您的定制代理

我们开发了一种可重复使用的技能(工具)。现在,我们需要创建代理,即实际使用它的角色。代理是一个 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.**

让我们来分析一下为什么这个提示如此有效:

  • 它定义了一个成熟的角色: 第一句话立即将代理人定位为"专业的数据智能助理," 定下了专业、干练的基调。

  • 它提供了一个推理框架: 通过告诉代理"Understand(理解)、Plan(计划)、Execute(执行)和 Synthesize(综合)," ,我们给了它一个标准的操作程序。这提高了它处理复杂、多步骤问题的能力。

  • 它促进了互动对话: "提出澄清性问题的指令" 使代理更加稳健。这将最大限度地减少对模棱两可的请求做出不正确的假设,从而获得更准确的答复。

用户界面路径

1.导航至代理。

  • 单击 " 工具 "或 "管理工具",然后单击 "新建工具"按钮。

2.填写基本信息:

  • 代理编号: financial_assistant.

  • 说明 复制上面的提示。

  • 标签 Finance.

  • 显示名称: Financial Assistant

  • 显示说明: An assistant for analyzing and understanding your financial data

创建财务助理--填写代理人 ID 字段。

3.回到顶部,点击 "工具"。

  • 勾选find_client_exposure_to_negative_news 工具旁边的复选框。

在 Kibana 中创建 ai 代理时,如何导航到新的 toold。

4.单击保存

应用程序接口路径

您可以通过POST 请求/api/agent_builder/agents 端点来创建完全相同的代理。请求正文包含所有相同的信息: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:回报--进行对话

我们已将业务逻辑封装在一个工具和一个"大脑" 中,准备在我们的 Agent 中使用它。是时候见证这一切了。现在,我们可以使用专门的代理与数据聊天了。

创建财务助理后与弹性代理生成器对话。

用户界面路径

  1. 导航至 Kibana 中的代理

  2. 使用聊天窗口右下角的下拉菜单,从默认的Elastic AI 代理切换到我们新创建的财务助理 代理。

  3. 请提出一个问题,以便代理人使用我们的专业工具:

    1. 我担心市场情绪。您能告诉我哪些客户最容易受到坏消息的影响吗?

片刻之后,代理将返回一个格式完美、内容完整的答案。由于法律硕士的性质,您的答案格式可能会略有不同,但这次运行中,代理返回的答案是一样的:

由 Elastic Agent Builder 创建的回复,为:最易受负面新闻影响的客户提供财务助理。

刚刚发生了什么?代理人的推理

该特工并不只是"知道" 答案。它以选择最佳工具为中心,执行了一个多步骤计划。下面我们来看看它的思考过程:

  • 识别意图:它将您问题中的关键字,如"风险" 和"负面新闻、" 与find_client_exposure_to_negative_news 工具的描述相匹配。

  • 执行计划:它从您的请求中提取了时间范围,并对该专业工具进行了一次调用

  • 委托工作:然后,该工具就能完成所有繁重的工作:链式连接、值计算和排序。

  • 合成结果:最后,代理按照提示规则,将来自工具的原始数据格式化为清晰、人类可读的摘要。

如果我们拓展思维,看到更多细节,我们就不只是猜测了。

这 50 份文件记录了财务助理发现的受负面新闻影响最大的客户。

应用程序接口路径

您也可以通过编程来启动同样的对话。只需将输入问题发送到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"
}

致开发人员:与应用程序接口集成

虽然 Kibana UI 为构建和管理代理提供了美妙而直观的体验,但您今天所看到的一切也都可以通过编程来实现。代理生成器基于一套应用程序接口(API)构建,允许您将此功能直接集成到自己的应用程序、CI/CD 管道或自动化脚本中。

您将使用的三个核心端点是

  • /api/agent_builder/tools:创建、列出和管理可重复使用的技能的终端。

  • /api/agent_builder/agents:角色:定义代理角色的终端,包括重要的说明和工具分配。

  • /api/agent_builder/converse:与代理互动、开始对话和获取答案的终端。

有关使用这些应用程序接口执行本教程中每一步的完整实践演示,请查看我们 GitHub 软件仓库中的配套Jupyter Notebook

总结:轮到你来建设

我们首先使用 ES|QL 查询,并将其转换为可重复使用的技能。然后,我们建立了一个专门的人工智能代理,赋予它明确的任务和规则,并赋予它这种技能。它是一个复杂的助手,能够理解复杂的问题,并执行多步骤分析,提供精确的数据驱动型答案。

这一工作流程是 Elastic 中新的代理生成器的核心。它的设计足够简单,非技术用户可以通过用户界面创建代理,但又足够细致,开发人员可以在我们的应用程序接口基础上构建定制的人工智能驱动应用程序。最重要的是,它可以让您安全可靠地将 LLM 连接到自己的数据,由您定义的专家逻辑进行管理,并与您的数据进行聊天。

准备好使用代理与您的数据聊天了吗?

巩固所学知识的最好方法就是动手实践。在我们的免费互动实践研讨会上,尝试我们今天讨论的所有内容。您将在专门的沙盒环境中经历整个流程以及更多。

在今后的博客中,我们将向您展示如何使用独立应用程序与我们的Financial Assistant 代理交互,并深入探讨使这一切成为可能的模型上下文协议 (MCP)。在另一篇博客中,我们将讨论 Agent Builder 对开发中的 Agent2Agent(或 A2A)协议的支持。

敬请期待,祝您建筑愉快!

相关内容

高级 RAG 技术第 2 部分:查询和测试

Han Xiang Choong

使用 Elasticsearch 解决实体问题,第 4 部分:终极挑战

Jessica Moszkowicz

在 Streams 中利用机器学习自动化日志解析

Nastia Havriushenko

利用弹性代理生成器和 GPT-OSS 构建人力资源人工智能代理

Tomás Murúa

高级 RAG 技术第 1 部分:数据处理

Han Xiang Choong

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用