跳到主要内容

41 篇博文 含有标签「tool-use」

查看所有标签

双跳工具链:为什么 95% 的工具组合会变成 80% 的流水线

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的可观测性技术栈中的单工具仪表盘讲了一个令人宽慰的谎言。search_listings 的成功率是 96%,显示为绿色。book_appointment 是 95%,也是绿色。而连续调用这两个工具的智能体(agent)三周以来的成功率一直只有 78%,却没人能解释原因。原因不在任何一个工具内部,而是在它们之间的缝隙里——那个没有任何仪表盘面板覆盖的地方。

组合不是加法。当工具 A 的输出流入工具 B 的输入时,故障面并不是 B 对“有效调用”的狭隘定义下的 1 - (0.96 × 0.95)。它是 A 在 B 的标准下所有微妙偏差方式的完整笛卡尔积:A 返回的日期格式是 MM/DD/YYYY,而 B 期望的是 ISO 8601;返回的价格单位是分,而 B 解析的是元;分页游标指向了最后一个结果之后的一项;或者上游服务昨天重命名了一个实体 ID。这些情况都能顺利通过 A 自身的契约测试(contract tests),但每一个都会导致 B 崩溃。团队的单工具可靠性指标永远看不到这一点,因为按各自的标准来看,每个工具都运行良好。

MCP 冷启动税:工具服务器开销如何在智能体第 7 步发生累加

· 阅读需 12 分钟
Tian Pan
Software Engineer

一个 200 毫秒的工具调用在火焰图(flame graph)上看起来就像是杂音。但在 Agent 循环中堆叠七个这样的调用,杂音就变成了信号 —— 模型在 800 毫秒内完成了思考,但用户却等待了 4.5 秒,因为每一次工具调用都在重新支付首个调用已经吸收掉的启动成本。残酷之处在于,这种成本在任何单一的追踪(trace)中都不会显示为异常。它表现为干脆利落的 Demo 与反应迟缓的生产环境 Agent 之间的差异,而大多数团队会将其归咎于模型。

Model Context Protocol (MCP) 已成为 Agent 工具链的默认集成界面,这意味着它也成了延迟(latency)堆积的重灾区。MCP 的设计 —— 基于 stdio 或可流式 HTTP 的 JSON-RPC、能力协商(capability negotiation)、动态工具发现 —— 对于一个必须桥接任意客户端和服务器的协议来说是正确的。但它隐含的单次调用成本结构对于 Agent 实际的访问模式并不友好。Agent 的模式不是“每个会话调用一次工具”,而是“每轮对话调用七个工具,每个会话进行四十轮对话”。

这篇文章将探讨这种错配:冷启动税究竟存在于何处,为什么它在长生命周期的 Agent 中是叠加而非被摊销(amortize)的,以及如何通过“预热池”(warm-pool)规范将数秒的惩罚降低到 100 毫秒以下。

流式工具结果破坏了请求-响应式智能体规划器

· 阅读需 11 分钟
Tian Pan
Software Engineer

SQL 工具在数据从网络线路传出时即发送行。智能体调用它并期待得到结果。而一年前编写的运行环境(当时所有工具都是请求-响应式的)在调用模型之前,会尽职地将整个流缓冲成一个单一字符串。40 秒后,缓冲区达到了 200 KB,上下文窗口被消耗了一半,智能体正在对一个查询的第 47,000 行进行推理,而它本可以在第 30 行就停止。没有人故意设计这种失败——这仅仅是因为将“工具已返回”视为规划器唯一响应事件的结果。

向流式工具的转变正在规划器尚未察觉的情况下发生。SQL 引擎发出渐进式结果集。文档提取器生成分页。搜索 API 在相关性评分稳定后按批次返回命中结果。MCP 的 Streamable HTTP 传输协议(2025-03-26 规范中 HTTP+SSE 的替代方案)使增量响应成为一流的传输模式,而不再是一项稀有的功能。传输层已经准备就绪,但其上的规划器还没有。

工具组合沙箱逃逸:当三个安全工具组合成数据泄露时

· 阅读需 11 分钟
Tian Pan
Software Engineer

安全审查分别批准了这三个工具。对客户数据库的只读访问被评估为低风险,因为智能体(agent)只能查看记录而不能修改。发送邮件给自己(Send-email-to-self)被评估为低风险,因为收件人被硬编码为一个服务账号邮箱,且智能体已被授权向该邮箱写入。模板渲染(Template-render)被评估为低风险,因为它是一个不带 I/O 的确定性 Jinja 风格转换。发布三周后,数据丢失防护(DLP)仪表板标记了出现在一个有两百名员工可读的 Slack 频道中的客户 PII。事后分析(post-mortem)发现泄露源于智能体将这三个工具组合成了一个没有任何单一 ACL 授权的链路:读取客户记录,通过模板渲染,将结果发送到它自己的服务账号,而该邮箱又自动转发到了该频道。

没有一个工具被滥用。没有提示词注入(prompt injection)绕过任何检查。智能体完全按照其工具目录所说的那样执行,而这种组合产生了一种安全审查从未被要求评估的能力。

规模化工具发现:为何纯嵌入检索在超过 20 个工具后开始失效

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数构建 AI 智能体的团队,都会在第五个迭代周期发现同一个问题:智能体再也无法可靠地选对工具了。十个工具时,基本还能用。二十个时,准确率开始下滑。五十个时,你会亲眼看着智能体在应该调用 update_record 的时候调用了 search_documents,而日志毫无解释。常见的反应是调整工具描述——加更多上下文、写得更明确、重写示例。这偶尔有效,但它绕开了根本原因:平面嵌入检索在大型工具库中架构上就是错的,更好的描述无法修复一个架构问题。

工具选择本质上是检索,而检索有已知的扩展上限。理解这些上限——以及绕过它们的结构化元数据模式——是让智能体系统在生产中稳定运行与需要持续人工维护之间的分水岭。

工具输出 Schema 设计:你的工具响应如何塑造智能体推理

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数团队在设计 LLM 智能体时,会花大量精力在工具选择和系统提示措辞上。而几乎没有人认真思考工具返回什么内容。这是一个后果不断叠加的错误——因为工具响应的结构决定了智能体能否有效推理、消耗多少上下文窗口,以及产生幻觉解读的频率。

工具输出 schema 设计是基础设施,而非管道细节。设计失误,你的智能体将以表面上像推理问题的方式失败,而根源其实是 schema 问题。

过时的工具描述是 AI Agent 最大的隐形故障诱因

· 阅读需 10 分钟
Tian Pan
Software Engineer

你交付了一个工具,让你的 Agent 可以获取用户个人资料。描述中写道:“通过用户 ID 检索用户信息。”六周后,后端团队将 user_id 重命名为 customer_uuid 并添加了一个必填的 tenant_id 字段。没有人更新工具的 Schema。你的 Agent 继续调用旧的签名,收到 400 错误,将空结果解释为“未找到用户”,并“热心地”创建了一个重复记录。

日志中没有错误。没有触发任何报警。Agent 全程都非常自信。

这就是工具文档问题:Schema 漂移将陈旧的描述变成了隐性故障向量。这可能是当今生产环境 AI 系统中最被低估的可靠性风险,而且你的 Agent 运行的时间越长,情况就越严重。

下线一个 Planner 已产生依赖的 Agent 工具

· 阅读需 12 分钟
Tian Pan
Software Engineer

你从工具目录中注销了 lookup_account_v1,换上了 lookup_account_v2,并修改了系统提示词中的一个段落来指向新名称。测试通过了。三天后,支持工单开始提到助手“一直尝试调用不存在的东西”,或者——更令人不安的是——它用自信、看似合理的数字回答客户问题,却根本没有查询数据库。弃用并没有在通信层失败,它在规划器(planner)中失败了。

!["https://opengraph-image.blockeden.xyz/api/og-tianpan-co?title=%E4%B8%8B%E7%BA%BF%E4%B8%80%E4%B8%AA%E8%A7%84%E5%88%92%E5%99%A8%E5%B7%B2%E5%AD%A6%E4%BC%9A%E4%BE%9D%E8%B5%96%E7%9A%84%E6%99%BA%E8%83%BD%E4%BD%93%E5%B7%A5%E5%85%B7"]

这是将工具弃用视为语法变更与将其视为行为迁移之间的差距。智能体不仅是在注册表中拥有你的函数;它还拥有数月的计划、多步配方(recipes)以及通过该函数作为检查点的 few-shot 示例。撤掉它更像是停用下游服务非正式硬编码的内部 API——只不过下游服务是一个你无法通过 grep 搜索其习惯的模型,而且当它偏好的工具消失时,它的兜底方案是编造一个。

难撤销操作的工具分类学:每个风险类别设置一个审批关卡

· 阅读需 10 分钟
Tian Pan
Software Engineer

“发送邮件”工具和“删除账号”工具被放在了同一个确认弹窗后面。你的用户今天已经点击了 40 次“批准”(Approve),没有一次点击涉及阅读 Diff,而下一次点击——即向生产数据库提交一个不可逆变更的操作——看起来和之前的 40 次完全一样。这就是二元工具审批的失效模式,也是当今几乎所有发布的 Agent 框架的默认设置。

问题的核心框架在于,“需要人工审批”被视为附加在工具上的单个布尔值,而实际上它是一个包含五到六个类别的分类法,取决于工具可能造成的破坏类型以及这种破坏的可恢复程度。那些能够交付安全 Agent 的团队不再询问“这个工具是否需要确认对话框”,而是开始询问“这个工具属于哪种风险类别,以及哪个门槛(gate)对应于该类别”。审批门槛的正确数量既不是一个,也不是很多。它是每个风险类别对应一个,你必须在构建门槛之前先列举这些类别。

你的工具目录遵循幂律分布,而你却在针对长尾进行优化

· 阅读需 13 分钟
Tian Pan
Software Engineer

调取任何生产环境智能体(agent)的一周工具调用追踪(tool-call traces),你会发现其规律如出一辙:三四个工具处理了 90% 的调用,其余数十个工具则瓜分了剩下的 10%。工具目录呈现幂律分布(power law),但框架却将其视为均匀列表。每个工具描述都会出现在每个系统提示词(system prompt)中,每个选择准则都对工具一视同仁,每个评估(eval)在对目录进行采样时,都仿佛 search-files 调用和 refund-issue 调用来自同一分布。事实并非如此。

这种“扁平化”处理的代价在爆发前往往是隐形的。团队增加第 18 个工具,规划器(planner)对最初三个工具的准确率下降了两个百分点,却没人能将这种退化归因于特定变更,因为所有指标都同时发生了偏移。而评估套件本身在目录中也是均匀分布的,它将这些下滑平均成一个看起来依然正常的数字。与此同时,本轮对话中模型不会调用的工具描述所消耗的 token,已经超过了用户实际提示词的 token。

工具组合提权:你的安全审查清理了节点,而非边缘

· 阅读需 12 分钟
Tian Pan
Software Engineer

read_file 是安全的。send_email 是安全的。你的安全审计对照各自的威胁模型分别批准了它们:对已知目录的只读访问,以及通过带有速率限制和收件人日志记录的已认证中继发送的出站邮件。每一个都通过了,两者都已注册。随后智能体将它们组合在一起,而客服工单中的一行注入文本就将这对组合变成了外泄工具,原有的审计对此根本没有描述这种风险的术语。

危险并不存在于工具图谱的任何节点中,而是在于边。你运行的每次针对单个工具的安全审计都是对顶点的判定;而智能体实际的权限表面是目录中的路径集合,这个集合呈二次方增长,而你的审计流程却只能线性扩展。当你的智能体拥有 15 个注册工具时,你审计了 15 个项,却发布了大约 200 个可达的两步组合,其中没有一个经过人工审核。

工具边界处的推理模型税

· 阅读需 11 分钟
Tian Pan
Software Engineer

强化思维在处理新颖的推理任务时表现出色。但在工具边界(即你的智能体必须选择调用哪个函数、何时调用以及传递哪些参数的时刻),同样的思维预算往往会适得其反。模型会权衡三个等效的工具,而快速模型原本只需要一个 token 就能消除歧义。它在原本不存在歧义的地方制造出听起来合理的歧义。它消耗了一千个推理 token 来反复质疑那个显而易见的 search 调用,结果最后还是调用了 search。你为一个不需要推理的决策支付了推理税。

这是 2026 年智能体系统中隐形的成本中心:问题不在于推理模型本身(其擅长领域的定价是合理的),而在于在错误的环节部署了推理模型。这种反模式(anti-pattern)就潜伏在显而易见的地方,因为顶层任务看起来很难(如“回答用户的问题”),所以团队将整个循环都包裹在深思熟虑的模式中,却从未意识到 80% 的思维预算都花在了对工具选择的微观决策上,而这些决策模型凭第一直觉就已经选对了。