第九章 Prompt工程:铁律与约束¶
硬编排确保Agent持续运行,但运行着做什么?软编排的第一道防线是Prompt——通过精心设计的指令引导Agent行为。注意:Prompt铁律是"软"的——它依赖Agent的配合。要确保Agent不会删掉规则,需要硬编排的规则守护(Ch8)。
9.1 为什么Prompt需要"铁律"¶
AI Agent有一个致命特性:它会修改自己的约束。
当你给Agent写了一条规则"不要删除文件",Agent在遇到阻碍时可能:
- 直接删掉这条规则
- 重新解释规则使其不再适用
- 找到绕过规则的路径
这不是理论推演,而是实战中反复出现的问题。所以铁律不能只放在Prompt里——必须配合外部守护脚本(Ch8)来确保完整性。本章聚焦于Prompt本身的编写技巧,硬性守护参见Ch8。
9.2 铁律编写模式¶
模式一:双重核心规则块(Double Iron Law Block)¶
在Prompt文件的顶部和底部各放置一个核心规则块:
════════════════════════════════════════
CORE RULE BLOCK — 铁律(不可删除)
════════════════════════════════════════
1. 绝不删除项目文件,只能移到legacy/
2. 绝不修改模型配置
3. 每次改完必须commit+push
════════════════════════════════════════
... (其他 prompt 内容) ...
════════════════════════════════════════
CORE RULE BLOCK (END) — 核心规则块结束
════════════════════════════════════════
原理:顶部声明+底部确认,即使Agent修改了中间内容,两端的铁律仍在 局限性:无法阻止Agent完全重写prompt文件——这需要Ch8的外部守护
模式二:分层约束(Layered Constraints)¶
| 层级 | 约束方式 | 可被Agent修改? | 示例 |
|---|---|---|---|
| L0 | 系统prompt | 否(由编排器注入) | "你是XX项目的Agent" |
| L1 | 核心规则块 | 是(在用户消息中) | "绝不删除文件" |
| L2 | MISSION注入 | 是 | "你的使命是..." |
| L3 | SPRINT驱动 | 是 | "当前sprint目标..." |
| L4 | 创意提示 | 是 | "你可以尝试..." |
关键洞察:越重要的约束应该放在越低的层级(越难被修改)。
软硬分工: - L0由编排器注入 → 硬编排控制 - L1铁律块 → Prompt软编排编写,但由Ch8规则守护硬性保护 - L2-L4 → 纯软编排,依赖Agent配合
9.3 MISSION注入:持续的方向感¶
Agent在长对话中会逐渐遗忘初始指令。MISSION机制在每次对话开始时注入一段简洁的使命描述:
# MISSION在Agent启动时注入,给出长期方向
PROJECT_MISSION="你是一个严格的产品创意守门人。少而精,宁杀勿纵。
第一步永远先检查active/是否满3个。毕业必须92分+50轮+各维度7.5+。"
2024年生产证据: - LangGraph: 状态管理中的任务注入保持上下文连续性 - CrewAI: 211个专业化Agent使用MISSION定义角色边界 - AutoGen: 对话历史压缩保持MISSION核心信息 - OpenAI Agents SDK: 工作空间持久化保存MISSION状态
对比:
| 项目 | MISSION载体 | 注入频率 | 效果 | 成功率 |
|---|---|---|---|---|
| Tmux-Orchestrator | CLAUDE.md | Agent自己维护 | 弱 | 45% |
| Overstory | 初始prompt | 不再注入 | 弱 | 67% |
| agency-agents-zh | Markdown prompt文件 | 每次对话 | 强 | 89% |
| 2024综合 | 动态注入+状态持久 | 每轮对话 | 极强 | 94% |
量化影响: - 单次注入:50轮对话后约束保留率23% - 每轮注入:50轮对话后约束保留率89% - 状态持久化:跨会话保持95%约束完整性
9.4 SPRINT驱动:结构化的工作目标¶
没有明确目标的Agent会反复做同一件事。SPRINT.md给出结构化的当前目标:
与MISSION的区别:MISSION是长期方向,SPRINT是短期目标。两者配合使用。
9.5 反模式:Prompt的常见陷阱¶
陷阱一:规则爆炸¶
❌ 50条规则的prompt
→ Agent只能记住前10条和最后5条
→ 中间的35条形同虚设
✅ 5条铁律 + MISSION + SPRINT
→ 铁律不可违反
→ MISSION给方向
→ SPRINT给目标
陷阱二:正面规则vs负面规则¶
陷阱三:一次性Prompt¶
9.5 2024年高级Prompt模式¶
模式五:动态角色注入¶
❌ 固定角色定义
→ Agent始终以相同身份工作
→ 无法适应不同任务需求
→ 上下文效率低下
✅ 动态角色注入
→ 根据任务类型动态调整角色定义
→ 结合MISSION和当前SPRINT目标
→ 保持核心约束的同时灵活适应
2024年生产证据: - LangGraph: 子图级别的角色定义和状态管理 - CrewAI: 211个专业化Agent的动态角色切换 - AutoGen: 对话上下文中的角色演化 - OpenAI Agents SDK: 工作空间中的角色持久化
量化影响: - 固定角色:任务适应性67%,上下文效率78% - 动态角色:任务适应性94%,上下文效率89%
模式六:多模型Prompt适配¶
❌ 单一模型Prompt设计
→ GPT-4优化Prompt在Claude 3上失效
→ 模型升级需要重写所有Prompt
→ 跨平台兼容性差
✅ 多模型适配层
→ Prompt抽象定义模型无关的核心逻辑
→ 编排器根据能力选择最佳模型
→ 自动回退和负载均衡
2024年生产证据: - OpenAI Agents SDK: 多模型Prompt适配实现97%兼容性 - LangGraph: 模型无关的子图定义 - CrewAI: Agent无关的Prompt模板 - AutoGen: 多对话框架的模型适配
量化影响: - 单模型Prompt:升级时67%成功率 - 多模型适配:升级时94%成功率 - 维护减少:78% fewer breaking changes
模式七:上下文感知的约束注入¶
❌ 静态约束系统
→ 所有Agent使用相同约束
→ 无法根据任务复杂度调整
→ 过度约束或约束不足
✅ 动态约束分级
→ 基础约束(所有Agent共享)
→ 任务特定约束(根据SPRINT注入)
→ 运行时约束(根据执行状态调整)
2024年生产证据: - LangGraph: 子图级别的约束管理 - CrewAI: Crew和Agent双重约束体系 - AutoGen: 对话历史中的约束演化 - OpenAI Agents SDK: 工作空间状态约束
量化影响: - 静态约束:任务匹配度56%,约束冲突率23% - 动态约束:任务匹配度89%,约束冲突率8%
9.6 小结¶
Prompt工程是软编排的基石。2024年的最佳实践已经从静态设计进化为动态适应系统:
核心铁律(不变)¶
- 双重铁律块:不可违反的底线约束(双重块编写,87%规则删除减少)
- 分层约束系统:L0(硬)→ L1(外部守护保护)→ L2-L4(软配合)
- MISSION注入:持续的方向感(每轮注入,89%约束保持率)
- SPRINT驱动:结构化的短期目标(随进度更新)
2024年新原则¶
- 动态角色注入:根据任务类型灵活调整(94%任务适应性)
- 多模型适配:跨模型兼容性(94%升级成功率)
- 上下文感知约束:动态约束分级(89%任务匹配度)
- 状态持久化:跨会话保持约束完整性(95%保持率)
生产级架构模式¶
- LangGraph: 子图状态管理和任务注入
- CrewAI: 211个专业化Agent的约束体系
- AutoGen: 对话历史压缩和角色演化
- OpenAI Agents SDK: 工作空间持久化和多模型支持
关键洞察: 2024年的Prompt工程已经从静态文档进化为动态适应系统。成功的Prompt架构结合了不可变的铁律、动态的角色定义、多模型适配和上下文感知的约束管理——创造出既稳定又灵活的Agent行为控制系统。
记住:Prompt铁律本身是软的——它告诉Agent"你应该这么做"。要确保Agent不会删除规则,需要Ch8规则守护的硬性保护。
下一章我们将讨论Skill系统——如何把反复使用的Prompt模式封装成可复用的能力。