大模型与智能体协同 / 提示工程在 Agent 中的应用
CHAPTER 08 · TOPIC 02

提示工程在 Agent 中的应用

提示工程(Prompt Engineering)在 Agent 场景下有着比一般 LLM 应用更复杂的要求。Agent 的系统提示不仅要定义模型的行为风格,还要规范工具使用、决策逻辑、输出格式和错误处理。本章深入讲解 Agent 场景下的提示工程最佳实践。

一句话理解

提示工程(Prompt Engineering)在 Agent 场景下有着比一般 LLM 应用更复杂的要求。Agent 的系统提示不仅要定义模型的行为风格,还要规范工具使用、决策逻辑、输出格式和错误处理。本章深入讲解 Agent 场景下的提示工程最佳实践。

阅读前置

建议完成第 04、05 章

本文关注

Agent 系统提示的结构、工具使用提示技巧、错误处理提示

所在知识层

系统协同 · 大模型与智能体协同

文章导航
主教学视觉提示工程在 Agent 中的应用 · 知识结构

点击图中节点可定位到对应正文。

核心主题关系与流向

引言

提示工程(Prompt Engineering)Agent 场景下有着比一般 LLM 应用更复杂的要求。Agent 的系统提示不仅要定义模型的行为风格,还要规范工具使用、决策逻辑、输出格式和错误处理。本章深入讲解 Agent 场景下的提示工程最佳实践。


1. Agent 系统提示的结构

1.1 标准结构模板

语义 SVG 重绘提示工程在 Agent 中的应用

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文1. 身份定义系统核心你是谁、你的角色和专长2. 核心目标你的主要任务是什么工具、结果与反馈3. 行为准则行动原则、优先级、禁止事项
查看原文结构
┌─ 1. 身份定义 ─────────────────────────────────────┐
│  你是谁、你的角色和专长                              │
├─ 2. 核心目标 ─────────────────────────────────────┤
│  你的主要任务是什么                                 │
├─ 3. 行为准则 ─────────────────────────────────────┤
│  行动原则、优先级、禁止事项                          │
├─ 4. 工具使用指南 ─────────────────────────────────┤
│  何时使用哪个工具、使用顺序、错误处理                │
├─ 5. 输出格式 ─────────────────────────────────────┤
│  回答的结构和格式要求                               │
├─ 6. 约束与边界 ───────────────────────────────────┤
│  不能做什么、何时拒绝、何时请求帮助                   │
└───────────────────────────────────────────────────┘

1.2 完整示例

语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文工具使用顺序:系统核心1. 问题场景:monitorquerylogsearch诊断工具、结果与反馈kubectl/awscli验证
查看原文结构
工具使用顺序:
1. 问题场景:monitor_query → log_search → 诊断 → kubectl/aws_cli → 验证
2. 部署场景:确认 → kubectl apply → monitor_query 观察 → 报告
语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

查看原文结构
# 输出格式
- 问题诊断使用结构化格式:现象 → 原因 → 解决方案 → 执行
- 命令操作前说明目的和影响
- 操作后验证结果并报告

2. 工具使用提示技巧

2.1 工具选择引导

语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

1. 是否需要实时数据?是: 使用 querydatabase…否: 使用已有知识回
查看原文结构
1. 是否需要实时数据?
   → 是: 使用 query_database 或 search_web
   → 否: 使用已有知识回答
语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文2. 是否需要执行操作?系统核心是: 使用对应的执行工具(executecomma…否: 直接回答工具、结果与反馈
查看原文结构
2. 是否需要执行操作?
   → 是: 使用对应的执行工具(execute_command, send_email)
   → 否: 直接回答
语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 3

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

3. 是否需要计算?是: 使用 runpython 进行精…否: 直接回答
查看原文结构
3. 是否需要计算?
   → 是: 使用 run_python 进行精确计算
   → 否: 直接回答
语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 4

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文4. 是否需要多个工具协作系统核心是: 按依赖关系顺序调用,前一个的输出作为后一个的…否: 调用单个工具工具、结果与反馈
查看原文结构
4. 是否需要多个工具协作?
   → 是: 按依赖关系顺序调用,前一个的输出作为后一个的输入
   → 否: 调用单个工具

2.2 工具参数生成

MARKDOWN
# 参数生成规则

调用工具时,参数必须准确且完整:

1. SQL 查询:
   - 必须指定表名和条件
   - 大表查询必须加 LIMIT(默认 100)
   - 时间查询使用标准格式 YYYY-MM-DD

2. 代码执行:
   - 代码必须完整可运行
   - 必须包含必要的 import
   - 添加适当的错误处理

3. API 调用:
   - 检查必需参数是否齐全
   - 使用正确的数据类型(数字不要加引号)
   - 包含认证信息

3. 错误处理提示

3.1 工具失败处理

语义 SVG 重绘提示工程在 Agent 中的应用

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

查看原文结构
1. 仔细阅读错误信息
2. 判断错误类型:
   a. 参数错误 → 修正参数后重试
   b. 权限错误 → 告知用户需要授权
   c. 超时错误 → 等待后重试,最多 3 次
   d. 服务不可用 → 告知用户,提供替代方案

3.2 幻觉防护

MARKDOWN
# 防止幻觉

核心原则:不知道就说不知道

具体规则:
1. 不要编造不存在的 API 或工具
2. 不要编造数据——所有数据必须来自工具查询
3. 不要猜测不确定的信息——使用搜索工具验证
4. 不要假装执行了操作——必须实际调用工具
5. 引用信息时注明来源

当不确定时的回答模板:
"关于 {topic},我没有确切的信息。我可以:
1. 使用搜索工具查找最新信息
2. 查询数据库获取准确数据
3. 承认我不确定并建议您咨询相关专家

请选择。"

4. 多轮对话管理

4.1 状态追踪提示

MARKDOWN
# 对话状态追踪

在每轮对话中,你需要追踪:

1. 当前任务进度
   - 用户最初要求什么
   - 已经完成了哪些步骤
   - 还剩什么未完成

2. 关键上下文
   - 用户提到的偏好和约束
   - 已经获取的数据和结果
   - 已经做出的决策

3. 待确认事项
   - 需要用户确认的操作
   - 不确定的假设

每次回复前,先在内部更新这些状态。

4.2 上下文切换

语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

1. 检测到新话题告知用户:"我注意到您切换到了新话题 …询问:"需要我先完成之前的 oldta…
查看原文结构
1. 检测到新话题
   → 告知用户:"我注意到您切换到了新话题 {new_topic}"
   → 询问:"需要我先完成之前的 {old_task} 吗?"
语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

2. 保存旧上下文记录旧任务的进度以便之后可以恢复
查看原文结构
2. 保存旧上下文
   → 记录旧任务的进度
   → 以便之后可以恢复
语义 SVG 重绘提示工程在 Agent 中的应用 · 结构 3

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

3. 处理新话题完全投入新话题不要在新旧话题间混淆
查看原文结构
3. 处理新话题
   → 完全投入新话题
   → 不要在新旧话题间混淆

5. 高级提示技巧

5.1 思维链(CoT)在 Agent 中

MARKDOWN
# 推理要求

在处理复杂任务时,你必须展示推理过程:

<reasoning>
1. 用户的真实需求是什么?(区分表面需求和深层需求)
2. 我需要哪些信息?(已有 / 需要获取)
3. 最佳工具组合是什么?
4. 可能的风险是什么?
5. 如何验证结果的正确性?
</reasoning>

<action>
基于推理,执行具体操作
</action>

5.2 Few-Shot 示例

MARKDOWN
# 示例:如何处理数据分析请求

## 示例 1:简单查询
用户: "上个月的销售总额是多少?"
思考: 需要查询数据库获取销售数据
操作: query_database(sql="SELECT SUM(amount) FROM sales WHERE month='2024-11'")
结果: 1,234,567
回答: "2024年11月的销售总额为 **1,234,567 元**。"

## 示例 2:需要多步分析
用户: "为什么上个月的销售下降了?"
思考: 需要先获取数据,再对比分析
操作 1: query_database(sql="SELECT * FROM monthly_sales WHERE year=2024")
结果 1: [1月:1200万, ..., 10月:1500万, 11月:1234万]
思考: 11月确实比10月下降了18%,需要进一步分析原因
操作 2: query_database(sql="SELECT category, SUM(amount) FROM sales WHERE month IN ('2024-10','2024-11') GROUP BY category")
结果 2: [A类下降30%, B类持平, C类增长5%]
回答: "上月销售下降的主要原因是 A 类产品下降了 30%..."

## 示例 3:工具调用失败
用户: "查询实时库存"
操作: query_database(sql="SELECT * FROM inventory")
错误: "Connection timeout"
思考: 数据库连接超时,可能是网络问题
操作: query_database(sql="SELECT * FROM inventory")(重试)
结果: 成功
回答: "当前库存数据..."(附注:第一次查询超时,重试后成功)

6. 提示模板管理

6.1 版本管理

语义 SVG 重绘提示工程在 Agent 中的应用

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

def get(self, name:…str:version = self.curr…template = self.pro…return template.for…
查看原文结构
def get(self, name: str, **kwargs) -> str:
        version = self.current_version[name]
        template = self.prompts[f"{name}:{version}"]
        return template.format(**kwargs)

6.2 动态提示组装

语义 SVG 重绘提示工程在 Agent 中的应用

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

def buildagentpromp…str:"""根据上下文动态组装提示"""
查看原文结构
def build_agent_prompt(base_prompt: str, context: dict) -> str:
    """根据上下文动态组装提示"""

7. 本章小结

维度最佳实践
系统提示身份 + 目标 + 准则 + 工具指南 + 格式 + 约束
工具使用决策树 + 参数规则 + 错误处理
幻觉防护不知道就说不知道,数据必须来自工具
推理使用 CoT 展示推理过程
示例提供 few-shot 示例说明期望行为
版本管理提示词也要版本控制和 A/B 测试

相关章节


延伸阅读

  • OpenAI (2024). "Prompt Engineering Guide". platform.openai.com
  • Anthropic (2024). "Prompt Engineering for Claude". docs.anthropic.com
  • Liu, P. et al. (2023). "Pre-train, Prompt, and Predict: A Systematic Survey". ACM Computing Surveys