写好 Agent Prompt:不是越长越好
Agent 的 Prompt 写法,和聊天机器人的 Prompt 不是一回事。聊天机器人可以写一长串人设、语气、规则,Agent 的 Prompt 是给机器执行用的——每个 token 都有成本,每个多余的指令都可能让模型走偏。
这篇聊 Agent Prompt 的实操经验。
系统指令:精确比全面重要
常见的错误写法:
1 | 你是一个专业的客服Agent。你需要礼貌、专业地回答用户的问题。 |
问题在哪?全是要求,没有结构。模型看到的是一堆”你要怎样”,但不知道优先级。当要求冲突时(”简洁”vs”先确认理解”),模型会自己猜。
好的写法:
1 | 你是客服Agent。按以下规则处理请求: |
区别:有流程、有优先级、有兜底。 模型不需要理解”礼貌”是什么意思,它只需要知道该走哪个流程。
工具描述:越短越准
Agent 的工具描述经常写成这样:
1 | query_order: 查询订单状态。使用此工具可以查询用户订单的当前状态, |
浪费了。模型需要知道的核心信息只有三个:这工具干嘛的、什么参数、什么时候用。
1 | query_order(order_id: str) → 订单状态+物流信息 |
三行搞定。省了 60% 的 token,信息量一样。
批量工具更要精简。 Agent 常用 5-10 个工具,每个省 50 token,一次调用就省 500 token。一天跑 1000 次,省 50 万 token。
Few-shot 示例:3 个够用
Few-shot 示例能显著提升 Agent 的格式遵从度。但不是越多越好。
实验数据(GPT-4o,客服 Agent):
| 示例数 | 格式正确率 | Prompt tokens | 性价比 |
|---|---|---|---|
| 0 | 72% | 800 | 低 |
| 1 | 85% | 950 | 中 |
| 3 | 94% | 1250 | 高 |
| 5 | 95% | 1600 | 低(边际递减) |
| 10 | 96% | 2200 | 很低 |
3 个示例是甜点。选示例的原则:覆盖不同的输入模式,不要重复。
1 | 示例1(简单查询): |
三个示例覆盖了三种典型路径:单步查询、多步操作、转人工。
角色设定:能省则省
“你是一个专业的、礼貌的、善于沟通的客服Agent”——这种角色设定在聊天场景有用,在 Agent 场景基本是废话。
Agent 不需要”礼貌”,它需要”准确”。角色设定应该服务于功能:
1 | ❌ 你是一个热心的助手,总是乐于帮助用户解决问题 |
如果你的 Agent 需要特定的输出风格,直接规定输出格式比角色设定有效:
1 | ❌ 像专业客服一样回答 |
对话历史:窗口比长度重要
Agent 跑久了,对话历史越来越长。直接把完整历史塞进 prompt 有两个问题:token 暴涨,模型注意力分散。
控制历史窗口:
1 | def build_messages(system: str, history: list, current: str, max_history: int = 6): |
更高级:滑动窗口 + 摘要。 最近的 3 轮保持原样,更早的对话压缩成摘要。
1 | def build_messages_with_summary(system: str, history: list, current: str): |
常见 Prompt 反模式
1. 矛盾指令。 “回答要详细”同时又”回答要简洁”。模型会随机选一个。
2. 否定式指令。 “不要回答不知道的信息”——模型对否定指令的遵从度比肯定指令低。换成”只基于工具返回的数据回答”。
3. 角色扮演过头。 “你是一个经验丰富的SRE工程师,在Google工作了10年”——这些背景信息占 token 但不影响输出质量。Agent 不是在演戏。
4. 无限追加。 每次出问题就加一条规则,prompt 越来越长,模型越来越容易遗漏。定期精简,合并重复的规则。
5. 工具描述和系统指令重复。 系统指令说了”退款要转人工”,工具描述又写了”退款操作需要人工确认”。说一遍就够。
自检清单
写完 Agent Prompt,过一遍:
- 删掉所有角色设定词,影响输出吗?不影响就删
- 工具描述能不能再短?每个工具控制在3行以内
- Few-shot 示例有几个?超过3个就砍
- 有没有矛盾的指令?有的话合并或删除
- 对话历史有截断机制吗?
- 100 token 以内能说清楚核心规则吗?不能就重写
Prompt 是 Agent 的灵魂,但灵魂不需要啰嗦。每个 token 都要干活,不干活的 token 就删掉。
相关阅读:
- OpenAI Prompt Engineering Guide
- Anthropic Prompt Engineering Guide
-《提示词工程完全指南》- 更详细的prompt技巧(在我们博客上)