跳到主要内容

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

查看所有标签

群体提示问题:为什么你的系统提示对80%的用户有效,却悄然让另外20%的用户失望

· 阅读需 11 分钟
Tian Pan
Software Engineer

当你编写系统提示时,脑海中有一个预设的用户形象。也许是一位用简洁英语提出有针对性问题的专业人士,也许是发送简短、范围明确、完全符合提示假设的请求的人。你针对看似具有代表性的示例进行测试,调整直到输出效果令人满意,然后上线。

然后你看到了生产流量。

你的系统提示必须处理的真实查询群体,并非你所设计的中位情形,而是一个分布——有些查询范围狭窄,更多的漫无边际——还有一条长尾,暴露出你指令中每一个隐藏假设。对大多数生产系统而言,15%到30%的真实查询落入提示处理欠佳的类别。令人不安的是:这些失败大多是静默的。系统返回200状态码,用户得到一个看似合理的答案,失败永远不会浮现在你的日志中。

Prompt 权重归因:识别系统提示词中的“无效指令”

· 阅读需 12 分钟
Tian Pan
Software Engineer

大多数团队发现他们的系统提示词存在冗余问题的方式都如出一辙——一次成本审查、一次延迟激增,或者某位工程师终于从头到尾读了一遍。他们通常会发现一个在六个月内有机增长的 2,000 token 的文档,其中散落着三个不同版本的“保持简洁”,还有指向二月份就已弃用的产品工作流的指令,以及模型在每次运行时都明显忽略的十几条规则。提示词规模庞大,但大部分内容其实毫无用处。

这就是 Prompt 信用分配问题 (Prompt Credit Assignment Problem):弄清楚一个数千 token 的系统提示词中,哪些指令真正驱动了模型行为,哪些只是消耗 token 并分散注意力的冗余负重。坏消息是,大多数团队完全跳过了这一步——他们在行为出错时添加指令,却从未减少过。好消息是,这有一套可重复的工程准则。

提示工程的职业陷阱:哪些 AI 技能会复利增长,哪些会逐渐退化

· 阅读需 11 分钟
Tian Pan
Software Engineer

在 2023 年,“提示词工程师”(prompt engineer)是科技领域搜索频率最高的职位名称之一。LinkedIn 上到处都是重新包装个人简介的工程师。招聘信息许诺给那些懂得如何诱导 GPT-4 表现的人六位数的薪水。但职位描述中没有提到的是,其中列出的许多技能已经处于“借来的时间”中——到 2026 年,那些能够分辨出持久技能与衰减技能区别的工程师,最终的境遇将大不相同。

提示词工程的职业陷阱并不在于这个领域消失了,而在于它变化太快,以至于在 12 个月内建立的技能到第 18 个月就变成了负资产。那些在错误的层面过度投入而忽视了正确层面的工程师发现,随着下一个模型版本的发布,他们所掌握的专业知识变得毫无意义。

Prompt 变异测试:找出哪些系统提示词指令真正起作用

· 阅读需 12 分钟
Tian Pan
Software Engineer

有一种特定的工程债(Engineering debt)永远不会出现在你的指标中。每当有人在系统提示词(System prompt)中添加一个句子来修复一个偶发的投诉——比如 “绝不讨论竞争对手的产品” 或 “始终以正式的口吻回复” ——而随后又没有人验证模型是否真的执行了它,这种债务就会累积。几个月后,提示词增加到 800 个 Token。它听起来很有权威感,包含的内容包罗万象。但也许其中三分之一根本没起作用。

提示词变异测试(Prompt mutation testing)就是找出那三分之一无效指令的实践。该技术借鉴了软件工程中经典的变异测试:系统地在代码中引入微小、刻意的错误,以确定你的测试套件是否真的能捕获它们。在这里,你向系统提示词中引入刻意的扰动——删除一个分句、抵触一条规则、用近义词替换关键关键词——并衡量模型的输出实际发生了多大变化。那些在扰动下幸存且不影响行为的指令是装饰性的。而那些一旦被触碰就会导致出错的指令则是承重的(Load-bearing)。

系统提示词是软件接口,而非配置字符串

· 阅读需 10 分钟
Tian Pan
Software Engineer

大多数团队对待系统提示词的方式,就像早期 Web 开发者对待 CSS:粘贴一段能跑的代码,小心翼翼地修改以免破坏什么,提交到配置文件,然后祈祷没人动它。接着某位新成员"顺手整理"了一下,模型升级后行为悄然改变,三周后用户提了一个 bug,而没人能复现——因为没人知道上周二那个提示词究竟写的是什么。

这不是工作流问题,而是概念分类的错误。系统提示词不是配置,而是软件接口。只要工程团队还没有如此对待它们,他们构建的 LLM 功能就将持续脆弱、难以调试、无从扩展。

提示词即配置:像对待生产基础架构一样管理 AI 设置

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数工程团队都能准确地告诉你哪个环境变量在控制他们的数据库连接池。但几乎没有人能告诉你现在是哪个版本的 system prompt 在处理 90% 的流量 —— 或者自上一次收到模型行为投诉以来发生了哪些变化。

这就是 AI 配置足迹(AI configuration footprint)问题。构建基于 LLM 功能的团队会积累一个隐形的配置层 —— 模型选择、采样参数(sampling parameters)、system prompts、工具 schemas、重试预算 —— 这些配置决定了他们的产品在生产环境中的行为。这一层的大部分内容都没有记录在案(system of record)。它们通过直接修改代码、交付电子表格或 Slack 消息进行更新。当出现问题时,没有人能说清楚发生了什么变化。

这不是流程问题,而是架构问题。解决方案需要以成熟团队对待环境配置、功能旗标(feature flags)和基础设施即代码(infrastructure-as-code)同样的严谨态度来处理 AI 配置。

系统提示词的行为克隆:在专家离职前留住专业判断

· 阅读需 10 分钟
Tian Pan
Software Engineer

你最棒的系统提示词是由一位已经不在这里工作的人编写的。

那句话的杀伤力取决于你在组织中所处的位置。如果你是一名继承了一个管理着生产级 AI 功能的、未经文档记录的 3,000 token 提示词的工程师,你肯定已经经历过这种情况。你盯着像“除非上下文需要,否则不要包含补充数据”这样的条款,却完全不知道“上下文”意味着什么,是什么触发了这条规则,或者删除它会导致 5% 的质量提升还是灾难性的性能回归。如果你是一名团队负责人,你眼睁睁地看着制度性知识随着每一位资深工程师或提示词专家的跳槽而流失——而这些知识并没有进入文档,因为没有人意识到有什么需要记录的。

这就是系统提示词的知识管理问题,它比大多数团队意识到的还要严重。解决办法借鉴了机器人研究中的一个理念,并将其应用于一个深刻的人性化工程挑战:行为克隆 (behavioral cloning) —— 捕捉专家做了什么,以及背后的原因,在他们离职之前。

动态系统提示词组装:请求时可组合的 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)。