工具调用要可观测命名
Agent 的工具调用不要只记“调用成功/失败”,而要把每一次工具执行命名成可聚合、低基数、可追责的 span。OpenTelemetry Semantic Conventions v1.41.0 在 GenAI breaking change 里把 gen_ai.tool.name 从推荐提高到必填,并要求工具执行 span 名称形如 execute_tool {gen_ai.tool.name};这不是埋点格式小改,而是在说:Agent 的执行轨迹必须能按“哪个工具”稳定切片。
为什么这对 Agent Engineer 很关键?工具调用通常发生在应用代码里,而不是模型服务里:MCP server、内部 API、检索、代码执行、支付/权限检查,都可能由不同框架接管。如果 trace 里只有一次 generic tool_call,出了问题只能看日志;如果 span name 和属性里有稳定的 tool name、call id、error type,就能回答更工程化的问题:哪个工具拖慢了整体任务?哪个工具的失败导致模型反复重试?同一个工具在不同 agent policy 下成本是否不同?
这里的取舍是:工具名应该是低基数的能力名,比如 search_docs、run_sql、create_ticket,不要把用户 query、URL、订单号塞进 span name。参数和结果即使要记录,也应像规范里写的那样保持 opt-in,因为它们常常有敏感信息、体积不可控、基数爆炸。也就是说,可观测性不是“多记一点”,而是把身份字段、诊断字段、敏感载荷分层。
如果 OPC 之后要建设自己的 Agent runtime / MCP 工具层,一个很实用的起点是:先规定每个 tool 的 canonical name、版本、权限域和错误码,再让 runtime 自动为每次工具执行打 span;否则等工具数量上来,再补可观测性,就会发现所有失败都叫“agent step failed”。
你现在负责的 Agent 系统里,有没有一个地方能列出“所有可被模型调用的工具名”,并把线上失败率、耗时、重试次数按这个名字聚合出来?