用自然语言分析跟踪数据,询问 Elastic Agent Builder 为什么运行缓慢

作者:来自 Elastic Meghan Murphy

你的 Agent Builder 跟踪数据可以回答的四个 agent 性能问题,包括按 模型 统计 token 消耗、工具错误率、缓慢的对话轮次以及最近的提示词。这里提供了每个问题对应的 ES|QL,包括 SUM() 所需的类型转换。

Agent Builder 现已正式发布。通过Elastic Cloud 试用版开始使用,并查看 Agent Builder 的文档。

询问 Elastic Agent Builder 你的 agent 今天消耗了多少 token,它会编写Elasticsearch 查询语言(ES|QL),并针对你的 OpenTelemetry(OTel)跟踪数据运行该查询。然后,它会在聊天界面中给出答案。对于其他 agent 性能问题也是如此:哪个工具失败次数最多?哪些对话轮次最慢?用户实际都在询问什么?Elastic Agent Builder 就是为此而设计的。它允许用户在几分钟内构建基于你的数据的 agent。

如果启用了跟踪功能,那么 agent-builder-traces 技能 已经加载到你空间中的每个 agent 上,无需安装任何东西。我们系列中的第一篇文章介绍了如何启用 OTel 跟踪,以及开箱即用(OOTB)的仪表板和阈值告警。这篇文章讨论的是如何进行提问。

什么是 agent-builder-traces 技能?

agent-builder-traces 是 Agent Builder 的内置技能。它接收一个自然语言问题,从中生成 ES|QL 查询,针对你的跟踪索引执行该查询,然后返回一份自然语言 摘要 。它针对的索引是 traces-agent_builder.otel-<space-id>,其中 <space-id> 是你正在使用的 Kibana 空间。使用精确的、限定空间的索引模式,而不是通配符,可以避免其他空间的数据出现在你的结果中。

在底层,该技能使用单个内联工具:agent-builder-traces.generate_esql。你不需要直接调用此工具,而是提出一个问题,然后 agent 会代表你调用该工具,并将你的问题作为生成 ES|QL 的提示词传递给它。该工具会解析当前空间的跟踪索引,使用默认模型构建查询,针对 Elasticsearch 执行查询,然后返回结果。

哪些隐私设置控制你的跟踪数据捕获哪些内容?

多个包含敏感信息的字段默认处于关闭状态。你可以在 Gen AI 设置 (Stack Management > AI Assistants )中的 "Agent Builder Traces" 部分启用这些字段。展开高级隐私设置即可找到它们。

设置键 捕获的内容
agentBuilder:tracing:includeUserPrompts 用户消息
agentBuilder:tracing:includeLlmResponses 大型语言模型(LLM)响应文本
agentBuilder:tracing:includeToolDetails 工具调用参数和结果
agentBuilder:tracing:includeSystemPrompt agent 的系统提示词
agentBuilder:tracing:includeRealNames 真实的工具、agent 和对话名称(关闭时进行哈希处理)
agentBuilder:tracing:includeRealIds 真实的对话和工作流 ID(关闭时进行哈希处理)
agentBuilder:tracing:includeUserData 真实的用户 ID 和用户名(关闭时进行哈希处理)

为什么我的跟踪分析查询返回空行?

如果技能返回空行,或者告诉你某个字段不可用,请检查两件事:相关设置是否已在你的配置中启用,以及你的查询时间范围是否与任何已记录的跨度重叠。技能会准确报告查询返回的内容;当字段为空时,它不会编造内容。

可以询问哪些 agent 性能问题?

你可以询问的问题示例包括:

我的 agent 按模型使用了多少 token?

询问: 在过去 24 小时内,我的 agent 按模型分别使用了多少输入和输出 token?

ES|QL:

sql 复制代码
`

1.  FROM traces-agent_builder.otel-<space-id>
2.  | WHERE span.name LIKE "chat *" AND @timestamp >= NOW() - 24 hours
3.  | STATS
4.      input_tokens  = SUM(TO_LONG(attributes.gen_ai.usage.input_tokens)),
5.      output_tokens = SUM(TO_LONG(attributes.gen_ai.usage.output_tokens))
6.    BY attributes.gen_ai.request.model
7.  | SORT input_tokens DESC

`AI写代码

每个 token 字段外层的 TO_LONG() 类型转换都是必需的。这些字段在不同索引版本中可能以混合的 integer 和 long 类型出现,而 ES|QL 的 SUM() 需要先进行显式的数值转换,然后才能对它们进行聚合。如果你针对该索引编写自己的查询时遇到意外的类型错误,通常就是这个原因。

哪些工具失败次数最多?

询问: 在过去 7 天内,每个工具的错误率是多少?

ES|QL:

sql 复制代码
`

1.  FROM traces-agent_builder.otel-default
2.  | WHERE @timestamp >= NOW() - 7 days
3.  | WHERE span.name LIKE "execute_tool *"
4.  | STATS total_calls = COUNT(*), error_count = COUNT(*) WHERE status.code == "Error" BY tool_name = attributes.gen_ai.tool.name
5.  | EVAL error_rate_pct = ROUND(error_count * 100.0 / total_calls, 2)
6.  | SORT error_rate_pct DESC
7.  | LIMIT 100

`AI写代码

工具错误率查询会聚合名称为 'execute_tool' 的跨度,并将 status.code == "Error" 的计数与每个工具名称的总计数进行比较。结果会显示哪些工具最经常失败。

哪些对话轮次最慢?

询问: 显示过去一小时内最慢的 10 个对话轮次。

ES|QL:

sql 复制代码
`

1.  FROM traces-agent_builder.otel-default
2.  | WHERE @timestamp >= NOW() - 1 hour
3.  | WHERE span.name LIKE "invoke_agent *" AND attributes.elastic.inference.span.kind == "CHAIN"
4.  | EVAL duration_seconds = duration / 1000000000.0
5.  | KEEP attributes.gen_ai.conversation.id, attributes.gen_ai.agent.id, @timestamp, duration_seconds
6.  | SORT duration_seconds DESC
7.  | LIMIT 10

`AI写代码

该技能会查询满足 span.name LIKE "invoke_agent *" 且 attributes.elastic.inference.span.kind == "CHAIN" 的跨度。这些跨度对应单个对话轮次,从用户发送消息开始,到 agent 返回响应结束。持续时间以纳秒存储,因此该技能会先将其转换为秒,然后再进行排序。

用户都在询问我的 agent 什么?

询问: 过去 30 分钟内,用户都向我的 agent 提出了哪些问题?

ES|QL:

sql 复制代码
`

1.  FROM traces-agent_builder.otel-default
2.  | WHERE @timestamp >= NOW() - 30 min
3.  | WHERE span.name LIKE "chat *"
4.  | WHERE attributes.gen_ai.input.messages IS NOT NULL
5.  | SORT @timestamp DESC
6.  | KEEP @timestamp, attributes.gen_ai.conversation.id, attributes.gen_ai.input.messages
7.  | LIMIT 100

`AI写代码

最近提示词查询仅在 agentBuilder:tracing:includeUserPrompts 设置为 true 时返回数据。当该设置关闭时,attributes.gen_ai.input.messages 字段为空,该技能会建议你检查包含用户提示词隐私设置。

什么时候应该改用 Discover 或 Kibana Lens?

该技能针对一个索引模式:traces-agent_builder.otel-<space-id>。有两种场景超出了这一范围。

该技能可以查询我自己的应用索引吗?

如果你想针对自己建立索引的数据运行临时查询,请使用通用数据探索技能,或者直接在 Discover 中编写 ES|QL。agent-builder-traces 技能不会查询 Agent Builder 跟踪索引之外的数据。

该技能可以创建或编辑仪表板吗?

该技能专注于临时查询和生成摘要文本。如果你的目标是根据跟踪数据构建永久可视化,请改用 Lens 或 dashboard-management 技能。我们在系列第一篇文章中详细介绍了这一具体流程。

该技能与另外两种监控 agent 的方式并列存在。

工具 最适合 你在什么情况下使用
agent-builder-traces 技能 临时的 agent 性能问题 你注意到某些问题,希望在不离开聊天界面的情况下获得答案
开箱即用仪表板 持续可见性 你希望在不提出任何问题的情况下查看一段时间内的趋势
阈值告警 自动化监控 你定义一次条件,并在条件被突破时收到通知

如何根据 agent 跟踪数据构建评估流水线

traces-agent_builder.otel-<space-id> 中的跨度会捕获你空间中每个对话轮次和 LLM 调用的实际执行数据。这些记录是评估流水线的原始材料:针对每种 agent 类型自动检查响应质量和延迟预算,以及在更新系统提示词时进行回归检测。我们系列的下一篇文章将介绍如何利用 Agent Builder 已经收集的跟踪数据构建这些评估循环。

原文:Agent performance trace analysis: Ask Elastic Agent Builder | Elasticsearch Labs

相关推荐
Elasticsearch1 小时前
Elastic 中的 Temporal Cloud 可观测性:50+ 个指标,无需采集器
elasticsearch
阿里云大数据AI技术1 小时前
云栖2026|从“找到答案”到“完成任务”:阿里云以 Agentic Search 重塑 AI 搜索
大数据·人工智能·elasticsearch
Elasticsearch1 小时前
遥测策略:在运行时更改 OpenTelemetry 采样率和日志级别,无需重启
elasticsearch
Elasticsearch1 小时前
Elastic 宣布 Serverless 上的跨项目搜索正式发布,让团队无需移动任何数据即可跨所有关联项目进行查询
elasticsearch
Elasticsearch1 小时前
并非每条日志都值得保留 90 天:Elastic Streams 中按数据流设置保留期限
elasticsearch
Elasticsearch6 天前
Elastic Observability 的跨项目搜索:通过一个查询搜索所有关联项目
elasticsearch
Elasticsearch6 天前
Elasticsearch 中的 agentic 工作流:暂停 AI agent 等待人工审批,72 小时后恢复
elasticsearch
Elastic 中国社区官方博客6 天前
jina-ocr-v1:在低成本 GPU 上实现更快速的文档解析
大数据·数据库·elasticsearch·搜索引擎·全文检索·jina
vx-程序开发6 天前
【计算机毕设】django校园跑腿服务系统83141
java·数据库·vue.js·spring boot·spring·elasticsearch·django