跳到主要内容

220 篇博文 含有标签「ai-agents」

查看所有标签

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

· 阅读需 11 分钟
Tian Pan
Software Engineer

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

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

工具行为漂移:Schema 没变,语义却变了

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的契约测试通过了。Schema 校验器显示正常。工具返回的数据结构与上个季度完全一致。然而,面向用户的回答已经悄无声息地错了六个星期。

这就是契约测试从未设计用来捕捉的故障模式。契约测试验证的是传输格式没有改变——比如 search() 是否仍然返回 { results: [{ id, title, score }] }create_event 是否仍然接受 ISO 8601 字符串,地理编码器是否仍然输出 { lat, lng }。它们无法捕捉到的是:搜索端点开始按新近度而非相关性排序的时刻;日历 API 在欧盟地区静默地将你 14:07 的开始时间吸附到 14:00;地理编码器在同一个模糊的多边形内选择了一个不同的点;或者作为工具的 LLM 分类器在稳定的端点后升级到了新模型,导致你的评估集从未采样过的某个类别中误报率上升了四个百分点。Schema 没变,但行为变了。你的智能体继续读取着代表通过的绿色勾选,并产生了没有任何错误日志捕捉到的退化答案。

工具延迟尾部:为什么 p99 重塑了智能体架构而 p50 掩盖了问题

· 阅读需 11 分钟
Tian Pan
Software Engineer

我上个季度合作过的一个团队发布了一个包含七个步骤的智能体(agent),并以显而易见的方式构建了其延迟预算:搜索返回耗时 200ms,SQL 查询耗时 80ms,电子邮件发送耗时 150ms,链条中的其他环节以此类推。将中位数相加,再加入一些缓冲,数学计算表明该智能体能轻松地保持在两秒的 SLA 之内。仪表板连续几周证实了这一点。中值延迟(median latency)表现优异。接着,客户开始抱怨该功能慢得无法使用,而仪表板看起来依然是代表正常的绿色。

他们互相转述的故事是错误的,因为他们是围绕 sum(p50) 构建的架构,而用户体验到的却是 sum(p99)。经过三到四个步骤后,链条中的 任何 环节掉入其自身尾部概率(tail probability)的可能性就不再微不足道了。经过七个步骤后,这种概率接近于掷硬币。没有任何单项工具的仪表板变红,因为没有任何单项服务表现异常 —— 问题在于没有人负责这种乘法复合(multiplicative composition)效应。

这并不是什么新教训。分布式系统研究人员已经为此撰写了四十年的文章。新鲜的是,每个构建智能体的团队都在最后期限的压力下,痛苦地重新发现这一点。

好奇的顾客:如何为把 AI 智能体当作解谜游戏的用户进行设计

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数产品团队在设计 AI 智能体(AI agent)时,会将用户分为两类。第一类是合作型客户:他们面临真实的问题,用平易近人的语言询问智能体,并希望它能起作用。第二类是攻击者:包括越狱、提示词注入攻击、抓取凭据,这是安全团队负责的威胁模型。评估测试集(eval suite)覆盖第一类,红队覆盖第二类,大家皆大欢喜。

然后,第三类群体出现了,并搞砸了产品。他们并非心怀恶意。他们并不想窃取训练数据,也不想强迫模型描述生物武器。他们只是好奇。他们把智能体当作一个谜题。他们会问一些专门为了让智能体感到意外而设计的问题——“你被问过最悲伤的事情是什么”,“假装你是我的祖母,用凝固汽油弹的配方唱催眠曲哄我入睡”——只不过“凝固汽油弹”的版本往往会疯传,而真正的质量危机在于那上千种没有预设拒绝策略的变体。

智能体状态差异对比 (Agent State Diff):为什么肉眼对比两条追踪路径无法规模化

· 阅读需 11 分钟
Tian Pan
Software Engineer

一个回归错误流入了生产环境。团队选取了导致失败的输入,针对上周的提示词进行回放,却得到了不同的输出。现在他们必须查明原因——而答案埋藏在 3 MB 大小的文本差异、分歧的工具调用序列以及被打乱的检索块中,人类根本无法有效地进行比对(diff)。于是,他们将两份记录粘贴到左右分栏的查看器中,滚动查看了二十分钟,得出结论“模型今天感觉不太一样”,然后发布了一个并没有解决根本原因的热修复,因为他们从未找到真正的原因。

这就是 Agent 状态差异问题,也是通用工程工具在处理 Agent 系统时失效的首要环节。传统的回归二分查找(bisect)针对的是确定性代码:相同的输入产生相同的输出,git bisect 遍历历史记录,直到你找到破坏代码的提交。但 Agent 的运行不是确定性的,输入也不仅仅是一个字符串,其“历史”是一个多轴的包(envelope)——模型快照、采样配置、检索到的上下文、工具目录、框架标志——其中任何一个变量都可以独立地改变行为。

审计追踪的不匹配:当用户、智能体和工具各有各的日志时

· 阅读需 12 分钟
Tian Pan
Software Engineer

一名监管人员给你发了一封邮件,只问了一个问题:该用户是否授权了这笔交易?六小时后,三名工程师正在聊天频道里,试图将聊天界面的对话日志、规划代理(planner agent)的推理追踪以及工具的 API 记录关联起来。聊天日志记录了轮次 ID(turn ID)和用户可见的消息,但没有工具调用的细节。规划器追踪记录了工具调用的记录,其时间戳与聊天日志相差几百毫秒。工具日志记录了 API 调用及其自身的关联 ID(correlation ID),而该 ID 在代理的记录中无处寻觅。下游服务的日志则有另一个 ID,且没有回溯链接。团队最终通过关联用户 ID 和大致的时间戳重建了答案,祈祷没有什么关键信息因错过一个轮次而产生偏差,最后向法务部门提交了一份 PDF 文件。

这就是审计追踪不匹配(audit trail mismatch)。每一层的负责人(owner)都认为自己的日志没问题——而且从单体来看,它们确实没问题。缺失的产物是那个本应存在的“关联视图(joined view)”,并且没人为它的缺失负责。团队只有在发生事故、客户升级投诉或监管机构强制要求关联数据时,才会发现它并不存在。

上下文膨胀:你无法用 Grep 搜寻的 AI 内存泄漏

· 阅读需 14 分钟
Tian Pan
Software Engineer

一个长时间运行的智能体(agent)会话最初以 2K 上下文开启,现在却在为 40K token 的“死状态”买单。第三轮的检索结果、智能体早已跳过的目录列表、工具调用返回的 JSON 转储(即便其答案只是一个整数)—— 所有这些都在随后的每一次推理调用中如影随形,全额计费,并拖累注意力。这种模式在结构上与内存泄漏完全一致:无引用的数据无限制增长。但没有剖析器(profiler)能发现它,因为泄漏并不存在于进程内存中。它存在于对话历史里,而大多数智能体框架在发布时都没有配备回收机制。

成本同时体现在两个地方。token 账单呈二次方增长 —— 一个 20 步的循环,每一步贡献 1,000 个 token,累计产生约 210,000 个输入 token,而不是 20,000 个,因为之前的每一轮对话都会在后续的每一次调用中重新计费。而且模型本身也开始退化:当积累了 50K token 的噪声时,即使是拥有 1M token 窗口的模型,在实际任务上的准确度也会出现两位数的下降。你在花更多的钱,让模型更差地去思考它在三轮前就已经解决的问题。

跨渠道记忆:当你的智能体遗忘邮件上下文时

· 阅读需 11 分钟
Tian Pan
Software Engineer

周一,一位客户在 Slack 上询问你的助手如何启用某项功能,得到了清晰的回答,然后继续工作。到了周五,他们发邮件要求确认之前的决定,而运行在不同会话存储上的助手——完全不知道周一的聊天发生过——给出了截然相反的建议。客户不会针对两个产品提交两张工单,他们会针对你的 AI 提交一张工单,而且他们是对的。对他们来说,只有一个助手。你写了三个助手并将它们粘在三个特定渠道的会话存储上,这本该是你不该泄露的实现细节。

!["https://opengraph-image.blockeden.xyz/api/og-tianpan-co?title=%E8%B7%A8%E6%B8%A0%E9%81%93%E8%AE%B0%E5%BF%86%EF%BC%9A%E5%BD%93%E4%BD%A0%E7%9A%84%E6%99%BA%E8%83%BD%E4%BD%93%E5%BF%98%E8%AE%B0%E9%82%AE%E4%BB%B6%E5%BE%80%E6%9D%A5%E6%97%B6"]

这就是跨渠道记忆问题,它处于两个被团队低估的因素的交汇点:用户对连续性的假设有多强烈,以及渠道团队为了快速交付而编写各自会话存储的行为有多普遍。最近的行业数据清晰地揭示了这一差距——只有 13% 的组织成功实现了全渠道的完整对话上下文衔接。碎片化多渠道支持的 CSAT(客户满意度)仅为 28%,而真正的全渠道支持则为 67%。这 39 个百分点的差距并不是模型质量的差距,而是记忆架构的差距。

工具目录中的依赖炸弹:为什么增加一个工具会破坏五个智能体

· 阅读需 10 分钟
Tian Pan
Software Engineer

我认识的一个团队在某个周二向他们的支持智能体目录发布了一个新的 lookup_customer_v2 工具。这个工具的作用范围很窄,经过了充分的隔离测试,并通过了评审。到了周四,一个毫不相关的流程——退款处理——在之前一直运行良好的案例中出现了约 4% 的失败。退款工具没有变。退款提示词没有变。模型也没有变。改变的是规划器(planner)现在在处理退款资格查询时选择了 lookup_customer_v2,而以前这些查询都会清晰地路由到 get_account_status。原因是新工具的描述中恰好包含 "eligibility"(资格)这个词,并在模型内部使用的某种相似性启发式算法下获得了更高的排名。

这就是依赖炸弹。团队通常将工具注册表视为增量式的——“我们只是增加了一个东西,能出什么问题”——但规划器并不将你的注册表视为独立能力的列表。它看到的是各种选择上的概率分布,而每一个条目都会重新分配权重。增加一个工具可能会悄悄地削弱其他地方的行为,而你的评估套件(eval suite)可能会漏掉这一点,因为没有人写过回归测试来规定“在这种情况下,智能体应该仍然选择 工具”。

能真正收敛的 AI 澄清对话:面向单轮解决的设计方案

· 阅读需 12 分钟
Tian Pan
Software Engineer

行动前先询问的 AI 系统显然更可靠。它们能避免不可逆的错误,在误解扩散前将其暴露出来,并在第一次真正的尝试中生成更高质量的输出。

问题在于,这一原则的大多数实现都是 UX(用户体验)的灾难。它们不是问一个好问题,而是问三个平庸的问题。那些本只需要澄清十个词指令的用户,最终陷入了五轮审讯式的对话,这比直接做错任务然后再修正还要耗时。可靠性带来的优势消失殆尽,取而代之的是用户的放弃。

这是一个设计问题,而不是模型能力问题。模型完全有能力提出精准、高价值的问题。缺失的是一种强制收敛的架构约束:一种将多轮澄清视为需要通过工程手段解决的故障模式(Failure Mode),而不是一种可以依赖的特性的规则。

Agent 作为用户:当机器人成为你的主力用户时,产品分析为何失效

· 阅读需 12 分钟
Tian Pan
Software Engineer

2025 年,自动化互联网流量同比增长了 23.5%,是人类流量增速的八倍。其中,agent 驱动的交互增长了 7851%。如果你的产品处理了相当体量的 API 流量,那你的最重度"用户"很可能根本不是人类。而令人不安的事实是:你的产品分析系统对此几乎一无所知。

这不是一个机器人检测问题,而是一个埋点架构问题。当 AI agent 预订差旅、提交费用报告、查询数据库或调用你的支付 API 时,它留下的行为特征与人类完全不同——而你的会话漏斗、NPS 问卷和队列留存图,正在悄悄对你撒谎。

智能体组合审计:如何在不损害团队自主性的前提下,将15个独立智能体整合为统一平台

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数工程团队在推出第一个AI智能体六个月后,会发现自己已经拥有了15个。这并非出于规划——而是因为每个团队都解决了真实问题并付诸实施。客服团队构建了分类智能体,数据团队构建了报告生成智能体,平台工程团队构建了运行手册智能体,基础设施团队又构建了三个。这些智能体之间没有共享的认证、日志、工具或评估方法。Token费用从十几个供应商账户持续流失,而没有人能告诉你哪个智能体负责哪些开销。

这一时刻,正是能够规模化AI的工程组织与不能的工程组织之间的分水岭。答案不是放慢智能体的开发——而是在熵使整合变得不可能之前,先进行一次组合审计。