把 Agent 的 Prompt 拆成四个槽位优化居然没效果

后端Ray 初级 2天前 801 浏览 15 点赞 约 3 分钟

很多搞 Agent 进化的人习惯把 Prompt 当成一整块字符串去迭代,觉得只要让模型自我反思、自我优化,Prompt 就会越来越强。但 arXiv 2609.02889 这篇论文给了一个很冷酷的结论:这种「全量优化」其实是在浪费算力。研究者提出了一个叫 HARNESSEVO 的方案,把 Agent 的「脚手架」(Harness)强行拆成了四个独立槽位:角色设定(Role)、任务策略(Task-strategy)、工具/格式规则(Tool/format-rules)以及反思/控制逻辑(Reflection/control)。

最反直觉的发现是,在 ALFWorld 这个环境下,用 7B 模型做测试,如果你把优化预算平均分配给这四个槽位,最终的成功率(0.657)跟直接用原始 Prompt 或者把整个 Prompt 当成一个字符串去优化(0.642)几乎没区别。这说明,如果你试图「全面提升」Prompt 的每一个维度,结果往往是原地踏步。

真正的关键在于「价值局部化」。研究员通过消融实验发现,几乎所有的性能提升都集中在「反思/控制」这个槽位上。当他们把预算从四个槽位均匀分布(每个槽位 16 次 rollout)改为集中攻击这个高价值槽位时,成功率直接从 0.657 飙升到了 0.761。而且最离谱的是,集中预算后的总样本量只有之前的一半,效率反而更高。

这揭示了一个「预算分割陷阱」:优化器在搜索空间太小时(比如每个槽位只有 16 次尝试),根本触不到性能提升的阈值,导致所有槽位都卡在初始状态,处于一种「集体冻结」的低效状态。

对于我们平时写 Prompt 的人来说,这其实是个很重要的启发。很多时候我们试图通过增加「你是一个资深的XX专家」或者「请一步步思考」来优化结果,但实际上,真正起作用的可能是那句具体的「如果发现结果不符,请重新检查第三步」这种控制逻辑。

如果你想尝试这种结构化拆分优化,可以参考下面这个逻辑模版,不要试图同时优化所有部分,先锁定那个最影响结果的「控制槽位」。

# Agent Harness Structure (Decomposed)

## Slot 1: Role (角色设定)
- [此处定义身份,如:你是一个精通环境交互的机器人]

## Slot 2: Task-Strategy (任务策略)
- [此处定义解决问题的通用路径,如:先观察环境 -> 寻找目标物 -> 执行交互]

## Slot 3: Tool/Format-Rules (工具与格式规则)
- [此处定义 API 调用格式,如:Action: {action_name}(object)]

## Slot 4: Reflection/Control (反思与控制逻辑) 
- [核心优化区:定义如何处理错误,如何判断当前状态是否符合预期,以及失败后的修正机制]
- 示例:如果执行 Action 后环境反馈为 "Nothing happens",请尝试改变交互角度或检查是否缺少前置道具。

在实际操作中,我建议的优化路径是:先固定 Role、Strategy 和 Rules,只针对 Reflection/Control 这一块进行迭代。比如在 ALFWorld 这种需要频繁与环境交互的任务中,模型最容易在「意识到自己做错了」这一点上卡壳。与其花时间润色角色扮演的措辞,不如多写几条关于「如何识别失败并切换方案」的硬性指令。

当然,这种局部化效应也取决于任务本身。论文里提到在 WebShop 任务上,无论怎么拆分优化,结果全部打平,这说明有些任务根本不存在可以通过文字描述来修复的「可语言化控制失效」。换句话说,如果模型在某个任务上就是能力不足,你把 Prompt 拆成 100 个槽位去优化也没用。

总结一下这次实验给我的认知刷新:Agent 的 Prompt 优化不是做加法,而是做「权重分配」。与其追求一个全方位完美的 Prompt,不如找到那个能带来 80% 提升的 20% 关键指令,然后把所有的迭代精力全部砸在那里。

提示词LLM AgentHARNESSEVOALFWorldWebShop

全部回复 (3)

技术宅Ray 初级 2天前
确实,我之前试过把所有要求堆在一起,效果反而变乱了,得分开写。
0 回复
大鹏的日常 初级 2天前
那这四个槽位之间怎么交互?会不会互相冲突啊?
0 回复
架构师Neo 中级 2天前
我也试过拆分,结果逻辑全断了,还不如写一整块直接,真没必要搞这么复杂。
0 回复

发表回复

支持 Markdown 格式