第六章:Agent 智能助手
6.1 Agent 概述
6.1.1 什么是 Agent
Agent(智能代理/智能助手)是一种能够自主完成复杂任务的 AI 应用。与普通的聊天助手不同,Agent 具备以下核心能力:
- 目标规划:理解用户的最终目标
- 任务拆解:将复杂任务分解为可执行的子任务
- 工具调用:自主选择和使用合适的工具
- 过程迭代:根据中间结果调整策略
- 自主完成:在没有人类干预的情况下完成任务
Agent 利用大语言模型的推理能力,不仅能够对话,还能够”行动”。它可以调用搜索引擎获取信息、执行代码进行计算、访问数据库查询数据,甚至控制外部系统完成操作。
6.1.2 Agent 的工作原理
Agent 的核心是”思考-行动-观察”循环(Reason-Act-Observe Loop):
用户输入
↓
┌─────────────────────────┐
│ 思考(Reasoning) │
│ - 分析任务目标 │
│ - 决定下一步行动 │
│ - 选择合适的工具 │
└───────────┬─────────────┘
↓
┌─────────────────────────┐
│ 行动(Action) │
│ - 调用选定的工具 │
│ - 传递必要的参数 │
│ - 执行具体操作 │
└───────────┬─────────────┘
↓
┌─────────────────────────┐
│ 观察(Observation) │
│ - 获取工具返回结果 │
│ - 分析执行效果 │
│ - 决定是否继续 │
└───────────┬─────────────┘
↓
是否完成任务?
├── 否 ──→ 返回思考
└── 是 ──→ 输出结果
6.1.3 Agent vs 聊天助手
| 特性 | 聊天助手 | Agent |
|---|---|---|
| 交互方式 | 纯对话 | 对话 + 工具调用 |
| 能力范围 | 知识问答 | 执行任务 |
| 信息获取 | 依赖训练数据和知识库 | 可实时获取外部信息 |
| 行动能力 | 无 | 可执行操作 |
| 复杂任务 | 难以处理 | 自主分解完成 |
6.1.4 Agent 的应用场景
数据分析:
- 从多个数据源收集数据
- 执行统计分析和计算
- 生成可视化图表和报告
信息研究:
- 搜索最新资讯和文献
- 整理和归纳信息
- 撰写研究报告
自动化办公:
- 自动处理邮件
- 安排日程会议
- 生成文档报告
客户服务:
- 查询订单状态
- 处理退换货请求
- 协调多部门资源
代码开发:
- 理解需求并设计方案
- 编写和调试代码
- 执行测试验证
6.2 创建 Agent 应用
6.2.1 创建步骤
步骤一:创建应用
- 进入 Dify 工作室
- 点击”创建空白应用”
- 选择”Agent”类型
- 填写应用名称和描述
步骤二:选择推理模型 Agent 的能力很大程度上取决于底层模型:
推荐模型选择: | 模型 | 推理能力 | 函数调用 | 推荐度 | |—–|———|———|——-| | GPT-4 | 最强 | 原生支持 | ⭐⭐⭐⭐⭐ | | GPT-4-turbo | 很强 | 原生支持 | ⭐⭐⭐⭐⭐ | | Claude 3 Opus | 很强 | 支持 | ⭐⭐⭐⭐ | | GPT-3.5-turbo | 良好 | 原生支持 | ⭐⭐⭐ | | Claude 3 Sonnet | 良好 | 支持 | ⭐⭐⭐ |
步骤三:配置 Agent 指令 编写清晰的指令提示词,定义 Agent 的角色、能力和行为规范。
6.2.2 编写 Agent 指令
高质量的 Agent 指令应包含以下要素:
角色定义:
## 角色
你是一个专业的数据分析助手,擅长:
- 数据收集和清洗
- 统计分析和建模
- 数据可视化
- 报告撰写
能力说明:
## 能力
你可以使用以下工具完成任务:
1. 网络搜索:获取最新数据和信息
2. 代码执行:运行 Python 代码进行计算
3. 图表生成:创建数据可视化图表
4. 知识库检索:查询企业内部知识
工作流程:
## 工作流程
处理用户请求时,请遵循以下步骤:
1. 理解用户需求,明确分析目标
2. 制定分析计划,列出所需数据
3. 使用工具收集和处理数据
4. 进行分析并生成可视化
5. 撰写分析报告,给出建议
行为约束:
## 约束
- 确保数据来源可靠
- 分析结论要有数据支撑
- 遇到问题时主动说明并寻求用户确认
- 保护用户隐私和数据安全
6.2.3 配置示例
完整的 Agent 配置示例:
# 数据分析助手
## 角色定义
你是一个智能数据分析助手,帮助用户进行数据分析和洞察挖掘。
## 核心能力
1. **数据收集**:通过搜索引擎获取公开数据
2. **数据处理**:使用 Python 进行数据清洗和转换
3. **统计分析**:计算统计指标、进行相关性分析
4. **可视化**:生成图表展示分析结果
5. **报告生成**:撰写结构化的分析报告
## 工作方式
收到分析请求后:
1. 确认分析目标和范围
2. 制定分析计划
3. 逐步执行分析任务
4. 展示中间结果供用户确认
5. 输出最终分析报告
## 注意事项
- 对于敏感数据,请用户确认后再处理
- 分析结论需要有数据支撑
- 不确定的内容要明确标注
- 复杂任务分步骤执行,每步说明进度
6.3 推理模式配置
6.3.1 Function Calling 模式
Function Calling(函数调用)是现代 LLM 原生支持的工具调用机制。
工作原理:
- 将工具定义为函数 Schema 发送给模型
- 模型判断是否需要调用函数
- 若需要,模型输出结构化的函数调用
- 系统执行函数并返回结果
- 模型基于结果继续推理
优势:
- 调用准确率高
- 响应速度快
- 格式规范统一
支持的模型:
- OpenAI GPT 系列(gpt-3.5-turbo, gpt-4)
- Anthropic Claude 系列
- 部分开源模型(需特定微调)
配置方式: 在 Agent 设置中选择支持 Function Calling 的模型,系统会自动启用此模式。
6.3.2 ReAct 模式
ReAct(Reasoning + Acting)是一种通过提示词引导模型进行推理和行动的框架。
工作原理:
Thought: 我需要查找最新的销售数据
Action: search
Action Input: 2024年Q1销售数据报告
Observation: [搜索结果内容]
Thought: 我找到了数据,现在需要进行分析...
Action: code_execution
Action Input: import pandas as pd...
Observation: [代码执行结果]
Thought: 分析完成,我可以给出结论了
Final Answer: 根据分析...
优势:
- 兼容性广,支持更多模型
- 推理过程透明
- 可灵活调整策略
劣势:
- 准确率略低于 Function Calling
- Token 消耗较多
- 需要更多迭代
配置方式: 对于不支持 Function Calling 的模型,系统自动使用 ReAct 模式。
6.3.3 迭代次数配置
Agent 执行过程可能需要多次”思考-行动-观察”循环。
配置参数:
最大迭代次数: 5 # 防止无限循环
迭代超时: 60秒 # 单次迭代的时间限制
建议配置: | 任务复杂度 | 迭代次数 | |———–|———| | 简单任务 | 3 | | 中等任务 | 5 | | 复杂任务 | 10 |
6.3.4 模式选择建议
优先使用 Function Calling:
- 模型支持时首选
- 效果更好更稳定
- Token 消耗更少
使用 ReAct 的情况:
- 模型不支持 Function Calling
- 需要更详细的推理过程
- 调试和分析 Agent 行为
6.4 工具配置
6.4.1 添加工具
步骤:
- 进入 Agent 编排界面
- 点击”工具”配置区域
- 点击”添加工具”
- 选择需要的工具
- 配置工具参数
6.4.2 内置工具
Dify 提供了丰富的内置工具:
搜索工具: | 工具 | 功能 | 配置要求 | |—–|——|———| | Google 搜索 | 网络搜索 | API Key | | Bing 搜索 | 网络搜索 | API Key | | DuckDuckGo | 网络搜索 | 无需 Key | | Wikipedia | 百科搜索 | 无需 Key |
计算工具: | 工具 | 功能 | 配置要求 | |—–|——|———| | 代码执行器 | 运行 Python/JS | 无 | | WolframAlpha | 数学计算 | API Key | | 计算器 | 基础运算 | 无 |
生成工具: | 工具 | 功能 | 配置要求 | |—–|——|———| | DALL-E | 图像生成 | OpenAI Key | | Stable Diffusion | 图像生成 | 本地部署 | | 图表生成 | 数据可视化 | 无 |
其他工具: | 工具 | 功能 | 配置要求 | |—–|——|———| | HTTP 请求 | 调用 API | 无 | | 当前时间 | 获取时间 | 无 | | 天气查询 | 天气信息 | API Key |
6.4.3 工具授权配置
部分工具需要配置 API Key:
配置步骤:
- 进入”设置” → “工具”
- 找到需要配置的工具
- 点击”配置凭据”
- 输入 API Key
- 保存配置
示例 - 配置 Google 搜索:
工具: Google 搜索
API Key: your-google-api-key
搜索引擎 ID: your-search-engine-id
6.4.4 知识库作为工具
可以将知识库添加为 Agent 的工具:
配置步骤:
- 在”上下文”区域添加知识库
- 配置检索参数
- Agent 会在需要时自动检索
使用场景:
- 回答企业内部问题
- 查找产品信息
- 检索历史记录
6.4.5 自定义工具
通过 OpenAPI 规范导入自定义 API 工具:
步骤一:准备 OpenAPI Schema
openapi: 3.0.0
info:
title: 订单查询 API
version: 1.0.0
servers:
- url: https://api.example.com
paths:
/orders/{orderId}:
get:
summary: 查询订单详情
parameters:
- name: orderId
in: path
required: true
schema:
type: string
responses:
'200':
description: 订单信息
步骤二:导入工具
- 进入”工具” → “自定义工具”
- 点击”创建自定义工具”
- 粘贴 OpenAPI Schema
- 配置认证方式
- 测试并保存
6.4.6 工具使用建议
精选工具:
- 只添加必要的工具
- 工具过多会影响选择准确性
清晰描述:
- 确保工具描述准确清晰
- 帮助 Agent 正确选择工具
合理配置:
- 设置适当的超时时间
- 配置错误处理策略
6.5 Agent 调试
6.5.1 调试面板
Agent 调试面板显示完整的执行过程:
信息展示:
- 用户输入
- 思考过程(Thought)
- 工具调用(Action)
- 工具结果(Observation)
- 最终回答
6.5.2 日志分析
查看位置:
- 进入应用详情
- 点击”日志”标签
- 选择具体会话
日志内容:
会话 ID: xxx
开始时间: 2024-01-15 10:30:00
总耗时: 15.3s
执行步骤:
1. 思考: 分析用户需求
2. 行动: 调用搜索工具
- 输入: "2024年AI发展趋势"
- 结果: [搜索结果]
3. 思考: 整理搜索结果
4. 输出: 最终回答
Token 消耗:
- 输入: 2341
- 输出: 856
- 总计: 3197
6.5.3 常见问题排查
问题一:工具调用失败
原因:
- API Key 无效
- 网络连接问题
- 参数格式错误
解决:
- 检查工具配置
- 验证网络连通性
- 查看错误日志
问题二:无限循环
原因:
- 任务描述不清晰
- 工具返回结果不明确
- 迭代次数设置过高
解决:
- 优化 Agent 指令
- 改进工具描述
- 设置合理的迭代限制
问题三:选错工具
原因:
- 工具描述不准确
- 工具数量过多
- 任务理解偏差
解决:
- 优化工具描述
- 精简工具列表
- 在指令中明确工具用途
问题四:回答质量差
原因:
- 模型能力不足
- 提示词设计问题
- 上下文信息不足
解决:
- 升级到更强的模型
- 优化 Agent 指令
- 提供更多背景知识
6.6 高级技巧
6.6.1 多 Agent 协作
通过工作流实现多个 Agent 协作:
架构设计:
用户请求
↓
主 Agent(任务分配)
├── 研究 Agent(信息收集)
├── 分析 Agent(数据分析)
└── 写作 Agent(报告生成)
↓
结果整合
实现方式: 使用工作流的 Agent 节点串联多个 Agent。
6.6.2 记忆增强
短期记忆:
- 对话历史自动保存
- 配置记忆窗口大小
长期记忆:
- 使用知识库存储重要信息
- 定期总结对话内容
6.6.3 上下文管理
动态上下文:
# 根据对话阶段调整上下文
if task_phase == "收集":
context = research_context
elif task_phase == "分析":
context = analysis_context
else:
context = summary_context
6.6.4 工具链设计
设计合理的工具组合:
信息处理链:
搜索 → 网页抓取 → 文本提取 → 知识存储
数据分析链:
数据获取 → 代码执行 → 图表生成 → 报告撰写
6.6.5 错误恢复
重试策略:
工具调用失败时:
- 重试次数: 3
- 重试间隔: 递增
- 备选工具: 启用
降级处理:
无法完成任务时:
- 返回部分结果
- 说明失败原因
- 建议人工介入
6.7 实战案例
6.7.1 研究助手 Agent
功能需求:
- 根据主题搜索资料
- 整理和归纳信息
- 生成研究报告
Agent 配置:
# 研究助手
## 角色
你是一个专业的研究助手,帮助用户进行主题研究和信息整理。
## 工具
1. 网络搜索:搜索最新资讯和学术文献
2. 网页抓取:获取网页详细内容
3. 知识库检索:查询已有资料
## 工作流程
1. 理解研究主题和目的
2. 制定信息收集计划
3. 执行搜索和资料收集
4. 整理和归纳信息
5. 生成结构化报告
## 输出格式
研究报告应包含:
- 主题概述
- 关键发现
- 详细分析
- 结论建议
- 参考来源
6.7.2 代码助手 Agent
功能需求:
- 理解编程需求
- 编写代码实现
- 调试和测试
Agent 配置:
# 代码助手
## 角色
你是一个专业的编程助手,帮助用户编写和调试代码。
## 工具
1. 代码执行:运行 Python 代码
2. 文档搜索:查询 API 文档
## 工作方式
1. 理解用户的编程需求
2. 设计解决方案
3. 编写代码实现
4. 执行代码验证
5. 根据结果调整优化
## 代码规范
- 添加必要的注释
- 遵循 PEP8 规范
- 处理异常情况
- 提供使用说明
6.7.3 客服 Agent
功能需求:
- 理解客户问题
- 查询相关信息
- 提供解决方案
Agent 配置:
# 智能客服
## 角色
你是一个专业的客户服务代表,帮助客户解决问题。
## 工具
1. 知识库检索:查询产品信息和FAQ
2. 订单查询:查询订单状态
3. 工单创建:创建售后工单
## 服务流程
1. 友好问候,了解问题
2. 分析问题类型
3. 查询相关信息
4. 提供解决方案
5. 确认问题是否解决
6. 必要时升级人工
## 服务标准
- 始终保持礼貌和耐心
- 回答准确、简洁
- 主动提供帮助
- 保护客户隐私
6.8 本章小结
通过本章的学习,你应该掌握:
- Agent 概念:理解 Agent 的工作原理和优势
- 创建流程:掌握 Agent 应用的创建和配置
- 推理模式:了解 Function Calling 和 ReAct 的区别
- 工具配置:熟练添加和配置各类工具
- 调试技巧:学会调试和优化 Agent
- 实战应用:能够设计和实现实际的 Agent 应用
6.9 思考与练习
- 实践练习:
- 创建一个研究助手 Agent
- 实现一个代码生成和调试的 Agent
- 设计一个多工具协作的 Agent
- 思考题:
- Agent 相比普通聊天助手有哪些优势和挑战?
- 如何设计工具组合以提高 Agent 效率?
- 什么情况下应该使用 Agent 而不是工作流?
下一章预告:第七章将介绍工具与插件系统,包括插件生态、自定义工具开发和最佳实践。