首页/新闻资讯/正文详情

你的 agents 一直在记录凭证:将 Elastic Agent Builder 内置的 OTel traces 转换为 Kibana 中的 token 成本仪表板(TaoToken 统一 Key

发布时间:2026/9/29 7:49:23 来源:云帆数科 栏目:资讯中心
你的 agents 一直在记录凭证:将 Elastic Agent Builder 内置的 OTel traces 转换为 Kibana 中的 token 成本仪表板(TaoToken 统一 Key
1. 你的 Agent 一直在记账只是没人看账本Elastic Agent Builder 从正式发布那天起就默认把每一次对话轮次写成完整的 OpenTelemetry trace。LLM 请求、工具执行、token 计数全部落到 Elasticsearch 的 data stream 里用 ES|QL 就能查。问题在于绝大多数团队只在出事之后才翻这些数据——某次对话悄悄烧掉整月预算或者某个工具调用慢得离谱都是事后才发现。这篇要解决的就是这件事把 Agent Builder 内置的 OTel traces通过 TaoToken 统一 Key/API 通道接进来在 Kibana 里搭一个能看 token 成本的仪表板再配一条超阈值告警。适合已经在用 Elastic Agent Builder、手里有 Kibana space、但还没把 trace 数据变成运营指标的人。读完你能拿到可复制的config.toml、settings.json骨架OTel exporter 配置片段以及在 Kibana 里验证 traces 落库和成本字段的具体检查动作。先说清楚 trace 里有什么。一次 agent 运行就是一个 trace可以理解成一次对话轮次的记录凭证。每个 LLM 请求、工具调用、agent 操作都是一个独立 span。span 类型大致分四层invoke_agent name的 CHAIN 覆盖整轮生命周期AGENT 是单次 agent 执行chat model是一次 LLM 请求带模型、延迟、token 数量execute_tool toolName是工具调用带参数、耗时、结果。数据写进每个 Kibana space 专属的 data stream默认 space 对应traces-agent_builder.otel-default。查询时直接指定索引别用通配符否则会把不同 space 的数据混在一起。2. 用 TaoToken 统一 Key 打通 OTel 出口Agent Builder 自己会产 trace但如果你想让 trace 里的模型调用走统一通道、方便按 Key 维度对账就需要一个统一的 API 入口。TaoToken 在这里的角色是统一 Key/API 通道官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口 https://taotoken.net/api 。把模型调用的 base_url 指到它Key 统一管理trace 里的gen_ai.*字段就能和你的成本口径对上。前置准备分三步。第一在 TaoToken 控制台建一个 API Key路径是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 建完复制出来后面写进环境变量。第二确认你的 Kibana space 里 Gen AI 设置下 Agent Traces 的开关状态。agentBuilder:tracing:enabled默认开启管 trace 采集下面还有一组隐私控制默认屏蔽提示词和工具输出需要更完整 trace 才打开agentBuilder:tracing:includeUserPrompts、includeLlmResponses、includeToolDetails、includeSystemPrompt、includeRealNames、includeRealIds。最后两个要特别小心includeRealIds会保留真实对话标识符而不是哈希版本等于把 trace 和具体用户会话关联起来属于 PII 范畴。只有在你清楚 agent 处理的数据类型、并且有数据治理机制时才开。第三确认 OTel exporter 的出口。Agent Builder 用 OpenTelemetry 语义约定span 属性名是gen_ai.usage.input_tokens、gen_ai.usage.output_tokens、gen_ai.conversation.id、gen_ai.operation.name这一套。你的 exporter 要把这些属性原样送进 Elasticsearch别在中间做字段改名否则后面 Lens 面板的公式会对不上。3. 可复制的 config.toml 与 settings.json 骨架下面这份config.toml是 OTel Collector 的骨架负责把 Agent Builder 产出的 trace 转发到 Elasticsearch同时把模型调用的出口指向 TaoToken。字段按你的实际环境替换注释保留。# config.toml - OTel Collector 骨架 receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 processors: batch: timeout: 5s send_batch_size: 512 # 保留 gen_ai.* 语义约定字段不做改名 attributes: actions: - key: gen_ai.usage.input_tokens action: upsert - key: gen_ai.usage.output_tokens action: upsert exporters: elasticsearch: endpoints: [https://your-es-endpoint:9200] # 写入 space 专属 data stream默认 space 用 otel-default logs_index: traces-agent_builder.otel-default api_key: ${ES_API_KEY} mapping: mode: otel service: pipelines: traces: receivers: [otlp] processors: [batch, attributes] exporters: [elasticsearch]模型调用侧的settings.json骨架把 base_url 指向 TaoToken 的 API 入口Key 从环境变量读别硬编码进文件。{ llm: { provider: openai-compatible, base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, model: your-model-name, timeout_seconds: 60 }, tracing: { enabled: true, otlp_endpoint: http://localhost:4318, service_name: elastic-agent-builder, include_user_prompts: false, include_llm_responses: false, include_tool_details: false, include_real_ids: false } }环境变量这样设Key 从控制台复制的那串填进去export TAOTOKEN_API_KEYsk-你的key export ES_API_KEY你的es-api-keyOTel exporter 片段单独拎出来方便你贴进已有的 collector 配置。注意mapping.mode: otel这行它让 Elasticsearch 按 OTel 语义约定建映射gen_ai.usage.*才会被识别成数值字段而不是字符串否则后面求和会报类型错。exporters: elasticsearch: endpoints: [https://your-es-endpoint:9200] logs_index: traces-agent_builder.otel-default api_key: ${ES_API_KEY} mapping: mode: otel retry: enabled: true max_requests: 34. 验证 traces 落库与成本字段配置写完别急着搭面板先在 Kibana 里确认数据真的进来了。打开 Discover索引模式直接指定traces-agent_builder.otel-default时间范围拉到最近 15 分钟跑一次 agent 对话看有没有新文档进来。有文档说明 exporter 通了。接着验证成本字段。在 Discover 的字段列表里找gen_ai.usage.input_tokens和gen_ai.usage.output_tokens点进去看类型是不是 number。如果是 keyword 或 text说明映射没按 OTel 约定建回上一步检查mapping.mode。确认类型后用 ES|QL 跑一条聚合看单次对话的 token 总量FROM traces-agent_builder.otel-default | WHERE timestamp NOW() - 15 minutes | WHERE gen_ai.operation.name chat | STATS total_tokens SUM(gen_ai.usage.input_tokens) SUM(gen_ai.usage.output_tokens) BY conversation_id gen_ai.conversation.id | SORT total_tokens DESC | LIMIT 10返回结果里每行是一个对话 ID 和它的 token 总量这就是成本仪表板的数据源。如果返回空先确认gen_ai.operation.name的值确实是chat不同版本的 span 命名可能有差异用| STATS COUNT(*) BY gen_ai.operation.name先看一眼实际值。落库验证通过后搭第一个 Lens 面板水平条形图x 轴gen_ai.conversation.id降序取前 10y 轴用公式sum(gen_ai.usage.input_tokens) sum(gen_ai.usage.output_tokens)。这就是「按 token 消耗排序的最活跃对话」。第二个面板可以换成 ES|QL 可视化统计 LLM 往返次数最多的对话FROM traces-agent_builder.otel-default | WHERE timestamp ?_tstart AND timestamp ?_tend | WHERE gen_ai.operation.name chat | STATS Chat Span Count COUNT(*) BY Conversation ID gen_ai.conversation.id, Span Name span.name | SORT Chat Span Count DESC | LIMIT 100告警规则也基于同一份数据。导航到 Observability Alerts Manage Rules Create Rule选 Elasticsearch query 类型用下面这条 ES|QL单次对话超过 256000 token 就触发FROM traces-agent_builder.otel-default | WHERE timestamp NOW() - 15 minutes | STATS total_tokens SUM(gen_ai.usage.input_tokens) SUM(gen_ai.usage.output_tokens) BY gen_ai.conversation.id | WHERE total_tokens 256000 | KEEP gen_ai.conversation.id, total_tokens调度周期设 15 分钟触发动作配 Slack 通知或 PagerDuty incident。告警负载里的gen_ai.conversation.id就是你要去查的那次对话。5. 本篇常见错排查trace 没进 Elasticsearch先看 collector 日志有没有 export 失败。最常见的是logs_index写错默认 space 必须是traces-agent_builder.otel-default写成别的 space id 数据就进错地方了。其次是ES_API_KEY没权限写 data stream检查 API Key 的角色。token 字段求和报类型错gen_ai.usage.input_tokens被映射成字符串了。原因是 exporter 没开mapping.mode: otel或者字段第一次写入时就是字符串。删掉索引重新灌一次或者用 index template 强制映射。面板里对话 ID 是哈希值agentBuilder:tracing:includeRealIds没开。默认是哈希版本开了才保留真实 ID。但开之前想清楚 PII 问题别为了好看把用户会话暴露了。告警一直不触发检查调度周期和查询时间窗口是否匹配。查询里写NOW() - 15 minutes调度周期也设 15 分钟两者对齐。如果调度 5 分钟但窗口 15 分钟会重复统计同一批数据。不同 space 数据混在一起查询用了通配符索引。永远指定具体 space 的索引名别用traces-agent_builder.otel-*。模型调用 401TaoToken 的 Key 没设对或者base_url写成了带路径的形式。API 入口就是https://taotoken.net/api别自己拼/v1之类的后缀具体路径以接入文档为准。6. 把 Key 和文档收好下次直接查排障和接入相关的入口放这里下次遇到 401 或者字段对不上直接翻API Keys 管理在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先验证模型通不通用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 跑一轮确认返回正常再回去看 trace。如果你是要长期跑编码类 agent、或者把 agent 接进 CI 流程Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 按套餐走比单次调用好对账。最后留一个实操习惯每次改完 collector 配置先在 Discover 里跑一遍| STATS COUNT(*) BY gen_ai.operation.name确认 span 类型分布正常再去动 Lens 面板。这一步花三十秒能省掉后面半小时的字段排查。

相关推荐

河南站长亲测:成品软件源码网站对比评测避坑指南
河南站长亲测:成品软件源码网站对比评测避坑指南

河南站长亲测:成品软件源码网站对比评测避坑指南 找建站公司怕被坑高价,这种焦虑我太懂了。昨天刚有个郑州做建材的老总跟我吐槽,找了家“大厂”,报价8万,最后交给他一个套壳的成品源码,连后台权限都没给全,想改个颜色都找不着入口。… · 2026/9/27 17:04:47

让 Claude Code 帮你写爬虫:2026 年的「Agent 原生」数据采集
让 Claude Code 帮你写爬虫:2026 年的「Agent 原生」数据采集

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/29 7:46:34

WordPress制作会员功能从零搭建:3步解决服务器报错痛点
WordPress制作会员功能从零搭建:3步解决服务器报错痛点

WordPress制作会员功能从零搭建:3步解决服务器报错痛点 很多设计师转前端做 WordPress 会员系统时,卡在第一步就崩溃了:域名解析指向错误,服务器 SSL 证书没配对,或者 Nginx 配置里 proxy_pass… · 2026/9/27 17:04:35

Spingboot启动预热的实现
Spingboot启动预热的实现

启动预热的适用场景启动预热适合以下情况:数据主要来自第三方接口,无法直接从本地数据库读取。第三方接口响应较慢,首次访问容易超时。一个页面需要调用多个第三方接口或逐项查询。数据读取频繁,但变化不频繁。希望服务启动后&… · 2026/9/29 6:52:37

Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment
Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment

文章主要内容总结 本文研究了多模态大语言模型(具体为ChatGPT-4o)利用静态行车记录仪图像进行类人交通场景解读的潜力,重点聚焦与老年司机评估相关的三项任务:交通密度评估、交叉口可见性评估和停车标志识别。这些任务需上下文推理而非简单目标检测。研究采用零样本、少样… · 2026/9/28 3:32:43

Leveraging Large Language Models for Classifying App Users‘ Feedback
Leveraging Large Language Models for Classifying App Users‘ Feedback

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)解决应用用户反馈分类的挑战,传统方法依赖有监督机器学习,但受限于标注数据集的规模和质量。研究通过三个核心实验评估了4种先进LLMs(GPT-3.5-Turbo、GPT-4o、Flan-T5、Llama3-70b)的性能: LLMs在用户反馈分类中的基… · 2026/9/28 3:32:43

Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...
Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...

文章主要内容总结 本文通过实验评估了大型语言模型(LLMs)在奥地利及欧盟增值税(VAT)法框架下辅助法律决策的能力。研究聚焦于两种提升LLM性能的方法——微调(fine-tuning)和检索增强生成(RAG),并在两类案例中进行验证:一是权威教科书案例,二是税务咨询公司的真实案… · 2026/9/28 3:32:43

学Java别走弯路,这5个方向最吃香
学Java别走弯路,这5个方向最吃香

学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/29 4:13:53

AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions
AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions

AlphaAgents相关总结与翻译 一、文章主要内容总结 (一)研究背景与问题 传统股票投资组合管理依赖人类分析师处理海量信息(如财务披露、财报、市场新闻等),存在信息处理效率低、易受认知偏差(如损失厌恶、过度自信)影响的问题,可能错失投资收益机会。尽管AI在数据处理… · 2026/9/28 3:32:08

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/29 0:45:26

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码