跳到主要内容

14 篇博文 含有标签「llm-engineering」

查看所有标签

上下文窗口不是免费存储:显式驱逐策略的必要性

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数工程团队对待 LLM 上下文窗口的方式,就像早期 Web 开发者对待全局变量:先塞进去,问题以后再说。上下文里堆满了最近 40 轮对话、仓库里的三个完整文件、十几份检索到的文档,以及一个经过六个月集体修改、越来越臃肿的系统提示词。一切看起来都能运行——直到某天突然不行了,而那时已经很难判断究竟是哪里出了问题。

上下文窗口不是堆内存。它更接近于 CPU 寄存器文件:容量有限、单位成本高昂,且其内容直接影响模型执行的每一次计算。当你把寄存器当成草稿纸随意使用而忘记管理时,程序会以各种匪夷所思的方式崩溃。当你把上下文窗口当成草稿纸时,LLM 会以悄无声息且代价高昂的方式退化。

当你的智能体框架成为 Bug 时

· 阅读需 10 分钟
Tian Pan
Software Engineer

高层级智能体框架承诺将三天的集成工作转化为三小时的原型开发。这个承诺是真实的。问题在于接下来发生的事情:在一家开发 AI 驱动的浏览器测试智能体的公司中,工程师们在进入生产阶段六个月后发现,他们花在调试 LangChain 上的时间竟然和开发功能的时间一样多。他们的解决方案很彻底——完全弃用了框架,并回退到模块化的构建块。“一旦我们移除了它,”他们写道,“我们就不再需要将需求转化为符合 LangChain 规范的方案。我们可以直接编码。”

他们并不孤单。大约 45% 尝试使用高层级 LLM 编排框架的开发者从未将其部署到生产环境。另有 23% 的开发者在上线后最终将其移除。这些数字并不意味着框架是糟糕的工具——它们意味着框架是具有特定有用范围的工具,而那个范围比演示中展示的要窄。

工具文档字符串考古学:描述字段是你杠杆率最高的提示词

· 阅读需 13 分钟
Tian Pan
Software Engineer

你的智能体中杠杆率最高的 prompt 并不在你的系统 prompt(system prompt)中。它是你六个月前在某个工具定义下写的那句描述,它随实现代码一起提交,之后就再也没动过。模型在每一轮对话中都会读取它,以此决定是否调用该工具、绑定哪些参数,以及当响应不符合预期时如何恢复。工程师将其视为面向人类的 API 文档,而模型则将其视为一个 prompt。

这两种视角之间的鸿沟,正是最糟糕的工具使用(tool-use)类 bug 的温床:模型调用了正确的函数名,传入了正确的参数,发出了正确的 API 调用 —— 但原因却是错的,场景是错的,或者它放着旁边更合适的工具不用。没有任何异常抛出。你的评估套件依然通过。这种退化(regression)只会表现为衡量智能体是否真正起到帮助的指标在缓慢下降。

标注流水线是生产级基础设施

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数团队对待标注流水线的方式,就像对待他们 2019 年的 CI 脚本一样:它能运行,大部分时候如此,而且没人想去碰它。一个带有颜色标记行的共享电子表格。一个将任务路由到 Slack 频道的 Google 表单。三名承包商异步工作,在一个讨论串中对比笔记。

接着,一个模型发布后质量下降,评估(eval)以一种令人困惑的方向退化,事后分析(post-mortem)最终揭示了显而易见的事实:标签错了,而且没人构建任何东西来检测它。

标注不是一个数据问题。它是一个软件工程问题。那些以此方式对待它的团队——使用队列、模式(schemas)、监控和结构化的分歧处理——构建的 AI 产品会随着时间的推移而改进。而那些不这么做的团队则陷入了无法解释的重新标注循环。

上下文窗口悬崖:当你的智能体在任务中触及上限时究竟会发生什么

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的智能体完美地完成了第一步到第六步。第七步与第二步相矛盾。第八步幻觉出了一个并不存在的工具。第九步自信地提交了垃圾内容。没有程序崩溃,没有抛出错误。智能体只是忘记了它正在做什么 —— 并且无论如何都在继续。

这就是上下文窗口悬崖(context window cliff):即 AI 智能体积聚的上下文超过其有效推理能力的时刻。它不会优雅地失败,也不会寻求帮助。它会基于部分信息做出自信但错误的决策,而你直到损失造成才会察觉。

对齐税:当安全调优损害你的生产 LLM

· 阅读需 11 分钟
Tian Pan
Software Engineer

你对模型进行了安全微调。评估套件显示它以 98% 的比率拒绝有害请求。然后你将它部署到生产环境,你的医疗文档助手开始对常规临床术语含糊其辞,你的法律研究工具拒绝总结涉及暴力的判例法,你的代码生成流水线给每个 shell 命令包裹了三层警告。完成率下降了 15%。用户满意度暴跌。模型更安全了——但也更没用了。

这就是对齐税:安全训练对语言模型施加的可衡量的任务性能退化。每个交付 LLM 驱动产品的团队都在支付这笔税,但大多数团队从未量化过它——更少有人知道如何在不牺牲所需安全属性的前提下降低它。

抽象反转问题:当 AI 框架迫使你在错误的层级思考

· 阅读需 10 分钟
Tian Pan
Software Engineer

在每个 AI Agent 项目中都有一个特定的时刻——框架不再帮忙了。你发现自己花在阅读框架源码上的时间比写业务功能还多的时候,你就知道这个时刻到了。那些本该帮你屏蔽复杂性的抽象,反而成了复杂性的主要来源。

这就是抽象反转问题:当一个框架迫使你在高级抽象之上重新构建底层原语——而这些高级抽象本来就是为了隐藏这些底层原语而设计的。这个术语来自计算机科学,它描述的是当抽象层缺少你需要的逃生通道时会发生什么:你最终不得不在抽象之上重新构建底层能力,代价更高,用起来也更别扭,还不如一开始就不用这个抽象。

在 AI 工程领域,这个问题已经泛滥成灾。团队采用编排框架期望加快速度,几周内就撞墙,然后花几个月时间来绕过这个本该加速他们的工具。

N+1 查询问题已经感染了你的 AI Agent

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 AI Agent 刚刚为了回答一个只需要两次调用的问题,进行了十二次 API 调用。你没有注意到这一点,因为工具调用没有 EXPLAIN ANALYZE,没有 ORM 分析器来标记问题,而且 Agent 最终还是得到了正确答案 —— 只是晚了两秒钟,且 Token 预算超支了三倍。

这就是 N+1 查询问题,它已悄然从数据库层迁移到了你的 Agent 工具调用层。坏消息是:这种故障模式与 2010 年代毒害 Web 应用程序的模式完全相同。好消息是:那个时代的解决方案几乎可以直接移植过来。

AI Agent 的单位经济效益:自主作业何时能真正省钱

· 阅读需 12 分钟
Tian Pan
Software Engineer

你的 AI Agent 在开发阶段的成本比你想象的要低,但在生产环境中的成本却远超你的预料。API 账单——大多数团队针对其进行优化的指标——仅占在生产环境中运行 Agent 真实总成本的 10–20% 左右。其余部分则隐藏在大多数工程预算从未明确建模的层级之中。

这很重要,因为决定大规模部署 Agent 并不是一个真正的技术决策。而是一个单位经济效益决策。那些基于不完整成本模型做出决策的团队,正是六个月后报告投资回报率 (ROI) 为负的那些团队。

合成训练数据质量崩溃:反馈循环如何摧毁你的微调模型

· 阅读需 12 分钟
Tian Pan
Software Engineer

你使用 GPT-4 生成了 50,000 个合成的指令遵循示例,在这些示例上微调了一个较小的模型并将其部署,结果看起来非常棒。六个月后,你的团队重复了这一过程——只不过这次为了节省成本,你使用微调后的模型来生成示例。第二个模型的评估结果略低,但在噪声范围内。你以同样的方式微调了下一个版本。到第四次迭代时,你的模型输出呈现出一种奇怪的同质化。用户反馈它听起来像机器人。它在处理任何不符合狭窄模板的内容时都显得很吃力。你最强大的微调模型已经变成了最糟糕的一个。

这就是模型崩溃(model collapse)——当大语言模型(LLM)使用其他 LLM 生成的数据进行训练时,会发生渐进式的、自我强化的退化。这并非理论上的风险。它是一种有据可查的故障模式,具有可衡量的机制,并且越来越有可能影响那些在没有仔细思考反馈动态的情况下就将合成数据生成常态化的团队。

为智能体编写工具:ACI 与 API 同等重要

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数工程师对待智能体工具的方式与编写 REST 接口或库函数如出一辙:清晰地暴露功能、记录参数、处理错误。这对人类来说是正确的直觉。但对于 AI 智能体(AI Agents)来说,这完全是错误的。

智能体使用的工具是以非确定性的方式被消耗的,它被逐个 Token 解析,并由一个对上周二使用过什么工具没有持久记忆的模型来选择。你编写的工具 Schema 并不是文档——它是运行时提示词(runtime prompt),在推理时被注入到模型的上下文中,塑造着智能体做出的每一个决策。每一个字段名称、每一段描述、每一个返回值的结构都是一个设计决策,具有可衡量的性能影响。这就是智能体-计算机接口(ACI,Agent-Computer Interface),它值得你像对待任何关键的面向用户的界面一样投入工程精力。

为什么你的 AI Agent 应该编写代码而不是调用工具

· 阅读需 13 分钟
Tian Pan
Software Engineer

大多数 AI 智能体之所以昂贵,是因为一个细微的架构错误:它们将每一个中间结果都视为要反馈给模型的消息。每一次工具调用都变成了 LLM 上下文窗口的一次往返,而当一个中等复杂度的任务完成时,你已经为处理相同的数据支付了五次、十次、甚至二十次的费用。一个在三个分析工具之间传递的 2 小时销售录音,可能在路由上就花费你 50,000 个 token —— 而这还不是为了分析,仅仅是为了路由。

有一种更好的方法。当智能体编写并执行代码而不是逐个调用工具时,中间结果会保留在执行环境中,而不是上下文窗口中。模型看到的是摘要和过滤后的输出,而不是原始数据。这种差异不是渐进式的 —— 在实际工作负载中,token 消耗量减少了 98–99%。