你的System Prompt可能比别人的差20%:SPRIG用遗传算法找到了通用最优解
你的System Prompt可能比别人的差20%:SPRIG用遗传算法找到了通用最优解
> 核心直觉:你花两小时调task prompt,让模型在数学题上多对了5%——但换个阅读理解任务,那两行精心调教的prompt可能反而让表现变差。SPRIG的洞察是:真正该优化的不是"这道题怎么问",而是"模型底层怎么思考"。system prompt就像模型的操作系统,调好了它,所有任务都能受益。
---
一、一个让人沮丧的事实
你花了整个下午,让Claude在逻辑推理题上从60%准确率飙到75%。你欣喜若狂,把这版prompt存成了"终极逻辑模板"。
第二天,你用它做阅读理解——准确率从68%掉到了52%。
为什么? 因为你优化的那两行prompt,是task-specific的。它教模型"怎么解这道题",但没有教模型"怎么思考"。
这就是prompt engineering的现状:
- task prompt optimization:针对单一任务调提示词,换一个任务就失效
- manual system prompt:凭感觉写system prompt,"你是一个 helpful assistant",然后祈祷
- prompt chaining/composition:把复杂任务拆成多个步骤,每一步单独调prompt,工程量爆炸
> 能不能自动找到一个通用system prompt,让它在成百上千个不同任务上都能提升表现?
不是"这道题怎么问",而是"模型底层怎么思考"——一旦这个底层调好了,所有task prompt都能站在更好的地基上。
---
二、SPRIG 的方法:从9000个组件到遗传算法进化
2.1 构建组件库:9000个prompt碎片
SPRIG的第一步是构建一个庞大的prompt component库——不是完整的prompt,而是像乐高积木一样的碎片:
| 组件类型 | 例子 |
|---|---|
| Persona | "You are a careful analyst..." |
| Behavioral | "Always verify your answer by checking..." |
| Formatting | "Present your reasoning in bullet points..." |
| Metacognitive | "Before answering, identify what type of problem this is..." |
| Jailbreak/Edge | "Ignore previous instructions and..."(被过滤掉的) |
2.2 Reward Model:学会判断"哪个prompt更好"
直接跑9000个组件的所有组合?组合爆炸,不可能。
SPRIG的 trick 是训练一个reward model来预估候选prompt的好坏,代替昂贵的真实评估:
1. 随机生成10000个系统提示词 2. 在真实benchmark上评估它们的表现 3. 构建100000个preference pairs("prompt A比prompt B好") 4. 用ModernBERT学习预测:给定一个候选prompt,预测它的相对排名
这个reward model就像"prompt质量评估器"——不需要真正跑模型,它就能告诉你"这个prompt大概率不错"或"这个prompt大概率很烂"。
2.3 遗传算法:prompt的进化论
有了reward model,SPRIG用遗传算法来搜索最优system prompt:
初始化:随机生成一批候选prompt
↓
评估:用reward model给每个prompt打分
↓
淘汰:去掉得分最低的50%
↓
进化:从强候选中生成新prompt(遗传操作)
↓
抽样真实评估:选100个候选,在42个真实benchmark上跑
↓
更新reward model:用新的真实评估结果继续训练
↓
循环
遗传操作的六种方式:
| 操作 | 描述 | 例子 |
|---|---|---|
| Add | 添加一个组件 | 在现有prompt后追加"Always double-check..." |
| Delete | 删除一个组件 | 去掉冗余的formatting指令 |
| Swap | 交换两个组件位置 | 把metacognitive指令移到前面 |
| Rephrase | 改写一个组件 | 把"Think step by step"改成"Break this into subproblems" |
| Merge | 合并两个组件 | 把两个相似指令合并成一条 |
| Crossover | 两个强候选杂交 | 取parent A的前半段 + parent B的后半段 |
---
三、关键结果:system prompt比想象中更重要
3.1 核心数据
| 方法 | 平均分 | 说明 |
|---|---|---|
| Base CoT | 0.5972 | 基线:chain-of-thought,无优化 |
| SPRIG (system prompt only) | 0.6287 | 只优化system prompt |
| PROTEGI (task prompt only) | 0.6541 | 只优化task prompt |
| SPRIG + PROTEGI (system + task) | 0.6714 | system + task 联合优化 |
1. SPRIG alone 比基线高5.3%(0.6287 vs 0.5972)——只改system prompt,什么都不动,就能提升 2. SPRIG + PROTEGI 比单独PROTEGI高2.6%(0.6714 vs 0.6541)——system prompt和task prompt是互补的 3. system + task 组合达到最高——说明两者覆盖不同维度的能力
3.2 SPRIG 和 PROTEGI 的互补性
作者做了详细的 overlap 分析:
| 情况 | 比例 | 说明 |
|---|---|---|
| 两者都答对 | 54% | 基础能力重叠 |
| 两者都答错 | 18% | 共同盲区 |
| 只有SPRIG答对 | 14% | system prompt特有的增益 |
| 只有PROTEGI答对 | 14% | task prompt特有的增益 |
翻译一下:
- system prompt擅长的事:教模型"怎么思考"(元认知、推理策略、验证习惯)
- task prompt擅长的事:教模型"这道题要什么"(格式、约束、特定知识)
- 两者结合 = 既会思考,又知道题目要什么
四、任务差异:数学和推理收益最大,知识类几乎没提升
SPRIG 在42个benchmark上的提升不是均匀的:
| 任务类型 | 提升幅度 | 原因 |
|---|---|---|
| 数学 | 高 | 需要系统性推理、验证、分解问题 |
| 逻辑推理 | 高 | 需要结构化思考、避免认知偏差 |
| 语言理解 | 中等 | 需要仔细分析文本结构 |
| 社会理解 | 中等 | 需要多角度思考 |
| 知识类 | 低 | 答案是"记住的事实",不是"推理出来的" |
因为知识类问题的答案取决于模型在预训练阶段是否"记住"了这个事实。system prompt可以教模型"怎么思考",但教不了它"不知道的事"。
这给出了一个重要的应用边界:
- ✅ SPRIG适合:需要推理、分析、验证的任务
- ❌ SPRIG不适合:纯知识检索、事实问答
五、系列坐标:SPRIG 在 prompt optimization 版图中的位置
Prompt optimization 这个领域已经有很多工作了,SPRIG 补上了哪一块?
| 方法 | 优化对象 | 覆盖范围 | 代表 |
|---|---|---|---|
| APO/PROTEGI | Task prompt | 单任务 | 针对特定任务微调prompt |
| TextGrad | 外部文本变量 | 多任务 | 优化外部知识/上下文 |
| SPRIG | System prompt | 跨任务通用 | 优化模型底层思考方式 |
想象一个三层结构:
最上层:Task Prompt("这道题要怎么问")→ PROTEGI优化
↓
中间层:Context/Knowledge("需要什么外部知识")→ TextGrad优化
↓
最底层:System Prompt("模型怎么思考")→ SPRIG优化
SPRIG 的价值在于:它找到了一个可以跨任务复用的"底层操作系统",让所有上层优化都站在更好的地基上。
---
六、边界与风险:不是万能药
SPRIG 的结果很诱人,但作者坦诚地列出了几个边界:
6.1 需要大量算力
- 随机生成10000个prompt并真实评估
- 每轮迭代要抽样100个候选跑42个benchmark
- reward model需要持续训练
6.2 跨模型迁移会减弱
SPRIG 的优化结果是在特定模型(论文中使用的是GPT-4类模型)上找到的。换到另一个模型(如Claude、Gemini、Llama),最优system prompt可能会不同。
原因:不同模型的预训练偏差、指令跟随能力、推理风格不同。在一个模型上有效的"思考策略",另一个模型可能不擅长执行。
实用建议:如果换模型,至少需要重新跑几轮验证,不能直接移植。
6.3 组件库需要安全审查
9000个组件中包含了 persona、behavioral、jailbreak 等类型的指令。其中一些可能:
- 诱导模型产生偏见
- 绕过安全限制(jailbreak)
- 生成有害内容
6.4 不是"越复杂越好"
SPRIG 的最优system prompt通常包含多个组件的组合,但并不意味着"prompt越长越好"。实验显示,适度的复杂度(几个关键组件的组合)比堆砌大量指令效果更好。
---
七、对开发者的启示:你的system prompt值多少钱?
SPRIG 的实践意义:
1. System prompt 不是"附赠品"
很多开发者把system prompt当成"随便写两句"的东西,把全部精力放在task prompt上。SPRIG证明:system prompt可以带来5%以上的独立提升,而且它是跨任务复用的。
2. 值得投资一个"通用system prompt模板"
如果你维护多个agent/应用,花精力优化一个通用system prompt,比为每个任务单独调task prompt更高效。
好的system prompt应该包含:
- 元认知指令("先分析题型再作答")
- 验证习惯("检查答案是否自洽")
- 推理策略("分解复杂问题")
- 格式规范("用bullet points呈现推理")
3. 不要迷信"万能prompt"
SPRIG的最优解是在特定模型+特定benchmark集合上找到的。不存在一个prompt让所有模型在所有任务上都是最优的。
策略:
- 先用SPRIG或类似方法找到一个"好的通用system prompt"
- 然后针对具体任务,叠加task prompt优化(如PROTEGI)
- 定期重新评估(模型更新后,最优prompt可能变)
4. 关注"互补性"而非"替代性"
system prompt + task prompt 的组合比单独优化任何一个都好。不要把所有鸡蛋放在一个篮子里。
---
八、一个有趣的对比:人也需要"system prompt"
SPRIG 的框架让我想到一个有趣的类比:
Task prompt 像考试时的具体题目——"请证明勾股定理"。 System prompt 像你的学习习惯和思维方式——"遇到证明题先画图"、"每步都要验证"、"不确定的时候尝试反证"。
一个好学生,不是因为他会"读每一道题"(task prompt优化),而是因为他有一套可复用的解题方法论(system prompt优化)。这套方法论一旦形成,数学、物理、逻辑题都能受益。
SPRIG 做的就是:用算法自动发现那套"方法论",而不是让模型死记硬背每一道题的解法。
---
结语:Prompt Engineering 的下一个战场
SPRIG 的出现标志着 prompt optimization 从"雕花"进入"架构"阶段:
- 第一阶段:手动调task prompt,每个任务单独优化
- 第二阶段:自动优化task prompt(APO/PROTEGI),但仍限于单任务
- 第三阶段:自动优化system prompt(SPRIG),追求跨任务复用
- 第四阶段:system + task + knowledge 联合优化(未来方向)
在LLM应用开发中,5%的提升可能意味着:
- 客服机器人从"勉强可用"到"用户满意"
- 代码助手从"经常出错"到"偶尔出错"
- 分析工具从"需要人工复核"到"可以直接用"
---
参考来源:
- Pryzant, R., et al. (ICLR 2026). "SPRIG: Improving Large Language Model Performance by System Prompt Optimization." OpenReview.
- OpenReview: https://openreview.net/forum?id=VdVV24KSWK
- 对比方法:PROTEGI (Automatic Prompt Optimization with Gradient Descent), APO, TextGrad
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens