跳到主要内容

722 篇博文 含有标签「insider」

查看所有标签

Agent 调试器没有断点:为什么追踪优先工作流正在取代单步执行

· 阅读需 11 分钟
Tian Pan
Software Engineer

当你第一次尝试像调试服务那样调试 Agent 时,你会发现以往的肌肉记忆完全派不上用场。你设置了一个假设的断点——虽然 IDE 中没有面板可以放置它,但你在脑海中想象了一个——就在 planner 选错工具的那一步。你使用相同的输入重新运行。这一次,planner 选择了正确的工具。你再次运行。它又选了一个你从未见过的第三种工具。Bug 是真实存在的,你的同事今天早上复现了两次,而你用了十五年的调试器突然间变成了博物馆里的陈列品。

这里失效的心智模型并不是“使用调试器”,而是背后更深层的假设:即一个程序在给定相同输入的情况下,会产生相同的执行过程。现代调试器中的每一项功能——断点、单步跳过 (step-over)、观测表达式 (watch expressions)、条件断点、热重载——都是建立在这种确定性之上的。你暂停执行是因为暂停是有意义的。你向前单步执行是因为下一步是可预知的。你检查一个变量是因为它的值是一个事实,而不是从某种分布中随机抽取的结果。

AI 功能的自带密钥 (BYOK):没人预估过成本的销售驱动型架构重构

· 阅读需 11 分钟
Tian Pan
Software Engineer

你正在对接的采购团队最终会提出一个重置你架构的问题:“我们可以自带模型 API 密钥吗?”回答“可以”能赢得订单。但回答“可以”同时也意味着你的信任边界、成本边界和运营边界发生了转移 —— 而大多数产品团队只有在合同签署、第一个月的使用产生了一个没人知道如何回答的服务工单后,才会发现这一点。

BYOK 在公司内部推销时被视为一个开关。客户粘贴一个密钥,你的代码从保险库(Vault)读取它而不是从你自己的账户读取,然后推理流程照常进行。但这并不是一个开关。这是一场由销售驱动的架构重构,它会波及成本分摊、安全事件响应、可观测性、速率限制、模型版本锁定以及值班问责。那些在没有意识到这一点的情况下就交付产品的团队,最终会在一年后为了修复这些问题而重构整个平台层,而付费企业客户则在焦急等待。

组合性税收:为什么增加工具会让你的规划器性能下降

· 阅读需 11 分钟
Tian Pan
Software Engineer

团队最开始有 5 个工具和一个在生产流量中命中率达 95% 的规划器(planner)。18 个月后,他们有了 51 个工具,而规划器的命中率降到了 26%,原本那 5 个工具能干净利落处理的简单案例——预订会议、查询客户、提交工单——现在有时会路由到错误的工具,因为目录中有三个听起来很像的“替代品”。没有人故意让规划器变差。每一次工具的增加在当时看来都是合理的。这种累积的代价就是“可组合性税”(composability tax),每一个在工具目录增长过程中缺乏淘汰机制的产品都在支付这笔费用。

这笔“税”是一条曲线,而不是悬崖。Berkeley Function Calling Leaderboard 直接测量了这一点:在日历调度任务中,当跨多个领域的工具从 4 个增加到 51 个时,准确率从 43% 下降到了 2%。在客户支持类任务中,GPT-4o 从 58%(单一领域,9 个工具)下降到 26%(7 个领域,51 个工具)。Llama-3.3-70B 在同样的扩张下从 21% 降到了 0%。这种趋势在不同模型和任务类型中不断重复:每增加一个工具,规划器就会在曲线上进一步下滑,而且随着目录变大,边际损害会变得更严重,因为新加入的条目与现有的条目越来越难以区分。

无故障停机情况下的面向客户 AI 质量退化复盘指南

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的状态页是一片绿色。你的错误率为零。你的运行时间仪表盘连续第七个月显示为 100%。然而,在周二上午 9:14,你的客户团队给你转来了一条来自一家财富 500 强客户的消息,上面写着:“我们的团队注意到这周助手的表现变差了。你能告诉我们发生了什么变化吗?”午饭前,你又收到了 12 条类似的反馈。现有的事故沟通手册(incident-comms playbook)无法回答其中任何一个问题,因为那套手册是为停机事故准备的,而现在没有任何东西崩溃。

这就是面向客户的 AI 复盘难题,也是我在将 LLM 功能交付给企业合约的团队中看到的最普遍的差距。可靠性的维度已经从“系统是否在线”转向了“系统是否和上周一样好”,而几乎没有任何沟通基础设施跟上了这一变化。状态页上没有相应的展示块。严重性等级标准(Severity rubrics)没有对其进行评分。支持服务的回复模版默认为“我们发现了一个问题并已解决”,这取决于客户当天的情绪,听起来要么是敷衍,要么是危言耸听。

AI 工程师的前 90 天:一份在六周文档失效期内依然有效的入职指南

· 阅读需 13 分钟
Tian Pan
Software Engineer

新员工打开入职文档。文档指向了十一个月前的一个服务架构图、一个最后更新于十月的名为 “我们的 LLM 技术栈” 的 Confluence 页面,以及一个 “我们使用的模型供应商” Notion 表格。这些文档都没有告诉他们哪个提示词是针对哪种失败模式优化的,哪些评估案例是在哪次事故后添加的,当模型从 4.5 升级到 4.6 时哪个评判模型被重新校准了,或者为什么支持代理的系统提示词有一段谁都不敢动的奇怪的三行前导内容。入职两周后,他们提交了一个 “小的提示词清理” PR,删除了这段前导内容。评估套件通过了。不到一天,生产环境的准确率下降了四个百分点。

标准的新员工入职指南 —— 阅读架构文档、配置电脑、在第二周前完成第一个 PR —— 是为加入服务端的工程师设计的。AI 工程师加入的是一种不同的制品。他们要编辑的不是某个主任工程师写的 5000 行 Go 服务;而是一个经历了 11 次事故和 17 次评估驱动重写的 30 行提示词,而这 30 行代码的意义只存在于团队中两个人的脑子里。你的入职文档无法捕捉到这些,而尝试写一份更长的文档是错误的修复方案。

免费层级流量才是你真实的评估集

· 阅读需 11 分钟
Tian Pan
Software Engineer

针对付费用户群追踪数据进行模型优化的团队,其实是在一个“简单分布”上给自己打分。付费用户已经形成了一套工作流。他们之所以选择这款产品,是因为产品中的某些特质证明了刷信用卡付费的合理性,这意味着当他们进入评估集(eval set)时,已经学会了哪些提示词(prompts)有效,哪些功能给力,以及哪些“坑”不该踩。而免费层用户完全不是这样。他们是匿名的、探索性的,通常带有对抗性,且往往是非英语母语者,正在用第二语言对产品进行压力测试,他们触发了评估集从未涵盖的长尾失败模式。

这种不对称性正悄无声息地吞噬着每一个免费增值(freemium)AI 产品的转化漏斗。团队针对主要从付费追踪数据中提取的精选样本对模型进行评分。而免费层的那些“古怪”追踪数据——那些没有模板、用户正真诚地试图搞清楚产品能做什么的数据——从未被标注,从未进行回归测试,也从未为下一次提示词修改提供参考。模型在付费分布上变得越来越好,但在决定免费用户是否升级的分布上却慢慢变差。

内部评估集:一个无人审查的隐私边界

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 AI 团队所谓的“评估集”(eval set),在大多数发布 LLM 功能的公司中,其实是从生产日志中提取的真实客户对话集合。团队中没有人认为这是一个隐私事件。数据从未离开过集群。没有配置新系统。没有增加供应商。一名工程师写了一个查询,将几千条追踪记录(traces)导出到标注工具中,然后团队就开始根据这些记录对模型输出进行评分。法律团队从未听说过这件事,因为从内部来看,什么都没有改变——原本就存在于同一个数据库中的对话,现在只是被几名工程师和一个裁判模型(judge model)读取了而已。

这就是那个无人审查的隐私边界。客户向你发送消息是为了让你回答他们。他们并不是为了让你拿这些消息去衡量模型才把消息给你的。这两种用途在存储层看起来完全一样,在推理层感觉也一样,但在每一种现代隐私监管制度下,它们属于不同的处理目的——而两者之间的鸿沟,正是下一轮合规阵痛将要降临的地方。

延迟感知工具选择:当“当下的足够好”优于“未来的最出色”

· 阅读需 11 分钟
Tian Pan
Software Engineer

你智能体系统提示词中的工具描述是一个六个月前的评估产物(eval artifact)。它说 search_pricing 返回“带有结构化定价的最新库存数据”,规划器(planner)对此深信不疑,因为自描述调优的那天起,提示词中的任何内容都没有更新过。而实际上,在过去的 40 分钟里,search_pricing 端点的 p95 延迟一直保持在 11 秒,因为上游供应商正在对你的账户进行限流。而那个被提示词描述为“可能略微陈旧”的更便宜的 search_cache 工具,只需 200 毫秒就能返回同样的答案。但规划器还是选择了 search_pricing,因为描述读起来仍和评估时一样,且规划器没有任何关于目前调用这两个工具成本的信号。

这就是静态工具描述的结构性失效。规划器是在根据一个已经发生变化的世界快照做出路由决策。工具选择实际上并不是一个能力问题——大多数生产环境中的智能体都有两三个在回答内容上高度重合的工具——它本质上是一个“等待成本”问题,而等待成本正是你的提示词模板所看不见的东西。

MCP 工具弃用:为什么模型仍然调用旧名称

· 阅读需 10 分钟
Tian Pan
Software Engineer

六周前,你将 get_user_email 重命名为 lookup_contact。新名称已发布,旧的处理程序已移除,变更日志记录了这一点,你的评估集也通过了。然而上周二,一位客户支持工程师联系了你:智能体在上周的大约 3% 的工具调用中返回了错误——tool_not_found: get_user_email。那个已被重命名的名称。那个在实时系统中已经不再对外公开的名称。

先验知识(Prior)具有粘性。你的智能体正在与之对话的模型是在一个语料库上训练的,在这个语料库中,get_user_email 是询问“这个人的电子邮件是什么”的绝大多数规范方式。即使你在推理时传递的 tools 数组中仅列出了 lookup_contact,模型偶尔——在特定的上下文条件下,特别是长追踪(long traces)或错误恢复状态下——仍会退回到它记忆中的名称。直接切换并不能消除长尾效应;它只是将软故障变成了硬故障。

模型迁移的双重账单:被忽视的评测重锚税

· 阅读需 11 分钟
Tian Pan
Software Engineer

每次模型升级都会被当作一种简单的“替换”推销给团队:一行配置更改、在延迟、成本或质量上可衡量的提升,以及几天用于吸收新模型怪癖的提示词微调。采购方案展示了每 token 的差值,工程工单列出了发布阶段,FP&A 团队预记了季度节省。接着,评估分值出炉,却没人认得出来。质量在理应提升的地方毫无波动。曾经达成一致的两个评分员现在分歧达 10 分之多。快照套件显示为红色,但差异看起来只是措辞调整。站会上有人提出了那个本应从迁移计划第一天就该出现的问题:模型到底是在针对什么评分?

这是第二张账单 —— 评估重锚税 (eval re-anchoring tax) —— 且它往往比第一张更昂贵。人工标注的参考分数锚定在旧模型的输出分布上。作为评委的 LLM 评分器针对旧模型的失败模式进行了校准。快照固定装置捕捉的是旧模型的措辞。团队对“优质输出”的直觉是基于旧模型的风格特征训练出来的。在模型替换中,这些都无法完好无损地保留下来。

按客户定制的提示词分支:为什么你的下一次模型迁移是 47 次迁移

· 阅读需 13 分钟
Tian Pan
Software Engineer

我上个月交流过的一位 AI 初创公司 CTO 打开她的笔记本电脑,给我看了一个数字:47。那是目前在生产环境中运行的独立系统提示词(System Prompt)的数量,每个企业客户或每个逻辑分组各占一个。基础提示词在第四个月为一家需要更温和拒绝态度的医疗客户派生(Fork)了一次。然后为一家需要引用的法律客户又派生了一次。接着是为一家金融服务客户派生的,因为他们的合规团队有一份违禁词清单。当时,这些看起来都不是什么大事。每一个都是独立批准的小需求,让大客户经理团队能够顺利签下订单。

两年后,模型提供商宣布了她那些针对旧版本调优的提示词的切换截止日期。她的工程团队直觉反应是对新模型运行评估套件(Eval Suite)。评估套件仅针对基础提示词。基础提示词仍在为 0 号客户提供服务,该客户没有任何覆盖配置,且约占收入的 9%。

Prompt 即文档:当系统 Prompt 成为唯一可信的交付物时

· 阅读需 11 分钟
Tian Pan
Software Engineer

一位产品经理在 Slack 上私聊你,询问当客户要求助手取消订阅时会发生什么。你开始凭记忆输入答案,然后又自我怀疑,于是打开系统提示词读了 30 秒。你粘贴回一份摘要。他们向你道谢后继续忙别的了。三小时后,支持团队问了同样的问题。到了周四,合作伙伴负责人把提示词的截图贴进了交易审查中。

这就是“提示词即文档”(prompt-as-documentation)反模式。当你第一次意识到这种情况发生时,感觉会很棒。你花了六个星期调优的制品,现在成了产品功能的权威真理来源。产品经理在读它,支持团队在读它,销售团队在读它,甚至某个角落的设计师也在读它。你的工作成了支柱,这在以前的服务层代码中从未有过。你可以通过计算有多少不相干的人能凭记忆调出这个文件来证明这一点。