跳到主要内容

145 篇博文 含有标签「prompt-engineering」

查看所有标签

动态系统提示词组装:请求时可组合的 AI 行为

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数团队一开始都用一个单一的、庞大的系统提示词。在演示时效果不错。然后产品不断增长:你添加了付费用户层级、企业客户的合规模式、模型可以调用的新工具,以及增长团队想要 A/B 测试的功能开关实验。所有这些都被塞进同一个提示词里。六个月后,你有了 4000 个词的指令,没有人能完全理解,编辑某个部分时行为会不可预测地改变,而调试过程不过是"改点什么看看会发生什么"。

大多数团队会转向可组合的、动态组装的系统提示词——在请求时从模块化组件构建提示词,而不是维护一个静态文本文件。这是一个合理的架构直觉,但实现的复杂度比看起来要大得多。可组合提示词引入了一类静态提示词根本不存在的新型故障模式。

为什么你的 AI 听起来不对劲,即使技术上完全正确

· 阅读需 10 分钟
Tian Pan
Software Engineer

某物流聊天机器人收到了一位客户的消息——他的包裹已经丢失一周了。机器人的回复是:"我没有被训练来关心这件事。"从事实角度看,这完全准确:系统正确解析了查询,正确识别出无法路由处理该问题,也正确传达了其局限性。这个答案在每一个可量化的维度上都是技术正确的。但它同时也是一场产品灾难。

这就是语域问题——而这几乎肯定是你的评估套件没有在衡量的失效模式。

系统提示的措辞决定智能体的风险偏好

· 阅读需 10 分钟
Tian Pan
Software Engineer

有一件事看似不该令人意外,但实际上出乎意料:当你告诉智能体"避免犯错"与"优先保证准确性"时,你给出的并不是同一条指令。在模糊决策点上,可观测到的行为存在可测量的差异——以损失规避框架提示的智能体更多地回避、升级和放弃端到端任务完成;以收益寻求框架提示的智能体完成更多任务,但在决策边界处会引入更多错误。这种差异并非哲学层面的;它会体现在评估日志中。

这就是智能体的行为经济学,而大多数工程团队尚未系统地思考过这个问题。他们把系统提示当作文档来写——描述智能体是什么——而实际上,系统提示是一种决策塑造工具,无论作者是否有意为之,它都在编码一种风险立场。

提示词版本管理问题:为什么你的提示词变更是未被追踪的生产风险

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数团队处理提示词变更的方式,就像他们在2008年处理配置文件变更一样:编辑字符串,重新部署,然后祈祷。没有版本标签,没有测试套件,没有回滚计划。区别在于,配置文件变更很少会改变整个产品的语义行为——而提示词变更几乎总是会这样做。

如果你发布过面向客户的LLM功能,你可能已经经历过这种情况:为了"改善"语气而编辑了系统提示词,将其与无关的错误修复一起部署,三周后却不知道为什么用户满意度下降了。提示词才是罪魁祸首,但你根本没有办法知道这一点。

零样本之墙:为什么上下文示例在生产规模下失效

· 阅读需 9 分钟
Tian Pan
Software Engineer

大多数团队发现“零样本墙”(zero-shot wall)的过程都如出一辙:一个新的边界案例导致模型出错,他们向提示词(prompt)中添加一个示例,问题解决了。三个月后,他们已经累积了 40 个示例,消耗了 6,000 个 token 的上下文,性能指标数周没有变化,而那个清楚每个示例来源的提示词工程师刚刚离职了。

少样本提示(Few-shot prompting)非常具有诱惑力,因为它见效快。你观察到一个失败案例,添加一个演示示例,失败就消失了。反馈循环很紧凑,而且胜利感觉是无成本的。你没有注意到的是,随后的每一个示例带来的收益都在递减——到某个阶段,你为了那些几乎可以忽略不计的改进,付出了大量的 token、延迟和认知开销。

这就是“零样本墙”:它不是性能断崖式下跌的硬限制,而是一个收益锐减的区域。在这个区域,上下文学习(in-context learning)对于你的任务已经达到了天花板,剩下的唯一手段就是微调(fine-tuning)。

200 Token 的系统提示词如何击败你的 4000 Token 提示词

· 阅读需 11 分钟
Tian Pan
Software Engineer

我合作过的一个团队花了六个月的时间,将一个系统提示词(system prompt)调整到大约 4000 个 token。这是他们的镇店之宝——通过不断累积边缘情况处理、格式规则、人设指令、回退行为以及十几个 few-shot 示例而精心打造。后来,一名初级工程师加入,问为什么提示词这么长,并用一个下午的时间重写了它。新版本只有 200 个 token。在他们现有的评估集上,它的得分高出了 4 分。运行成本也降低了 40 倍,而且速度明显变快。

这并不是一个关于神奇短提示词的轶事。这是我几乎在每次阅读运行超过一个季度的生产级系统提示词时都会看到的模式。长提示词是随意的累加,而非设计的结果。QA 中出现的每个失效模式都贡献了一个段落。观看演示的每位利益相关者都贡献了一条语气指令。每个“似乎有帮助”的例子都被固定在了底部。结果就是,提示词比它要引导的用户输入还要长,充斥着模型在推理时必须默默解决的内部矛盾,注意力被稀释在各种相互竞争的需求中。

个性化设置应当属于 Dotfile,而非向量数据库

· 阅读需 14 分钟
Tian Pan
Software Engineer

当产品团队第一次需要针对每个用户的智能体(agent)行为时,通常会有人说“我们应该进行微调”或“让我们接入持久化内存”。一周后,他们拥有了向量数据库、反馈循环流水线,以及监控学习状态漂移的路线图项。他们构建了一个机器学习系统来解决一个在十有八九的情况下其实只是配置文件的问题。

看看用户真正想要的是什么:更简洁的回答、要点列表而非散文、免责声明中包含我的公司名称、默认使用我偏好的模型、100 美元以下不要转接到人工、这是我本周正在处理的项目、永远不要使用表情符号。这些都不需要模型去学习任何东西。它需要的是设置(settings)。Dotfile 模式——一个版本化的、声明式的、针对每个用户的配置库——在四十年前就为 shell、编辑器和 CLI 解决了这个问题,而这正是 2026 年 AI 智能体的正确形态。

评估迁移税:为什么 Prompt Schema 的一次变更会毁掉 800 个测试用例

· 阅读需 13 分钟
Tian Pan
Software Engineer

我见过的每一个发布过“小规模”输出 Schema 变更的 AI 团队,都经历过同样的一周。有人在系统提示词(system prompt)中重命名了一个字段——比如将 summary 改为 tldr,或者工具目录中增加了一个必填的 confidence 参数——结果下一次 CI 运行就在 800 个与该变更毫无关系的 Eval 用例中亮起了红灯。提示词的 diff 只有 15 行。而 Eval 的 diff 却变成了一个为期四天的迁移项目,且无人规划、无人负责,也从未包含在预算之内。

这就是 Eval 迁移税(Eval Migration Tax)。这是任何路线图都没有考虑到的维护成本,它以发布延迟的形式支付,而这些延迟往往被归咎于“不稳定的测试”(flaky tests),而非真正导致它们的架构选择。大多数团队在意识到这一模式之前已经支付了数年的代价,因为每一个单独的事件看起来都像是普通的日常损耗。只有当你统计一个季度内用于迁移 Eval 的工程小时数,并发现它们超过了用于改进 Eval 本应衡量的模型行为的时间时,这种复利效应才会显现。

将 Eval 作为 Pull Request 评论而非任务:在代码审查中嵌入 LLM 质量门禁

· 阅读需 12 分钟
Tian Pan
Software Engineer

许多自称“有评估(evals)”的团队,其实际情况是:有一个仪表板,某人每周运行一次测试套件,然后将数据粘贴到没人看的 Slack 频道。评审人员批准提示词(prompt)更改时,甚至根本没看过它是否影响了测试套件,而回归问题(regression)两周后才在客户反馈单中显现。评估确实存在,但评估并未进入开发循环。

解决办法在于结构,而非意愿。只有当评估存在于变更发生的地方——即 Pull Request(PR)评论中,紧挨着代码差异(diff),并带有单个 PR 的增量变化和评审员无法忽视的回归提醒时,评估才能真正起到质量把关的作用。在其他任何地方,它们都只是表演性的产物:投入了大量精力构建,却什么也拦截不到。

为什么你的提示词库应该是 Monorepo,而不是 Cookbook

· 阅读需 13 分钟
Tian Pan
Software Engineer

我最近合作的一个团队有三个不同的“总结这份合同”提示词。一个存在于 Notion 页面中,法律科技小队将其复制粘贴到他们的服务里。一个存在于客户成功后端的 prompts/ 文件夹中,为了适应他们的语气偏好做了轻微修改。还有一个内联在数据团队 notebook 里的 Python 文件中,被硬编码在两个 f-string 插值之间。当 OpenAI 弃用了它们运行的所有模型时,迁移计划变成了一场 “Slack 考古” —— 必须追踪到每个所有者,重新评估每个变体,其中两个变体在生产环境中默默地出了一周的故障才被察觉。

这就是规模化后的提示词 Cookbook 的样子。对于十个提示词和一个团队来说,Cookbook 是合理的。但当提示词达到一百个、团队达到四个左右时,它们就会变得难以管理。当你运行一个 AI 组织时,你的 prompts/ 文件夹(装满 .md 文件)的表现就像 2008 年那种靠复制粘贴引入的第三方代码:每个消费者都有自己的快照,偏差(drift)是不可见的,而破坏性变更会以不可预测的方式向外扩散。

AI 功能之间隐藏的边:当一次提示词编辑导致其他三个团队的性能回退时

· 阅读需 11 分钟
Tian Pan
Software Engineer

一位平台工程师修改了公司“品牌风格”序言中的开场白——这是用于统一所有面向客户的助手语气的一行代码。这项改动通过 feature flag 发布。到了周二,搜索团队的相关性退化指标激增,支持机器人的评估通过率下降了四个百分点,入职引导 Agent 的重试率翻了一倍。这些团队中没有一个动过自己的代码。他们都没有收到任何预警。平台工程师对这一切一无所知,因为没人收到过类似的警报:“你的修改刚刚搞坏了三个下游功能。”

这就是定义 AI 团队成立第二年后的典型失效模式。第一年,每个团队都在各自的角落闭门造车。第二年,这些角落开始共享产物——这里一个提示词片段,那里一个种子评估集,或者一个被当作协议复用的工具 Schema。当这种共享变得隐性时,AI 功能之间的依赖图就变得不可见了。你现在拥有的是一个没人能叫出其边缘名称的分布式系统。

解决这一问题的方法论(discipline)并不是一个新平台,而是绘制这张图。

你的 AI 功能说明文档是运行时依赖,而非营销文案

· 阅读需 13 分钟
Tian Pan
Software Engineer

我上个季度合作的一个团队发布了一个 AI 助手,并附带了一整套完备的支撑文档:一个提醒 AI 可能会生成不准确结果的产品内工具提示(Tooltip)、一篇题为“助手如何工作”的帮助中心文章、一份处理升级问题的内部支持操作指南(Runbook),以及一份列出了底层模型、助手可调用的工具及其覆盖的数据领域的公开模型卡(Model Card)。发布过程非常顺利。六个月后,提示词(Prompt)被修改了 14 次,模型在不同层级间进行了切换,拒绝行为(Refusal Behavior)发生了微妙的变化,增加了两个新工具,一个工具被废弃但未从提示词中移除,语言设置也从仅限英语扩展到了 9 个语种。

每一份文档都出错了。并非灾难性的错误——而是那种一句话半真半假、描述的功能与模型实际表现不再匹配、记录的拒绝模式在新模型中从未触发、或者帮助文章里出现的工具名称助手根本不会调用的那种错误。这类错误会产生持续不断的令人困惑的支持工单,当 AI 做了文档说它不会做的事情时会导致客户信任倒退,并且——因为公司在受监管的垂直领域销售——还会产生一个微小但真实的合规漏洞,而 AI 团队中没有人想到要跟踪这一点。