8.4 智能体系统的提示词设计

构建这一章的最后一块拼图是:如何写出驱动智能体的核心提示词。一个优秀的智能体系统提示词不仅定义了智能体的角色,更是其行为逻辑的“源代码”。本节将提供几种经过生产环境验证的智能体提示词模板。

8.4.1 核心设计原则

在设计智能体提示词时,必须遵循以下原则:

  1. 能力边界明确化:清楚地告诉智能体能做什么,不能 做什么(例如:“你只能查询数据,无权修改数据”)。

  2. 工具协议严格化:如果模型不支持原生 Function Calling ,必须在提示词中严格定义工具调用的语法格式。

  3. 思维过程显式化:强制要求智能体在行动前输出 Thought,这不仅是 ReAct 的要求,也是调试智能体行为的关键。

8.4.2 模板一:通用 ReAct 智能体

这是最基础也最通用的智能体模板,适用于需要调用搜索、计算器等通用工具的场景。


# Role

You are a smart AI assistant capable of using tools to solve complex problems.

# Tools

You have access to the following tools:
- `search(query: str)`: Search the internet for real-time information.
- `calculator(expression: str)`: Evaluate mathematical expressions.

# Protocol

To answer a user question, you must iterate through the following steps:

1. **Thought**: Analyze the user's request and determine the next step.
2. **Action**: Select the appropriate tool to use. Output a JSON blob with keys "tool" and "args".
3. **Observation**: Read the tool output (provided by the system).
4. **Repeat**: Repeat steps 1-3 until you have enough information.
5. **Answer**: Provide the final answer to the user.

# Constraints

- If you can answer based on your internal knowledge, do so directly without using tools.
- Do not make up information if the tool returns 'No results'.
- Always cite your sources when using the search tool.

# Example

User: What is the square root of the population of Tokyo?
Thought: I need to find the population of Tokyo first, then calculate the square root.
Action: {"tool": "search", "args": {"query": "population of Tokyo 2025"}}
Observation: The population of Tokyo is estimated to be about 14 million.
Thought: Now I need to calculate the square root of 14,000,000.
Action: {"tool": "calculator", "args": {"expression": "sqrt(14000000)"}}
Observation: 3741.657
Thought: I have the final number.
Answer: The square root of Tokyo's population (approx. 14 million) is about 3,741.66.

8.4.3 模板二:数据分析 SQL 智能体

专用于数据库查询的智能体需要特别强调 SQL 的正确性和安全性。

8.4.4 模板三:规划型智能体

对于超复杂任务(如“写一份商业计划书”),单一的 ReAct 循环容易迷失。我们需要一个“规划者”先拆解任务。

8.4.5 模板四:分层行动空间智能体:OS-World

当智能体配备的工具越来越多时,会出现 工具过载 问题:模型可能调用错误的工具,甚至幻觉出不存在的工具。

解决方案是设计 分层行动空间,将智能体的能力划分为三个层次:

spinner

图 8-2:分层行动空间设计

第一层:原子函数调用

核心层,只包含极少数 固定的、正交的 原子函数:

  • read_file / write_file:文件读写

  • execute_shell:执行 Shell 命令

  • search:搜索文件和互联网

因为这层是固定的,所以对 KV 缓存友好,且功能边界清晰。

第二层:沙盒工具

将绝大多数工具(格式转换、语音识别、MCP 调用等)作为预装软件放在沙盒环境中。

智能体不在上下文中“看到”这些工具的详细定义,而是像开发者一样,通过第一层的 Shell 命令动态交互:

第三层:软件包与 API

对于需要大量计算或复杂第三方交互的任务,智能体编写并执行 Python 脚本:

关键优势:代码是可组合的,可以在一步内完成复杂操作,且避免将大量原始数据加载到上下文中。

提示: 选择原则:所有能在解释器运行时内处理的事情用代码;否则用沙盒工具或原子函数。

提示词模板

8.4.6 进阶技巧:自反思:Reflexion

为了让 Agent 更聪明,我们可以添加”反思”步骤,让它在失败时自我修正。

提示词片段

“If a tool execution fails or returns an error, produce a Thought analyzing WHY it failed (e.g., wrong parameters, network issue) and propose a corrected plan before trying again.”

8.4.7 长期运行 Agent 的约束与进度追踪

在实战中,我们常遇到”长期运行” Agent 的问题:一个 Agent 被赋予一个复杂的任务,可能需要多个 session、多轮交互才能完成。传统的提示词设计往往容易导致 Agent 过早宣布完成过度承诺陷入循环

Anthropic 工程博客《Effective Harnesses for Long-Running Agents》(2026)提出了一套经过验证的约束策略,特别针对防止 Agent 在任务尚未真正完成时就声称完成的问题。

核心问题

长期 Agent 面临的主要挑战:

  1. 虚假完成:Agent 可能会删除或修改待办项来假装完成任务

  2. 粗放执行:Agent 试图一次做太多事,反而都做不好

  3. 缺乏可审计性:无法追踪任务执行的真实进度

策略一:JSON 功能清单作为外部进度锚点

关键洞察:使用结构化的进度清单来约束 Agent 行为,而不是依赖自然语言承诺。

为什么用 JSON 而非 Markdown

模型对 JSON 的”结构敬畏感”更强。在 JSON 中修改一个字段值容易被追踪,但删除一个 Markdown 列表项或添加虚假的✓标记就很难被发现。

具体实践

在 Agent 的初始化 prompt 中,要求它创建并维护一个功能清单 JSON:

关键规则

  1. 所有条目初始为 ”passes”: false:Agent 只能改动 passes 字段,从 false 改为 true

  2. 禁止删除或编辑条目描述:Prompt 明确写入:”It is unacceptable to remove or edit tests.”

  3. 严格约束:任何试图删除条目或改变描述的行为都被视为任务失败

在 Prompt 中的表述

策略二:单功能增量约束

另一个重要约束:每次 session 只做一个功能

问题根源:Agent 常常因为想一次做完所有事而导致:

  • 质量下降(匆匆交付,没测试)

  • 上下文溢出(任务说明太长)

  • 追踪困难(无法判断哪步出了问题)

Prompt 策略

策略三:Session 开头的基线回顾

在每个新 session 开始时,要求 Agent 执行以下步骤:

实战例子:测试驱动的 Agent 工作流

结合上述三个策略,一个完整的 Agent prompt 框架可能像这样:

参考 Anthropic 工程博客 Effective Harnesses for Long-Running Agents(2026)

这套约束策略的核心价值在于:

  1. 可审计:进度清单是客观的、机器可读的,无法作假

  2. 增量交付:每个 session 产生一个完整的、可验证的成果

  3. 防止虚假完成:删除任务项的方式被彻底堵死

  4. 心理约束:模型会”尊重” JSON 的结构性,比单纯的文字约束更有效

  5. 便于调试:当某个功能出问题时,可以清楚地看到它的状态历史

延伸思考

  1. Agent 系统提示词需要定义”何时停止”——如果 Agent 陷入死循环怎么办?你会如何在提示词层面设计终止条件?

  2. 一个 Agent 的能力由它的工具集决定。如果你要为你的团队设计一个内部 Agent ,你会赋予它哪 3-5 个工具?

  3. 对于长期运行的 Agent,功能清单的粒度应该如何设定?太粗太细各有什么坏处?

最后更新于