提示词工程进阶 (Prompting for Agents)
在 Agent 开发中,Prompt Engineering 不再是简单的“写小作文”,而是编写自然语言代码。你需要让 LLM 严格遵循特定的思维模式和输出协议。
[PROMPT_LAB_BANNER]
1. 从 Chat Prompt 到 Agentic Prompt
普通的 Chat Prompt 关注的是“回答得好不好”,而 Agentic Prompt 关注的是**“执行得对不对”**。
| 维度 | Chat Prompt | Agentic Prompt |
|---|---|---|
| 目标 | 获得知识或文本 | 触发正确的工具调用和逻辑流 |
| 结构 | 自由文本 | 严格的 XML / JSON 结构 |
| 容错 | 允许模糊 | 必须精确,否则系统崩溃 |
2. 核心模式:ReAct (Reason + Act)
ReAct 是 Agent 提示词的鼻祖。它要求模型在执行任何动作前,必须先进行思考 (Thought)。
ReAct 模板示例:
# Role
你是一个能够使用工具的 AI 助手。
# Tools
你可以使用以下工具:
- google_search: 搜索互联网信息
- calculator: 进行数学计算
# Format
回答必须遵循以下格式:
Question: 用户的问题
Thought: 我应该怎么做?
Action: 要调用的工具名称
Action Input: 工具的参数
Observation: 工具返回的结果
... (重复 Thought/Action/Observation)
Final Answer: 最终给用户的回答
# Example
Question: 埃隆·马斯克的年龄乘以 2 是多少?
Thought: 我需要先查到埃隆·马斯克的生日,算出年龄,然后乘以 2。
Action: google_search
Action Input: Elon Musk birthday
Observation: June 28, 1971
Thought: 现在是 2026 年,他大概 55 岁。
Action: calculator
Action Input: 55 * 2
Observation: 110
Final Answer: 埃隆·马斯克的年龄乘以 2 大约是 110。
为何有效? 强制模型输出
Thought可以让它利用 CoT (思维链) 提高推理准确率;分离Action让程序容易解析。
3. 结构化输出 (Structured Output)
让 LLM 输出 JSON 是构建稳定 Agent 的基石。不要让模型输出“好的,结果是...”,要强迫它输出 { "result": "..." }。
技巧 A:使用 XML 标签隔离上下文
Anthropic 推荐使用 XML 标签来区分不同类型的数据,防止 Prompt Injection。
<documents>
<doc id="1">...</doc>
<doc id="2">...</doc>
</documents>
<instructions>
请根据 <documents> 中的内容回答问题。
</instructions>
技巧 B:JSON Mode 强制约束
在 API 调用时开启 response_format: { type: "json_object" },并在 Prompt 中提供 Schema。
# Output Format
你必须输出符合以下 TypeScript 接口的 JSON:
```typescript
interface Response {
reasoning: string; // 思考过程
plan: string[]; // 下一步计划
command?: string; // 要执行的命令 (可选)
}
---
## 4. 角色扮演 (Persona) 的进阶用法
在 Agent 中,Persona 不仅仅是语气,更是**权限和能力的边界**。
- **坏 Persona**:“你是一个有用的助手。”(太泛,容易胡言乱语)
- **好 Persona**:“你是一个 Python 代码审查员。你**只**负责检查代码的安全性漏洞。你**不能**修改代码逻辑。如果发现 SQL 注入风险,必须输出严重等级为 'High'。”
---
## 5. 提示词维护与版本管理
Agent 的 Prompt 往往长达数千个 Token。
- **模块化**:将 System Prompt 拆分为 `Role`, `Context`, `Tools`, `Examples` 等模块拼接。
- **版本控制**:像管理代码一样管理 Prompt (PromptOps)。
- **动态注入**:根据用户的 Task 动态插入相关的 Few-Shot Examples。
---
## 小结
编写 Agent Prompt 的心法:**把 LLM 当作一个极度聪明但需要明确指令的初级程序员**。
1. **显式思考**:强制输出 `Thought`。
2. **结构化**:输入输出全部 JSON/XML 化。
3. **边界清晰**:明确告诉它**不能**做什么。