自动提示词优化。
提示词是一个你正在用手拟合的参数——样本量只有三,还没有留出集——这就是为什么那个"读起来明显更顺"的版本常常反而分更低。自动提示词优化把猜测换成由指标驱动的搜索循环,而昂贵的部分并不是优化器:而是你必须先把搜索所需的那份打好分的数据集建起来,然后把胜出的提示词当作一件构建产物——它会在你换模型的那天过期。
提示词是系统里最后一个没被拟合的参数。
模型流水线中其余每一个数值部件都是对着数据拟合出来的。权重是训练的。检索阈值是在验证集上调的。唯独提示词——在多数智能体系统中对输出质量影响最大的那个部件——由人写下、靠阅读判断,然后因为"手动试了几次感觉不错"就上线了。
- 人工调提示词的样本量大约是三。你试一种措辞、跑两三条输入、读一读输出,然后形成一个判断。两三个样本根本无法把一个真实的五个百分点的提升与噪声区分开;评测方差的统计学在这一点上毫不留情,而它适用于你的非正式试验,正如它适用于一套正式的测试集。
- 可读性与分数之间只有松散的关系。优化器经常落到一些人类编辑会直接删掉的指令上——冗余的重复陈述、古怪而具体的格式要求、看上去毫无代表性的示例。它们照样在指标上取胜,因为模型并不是在读文风。
- 搜索空间比措辞大得多。你放进哪些示例、放几个、按什么顺序、输出如何组织、任务是一次调用还是三次——全都可搜索,而最大的收益通常来自示例集而非指令文本。这正是少样本提示所描述的那根杠杆,只不过现在由测量而非品味来选择。
让下文变得有用的那个视角切换是:你不是在写一个提示词,你是在拟合一个提示词。接下来的一切——数据集、指标、留出划分、带版本的产物——都是拟合一个参数的标准装备,而跳过它们,正是手工调提示词让人觉得像在搞玄学的原因。
这些优化器实际上是怎么工作的。
已发表的方法在"变异什么"和"如何挑下一个候选"上各有不同,但每一个都是同一个循环:提出一个候选提示词、在数据集上打分、留下赢的那个、再来一遍。三个流派覆盖了实际落地的大部分。
- 示例挑选与自举。用当前提示词跑一遍你的训练输入,留下得分高的那些轨迹,把它们提升为提示词里的示范。便宜、稳健,而且往往是单项最大的收益——模型从自己成功的尝试中学到你这项任务的形状,而不是从你手写的示例里。
- 指令搜索。由第二个模型提出指令文本的若干改写,逐一打分,再由一种搜索策略——随机、演化,或在提议空间上的贝叶斯搜索——决定下一步往哪里找。那些出人意料、丑陋却有效的措辞就是从这里来的。
- 带反思的、以反馈驱动的变异。不用一个数字给候选打分,而是把失败以自然语言喂给优化器——错误的输出、评判者陈述的理由、工具报错——让它写出有针对性的修订。这是 DSPy/GEPA 这条线所走的方向,而且它比盲搜的样本效率高得多,因为每次 rollout 携带的是诊断信息而不是一个标量。多阶段流水线上如何组合,见 DSPy 3 与 GEPA 的智能体优化。
对一个多步智能体来说,重要的性质是这些方法作用在一个程序上而不是一个字符串上。如果你的流水线有一个分类阶段、一个检索阶段和一个写作阶段,优化器可以针对同一个端到端指标同时拟合三者——而这是发现"写作阶段的毛病其实出在分类阶段的措辞上"的唯一途径。
指标与留出集就是全部工作。
优化器会精确地最大化你所要求的东西,在你给它的那批数据上,精确地。这句话的两半都是陷阱,也都是团队报告"自动优化没起作用"的原因——循环运转得很好;它优化的是他们并不想要的东西。
- 没有留出划分,你不是在优化,你是在背题。在五十条样本上搜索几十个候选,一定会找到一个正好吻合这五十条样本怪癖的提示词。开始之前先划分,只报告留出集上的数字,并另留一份到最后才碰一次的集合。
- 弱指标比弱提示词被钻空子得更快。如果指标是一个 LLM 评判者,搜索就会找到那个最讨好这位评判者的提示词——更长的答案、更自信的语气、评判者被训练得偏爱的格式。在放优化器去打它之前,先拿人类标注校准这个评判者,否则你拟合的是一份偏差。
- 五十到两百条标注精良的样本,胜过两千条扒来的。标签质量给下游的一切封了顶;一个被嘈杂标签打分的搜索最终会收敛到噪声上。这与标注运营中描述的是同一个天花板。
- 给你真正被付钱的那个结果打分,并把成本算进去。一个只有质量目标的优化器会欣然发现:多加六个示例、把指令写长一点,准确率能涨一个点——而你每次调用的输入令牌从此翻了四倍,在每次运行的每一步上。把令牌放进目标函数,或作为约束设上限;智能体成本控制解释了这种膨胀为何会在循环里复利。
被优化出来的提示词是一件有保质期的构建产物。
这是团队在第一次成功运行之后才会吃惊的部分。你现在手上有一份没人写过的、机器生成的提示词,里面包含由搜索挑出来的示范,并且是针对某一个特定模型版本拟合出来的。它是一份编译产物,就该按编译产物来对待。
- 连同模型 ID、数据集哈希与得分一起版本化。一份来历只有"三月份优化器产出的"的提示词,既没法调试也没法复现。把产物与生成它的那些输入一起存起来——这正是可复现性对任何生成式部件的要求。
- 每次换模型都重新拟合,并为此留出预算。提示词是针对某一个模型的怪癖拟合的;新的检查点有另一套怪癖。重跑优化器相比第一次要便宜得多——数据集已经在了——但它是迁移清单上的一项,不是可有可无的收尾。
- 把手写的那份提示词保留为可读的规格。人仍然需要知道这个系统应该做什么。用散文维护意图,让优化器从它产出实际上线的那个字符串,并且永远不要手工编辑生成的产物——被编辑过的产物就又变回未拟合状态,却连未拟合状态的那份诚实都没有了。
- 不要去优化你还量不出来的东西。如果你还没有打好分的数据集,正确的第一步是去建一个,而不是去装一个优化器。无论你最终是否真的跑过搜索,那份数据集都会在回归防护与换模型上把成本赚回来——这正是评估驱动的智能体开发的论点。
就从这里开始,按这个顺序:写下一个你敢跟老板辩护的指标,照它标注 100 条真实样本,按 60/20/20 划分。然后跑你手上最便宜的那种优化器——自举式示例挑选——在留出集上把它和你今天在用的提示词比一比。如果这份数据集值得建,你一个下午就会知道;如果优化器赢了,你就刚刚把一场关于措辞的主观争论换成了一个数字。数据集才是资产。优化器只是跑在它上面的一个脚本。
相关:提示词基础讲被搜索的那些杠杆,上下文工程讲填满窗口的其余一切,评测 101讲这一切所依赖的那份打分集,以及智能体外壳——为什么提示词只是一个基准分数暗地里在测量的若干东西之一。