基于 ReAct 的 Agent 智能体设计完整指南
📋 方案概述
本文档提供了一套完整的 Agent 智能体构建方案,结合 LangGPT 结构化提示词 + ReAct 推理模式,用于处理需要多步推理、工具调用和知识整合的复杂任务。
核心理念:让 AI 像人类专家一样"先思考、再行动、再观察、再决策"。
🎯 适用场景
✅ 需要查阅专业知识库 + 联网搜索的任务
✅ 需要多步骤规划和动态决策的复杂查询
✅ 需要透明推理过程的教学/咨询场景
✅ 需要工具编排(检索、搜索、计算等)的应用
典型应用场景:
- 🎓 英语教学助手(语法 + 发音双重诊断)
- ⚖️ 法律顾问(法条检索 + 案例搜索)
- 🏥 医疗问诊(医学知识库 + 最新研究)
- 🔧 技术支持(产品文档 + 社区方案)
第一部分:结构化提示词设计
设计原则
基于 LangGPT 标准格式,采用五要素结构:
Role(角色定位)→ Goals(目标)→ Constraints(约束)→ Skills(技能/工具)→ Workflow(工作流)
核心要点:
- 强制 ReAct 循环:[Thought] → [Action] → [Observation] → [Response]
- 工具优先级:知识库优先 → 联网搜索补充 → 多源整合
- 推理透明化:向用户展示决策路径
- 拒绝幻觉:无依据时诚实告知
完整提示词模板
# Role
你是一位精通「美式发音训练」与「英语语法」的 AI 语言教学专家 (Senior Linguistic Agent)。
你拥有《English Grammar in Use》和《American Accent Training》知识库访问权限,同时具备联网搜索能力。
# Goals
1. **精准诊断**:分析用户句子的语法错误或发音难点
2. **权威引用**:优先基于知识库提供教材级别的解释
3. **动态补充**:当知识库无法覆盖时(如最新俚语),使用联网搜索工具
4. **教学闭环**:不仅给出答案,还提供针对性练习建议
# Constraints
1. **ReAct 思考原则**:在回答前必须执行 [Thought] → [Action] → [Observation] 推理循环
2. **知识优先级**:优先检索知识库,仅在无结果或相关度低时才调用搜索工具
3. **格式规范**:最终输出必须使用 Markdown 清晰分点陈述
4. **拒绝幻觉**:如果知识库和网络均无可靠信息,诚实回答"未找到权威依据"
5. **推理透明**:向用户展示你的查找路径和决策依据
# Skills (Available Tools)
1. **Knowledge_Retrieval**:查阅《English Grammar in Use》和《American Accent Training》
2. **Web_Search**:使用搜索引擎查找最新语言用法或补充例句
# Workflow (ReAct Loop)
## Phase 1: Thought - 分析与规划
**在执行任何操作前,必须先思考:**
- 用户意图是什么?(语法问题 / 发音问题 / 词汇解释)
- 该知识点属于哪个范畴?(经典语法 / 发音规则 / 新词俚语)
- 制定行动计划:
- 是否需要查知识库?(关键词是什么?)
- 知识库可能无法覆盖吗?(需要提前准备搜索)
- 需要组合多个信息源吗?
## Phase 2: Action - 执行工具调用
**按优先级执行:**
1. **Step 1**:调用 `Knowledge_Retrieval` 搜索核心关键词
2. **Step 2**:观察检索结果
- 如果相关度 ≥ 0.7 且内容充分 → 直接使用
- 如果相关度 < 0.6 或无结果 → 立即调用 `Web_Search`
3. **Step 3**:整合多源信息(知识库 + 搜索结果)
## Phase 3: Observation - 结果评估
**对每次工具调用的结果进行判断:**
- 信息是否充分?是否需要二次检索?
- 不同来源的信息是否矛盾?如何取舍?
- 是否需要调用其他工具补充?
## Phase 4: Response - 结构化输出
**按以下格式输出最终答案:**
### 🔍 分析路径
简述你的推理和查找过程(如:"已查阅《Grammar in Use》Unit 5,并通过搜索验证了最新用法...")
### ✅ 核心解答
- 给出修正后的正确句子或发音指导
- 用加粗/高亮标注关键修改点
### 📖 深度解析
- 解释背后的语法规则或发音原理
- 引用知识库出处(如"Unit 12: Present Perfect")
- 对比常见错误用法
### 🗣️ 练习建议
- 提供 1-2 个针对性练习句
- 给出跟读或改写任务
### 📚 拓展资源(可选)
- 如果网络搜索发现了优质资料,提供链接
# Initialization
我已准备就绪。请直接发送你要分析的句子或问题,我将启动 ReAct 推理流程为你解答。
推理模式设置
在 Dify Agent 配置中,选择合适的推理模式:
| 模式 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|
| Function Calling | 模型原生支持时 | 速度快、准确率高、Token 消耗低 | 依赖模型能力 |
| ReAct | 通用场景 | 推理过程可见、易调试、灵活性高 | Token 消耗高 |
推荐配置:
- ✅ 优先选择 Function Calling(GPT-4, Claude 3.5, DeepSeek-V3)
- ✅ 如果模型不支持,降级为 ReAct
- ✅ 开发阶段开启「显示思考过程」便于调试
高级参数调优
# 模型参数
Temperature: 0.3 # 降低随机性,提高准确性
Max Tokens: 2000 # 确保能输出完整解析
Top P: 0.9 # 保持输出质量
Presence Penalty: 0.1 # 减少重复表述
Frequency Penalty: 0.0 # 不限制专业术语频率
# 检索参数
Top K: 3-5 # 返回最相关的 3-5 个片段
Score Threshold: 0.6 # 相关度阈值
Rerank: true # 启用重排序(如果支持)
# 搜索参数
Max Results: 5 # 最多返回 5 个搜索结果
Timeout: 10s # 搜索超时时间
Safe Search: moderate # 中等安全搜索级别
最终输出示例
用户输入:
What's the difference between 'I live in Shanghai' and 'I am creating a Rizz app'?
🔍 分析路径
我查阅了《English Grammar in Use》Unit 3 确认了 live 的时态用法,并通过联网搜索获取了 Rizz 的最新定义(Oxford Word of the Year 2023)。
✅ 核心解答
-
"I live in Shanghai" ✅ 正确
live是状态动词,描述长期居住状态- 不应使用进行时
I am living(除非强调临时性)
-
"I am creating a Rizz app" ✅ 正确
create是动作动词,可以用进行时表示正在进行的开发工作
📖 深度解析
语法规则(来源:Unit 3):
- 状态动词(Stative Verbs):live, know, like, understand
- 描述状态而非动作,通常不用进行时
- 例外:当 live 强调"临时居住"时可用进行时
- "I'm living in a hotel this week." ✅
词汇解析(来源:Web Search):
- Rizz /rɪz/
- 词源:Charisma 的缩写(连读:Cha-ris-ma → Rizz)
- 含义:吸引异性的魅力或技巧
- 例句:"He's got serious rizz!"(他很有魅力!)
🗣️ 练习建议
-
时态对比练习:
- I live in Beijing. (permanent)
- I 'm living in a hotel. (temporary)
-
Rizz 用法练习: 用一句话描述你的 app: "This app helps users improve their rizz through AI-powered conversation tips."
📚 拓展资源
第二部分:Dify Agent 配置指南
1️⃣ 创建 Agent 应用
操作路径:
Dify 首页 → 创建应用 → 选择「Agent (智能体)」→ 基础编排模式
注意事项:
- ❌ 不要使用"聊天助手"或"工作流"模式(它们不支持动态推理)
- ✅ Agent 模式会自动规划工具调用顺序,无需手动连线
- ✅ 支持中途改变决策(如检索失败后自动切换搜索)
2️⃣ 模型选择
| 推荐模型 | 平台 | 推理能力 | 成本 | Function Calling |
|---|---|---|---|---|
| DeepSeek-V3 | 硅基流动 | ⭐⭐⭐⭐⭐ | 💰 | ✅ |
| Qwen2.5-72B | 硅基流动 | ⭐⭐⭐⭐ | 💰💰 | ✅ |
| GPT-4o | OpenAI | ⭐⭐⭐⭐⭐ | 💰💰💰 | ✅ |
| Claude 3.5 Sonnet | Anthropic | ⭐⭐⭐⭐⭐ | 💰💰💰 | ✅ |
配置要求:
- ✅ 必须支持 Function Calling(工具调用)
- ✅ 上下文窗口 ≥ 32K(用于处理长知识库检索结果)
- ✅ 推理能力强(能理解复杂的 ReAct 指令)
3️⃣ 工具配置
在 Agent 编排页面的 「工具 (Tools)」 栏目添加:
🔧 工具 1:知识库检索
类型: Knowledge Retrieval
数据源: 选择已创建的「English Book」知识库
检索模式: 语义检索(Semantic Search)
Top K: 3-5
相关度阈值: 0.6
重排序: 启用(如果支持)
知识库准备建议:
- 将《English Grammar in Use》和《American Accent Training》拆分成章节上传
- 每个文档添加元数据(如 Unit 编号、主题标签)
- 使用高质量的 Embedding 模型(如 text-embedding-3-large)
🔧 工具 2:联网搜索
类型: Web Search
推荐插件: DuckDuckGo / Tavily / SerpAPI
最大结果数: 5
超时设置: 10 秒
语言偏好: English
安全搜索: 中等
可选工具:
- 🎵 发音合成(Azure TTS / ElevenLabs):朗读纠正后的句子
- 📝 例句生成(GPT-4 Mini):生成场景化练习句
- 🎨 图表生成(Python Code Interpreter):可视化语法结构
4️⃣ Agent Mode 配置
在模型配置区找到「代理模式 (Agent Mode)」:
# 推荐配置
Agent Mode: Function Calling # 优先选择
Max Iterations: 10 # 最多推理 10 轮
Tool Choice: auto # 自动选择工具
Parallel Tool Calls: false # 按顺序调用(确保逻辑清晰)
Show Reasoning: true # 开发阶段开启
降级方案(如果模型不支持 Function Calling):
Agent Mode: ReAct
Max Iterations: 8
Scratchpad: enabled # 启用草稿本记录推理过程
第三部分:实战案例解析
案例 1:经典语法 + 新词混合查询
输入:
Is "I'm loving this Rizz app" correct?
ReAct 推理过程:
💭 Thought:
- "loving" 是状态动词 → 检查知识库规则
- "Rizz" 是流行词 → 需要联网确认含义
- 计划:先查语法书,再搜索词汇
🔨 Action 1:
Tool: Knowledge_Retrieval
Query: "state verbs love continuous"
Result:
- Unit 4: "Love 通常不用进行时"
- 例外:某些语境下可以用(强调临时感受)
- 相关度:0.92
👁️ Observation 1:
知识库给出了规则和例外,但需要判断 "loving this app" 是否属于例外
🔨 Action 2:
Tool: Web_Search
Query: "I'm loving it grammar modern usage"
Result:
- McDonald's slogan 使得这种用法在口语中被接受
- 语法学家认为在广告/口语中可以接受
👁️ Observation 2:
现代英语中,"I'm loving" 在非正式场合已被广泛接受
最终输出:
🔍 分析路径
检索了《Grammar in Use》Unit 4 关于状态动词的规则,并搜索了现代英语的实际用法。
✅ 核心解答
"I'm loving this Rizz app" 在口语/社交媒体中 ✅ 可接受
在正式写作中 ⚠️ 建议改为 "I love this Rizz app"
📖 深度解析
- 传统语法:love 是状态动词,原则上不用进行时
- 现代用法:McDonald's "I'm lovin' it" 的成功使这种用法在口语中普及
- 语境判断:
- 社交媒体/广告 → 可以使用(强调当下的强烈感受)
- 学术写作/正式文档 → 避免使用
🗣️ 练习建议
对比以下句子,感受语气差异:
- I love your app. (客观事实)
- I'm loving your app! (此刻的强烈情感)
案例 2:多轮推理 + 工具切换
输入:
How do you pronounce "schedule"? Is it different in American English?
ReAct 推理过程:
💭 Thought:
- 发音问题 → 优先查《American Accent Training》
- 涉及美英差异 → 可能需要补充搜索
🔨 Action 1:
Tool: Knowledge_Retrieval
Query: "schedule pronunciation American"
Result:
- Chapter 7: "Schedule 在美式发音为 /ˈskedʒuːl/"
- 相关度:0.88
👁️ Observation 1:
知识库给出了美式发音,但没有提到英式发音对比
🔨 Action 2:
Tool: Web_Search
Query: "schedule pronunciation British vs American"
Result:
- 英式:/ˈʃedjuːl/
- 美式:/ˈskedʒuːl/
- 历史:美国独立后的拼写改革影响
👁️ Observation 2:
获得了完整的对比信息,可以整合输出
最终输出:
🔍 分析路径
查阅了《American Accent Training》Chapter 7,并搜索了美英发音差异的历史原因。
✅ 核心解答
American English: /ˈskedʒuːl/ (SKED-jool)
British English: /ˈʃedjuːl/ (SHED-yool)
📖 深度解析
-
美式发音要点:
- 首音节强调:SKED-jool
- "ch" 发 /k/ 音(如 school)
-
为什么不同?
- 18 世纪美国独立后,Noah Webster 推动拼写改革
- 美式倾向于"读什么写什么"的发音逻辑
🗣️ 练习建议
跟读对比句:
- 🇺🇸 "What's your schedule /ˈskedʒuːl/ today?"
- 🇬🇧 "What's your schedule /ˈʃedjuːl/ today?"
第四部分:优化建议
提示词优化方向
1. 增加错误处理机制
# Error Handling
- 如果工具调用失败,尝试改写关键词重试(最多 2 次)
- 如果知识库和搜索均无结果,提供相关主题的替代建议
- 如果检索到矛盾信息,标注不同来源的观点并说明取舍依据
# Fallback Strategy
当所有工具都失败时:
1. 基于通用语言学知识给出保守建议
2. 明确告知"这是基于常规规则的推测"
3. 建议用户查阅权威词典或咨询专业人士
2. 添加用户画像适配
# User Context Adaptation
- 默认用户英语水平:中级(CEFR B1-B2)
- 如果用户提问涉及高级语法(如虚拟语气),提升解释深度
- 如果用户使用简单句提问,避免过于学术的术语
- 根据历史对话调整例句难度
# Dynamic Difficulty
- 初次互动:使用日常例句
- 多轮对话后:根据用户反馈调整专业度
3. 增强交互性
# Interactive Features
- 在解答后提供后续选项:
- 🅰️ 更多例句
- 🅱️ 相关语法点
- 🅲️ 发音示范
- 🅳️ 练习测试
- 对于复杂问题,询问:"需要我深入解释哪个部分?"
- 提供"简化版"和"完整版"两种输出模式切换
4. 增加知识溯源
# Citation & Sources
- 知识库引用格式:[来源:《Grammar in Use》Unit 12, P.45]
- 网络搜索引用格式:[来源:Oxford Dictionary Online, 2024-01-15]
- 如果结合多个来源,标注"综合以下 3 个来源:..."
Agent 配置优化
1. 知识库优化策略
分层检索:
Layer 1 (粗检索):
- Method: BM25 关键词匹配
- Top K: 20
- Purpose: 快速定位相关章节
Layer 2 (精检索):
- Method: Semantic Embedding
- Top K: 5
- Rerank: BAAI/bge-reranker-large
- Purpose: 找到最相关的段落
元数据增强:
{
"doc_id": "grammar_unit_12",
"title": "Present Perfect Tense",
"level": "intermediate",
"tags": ["tense", "perfect", "have+pp"],
"unit": 12,
"page": 24
}
2. 工具编排优化
并行调用(适用于独立查询):
# 当用户同时问语法和发音时
Parallel:
- Tool: Knowledge_Retrieval
Query: "present perfect grammar"
- Tool: Knowledge_Retrieval
Query: "perfect pronunciation"
条件分支(适用于依赖关系):
IF Knowledge_Retrieval.score < 0.6:
THEN Web_Search
ELSE:
SKIP Web_Search
3. 性能优化
缓存策略:
# 知识库缓存
Cache TTL: 7 days
Cache Key: query_hash + knowledge_base_version
# 搜索结果缓存
Cache TTL: 1 day
Cache Key: search_query_hash
速率限制:
# 防止工具调用过多
Max Tool Calls Per Turn: 5
Max Total Calls Per Session: 50
Cooldown: 100ms between calls
Token 优化:
# 截断策略
Knowledge Result Max Tokens: 800
Search Result Max Tokens: 300
Total Context Max Tokens: 2000
第五部分:进阶技巧
1. 多模态输入支持
语音输入处理:
# Voice Input Handler
IF input_type == "audio":
1. 使用 Whisper API 转写为文本
2. 识别发音错误(对比标准音标)
3. 在回答中标注实际发音 vs 标准发音
图片输入处理(如拍照笔记):
# Image Input Handler
IF input_type == "image":
1. 使用 OCR 提取文本
2. 识别手写标注的疑问点
3. 针对标注部分重点解释
2. 个性化记忆系统
知识点追踪:
{
"user_id": "user_123",
"weak_points": [
"present_perfect",
"pronunciation_th"
],
"mastered_points": [
"simple_past",
"articles"
],
"practice_history": [...]
}
自适应推荐:
# Adaptive Practice
基于用户弱点,在每次回答后附加:
"💡 顺便一提,你之前问过 Present Perfect,今天的例句也用到了这个时态,注意看..."
✅ 部署前检查清单
基础配置
- 提示词已完整复制到 Agent 系统提示词
- 模型选择正确且支持 Function Calling / ReAct
- Agent Mode 已配置(Function Calling 优先)
- Temperature 设置为 0.3-0.5(平衡准确性和创造性)
工具配置
- 知识库已创建并上传全部文档
- 知识库检索参数已调优(Top K, Score Threshold)
- 联网搜索工具已启用并测试可用
- 可选工具(TTS/图表等)已根据需求配置
测试验证
- 测试用例 1:纯语法问题(应仅调用知识库)
- 测试用例 2:新词问题(应调用搜索)
- 测试用例 3:混合问题(应依次调用两个工具)
- 推理过程日志清晰可读
- Token 消耗在预算范围内(< 2000 tokens/query)
用户体验
- 输出格式美观(Markdown 渲染正常)
- 分析路径清晰(用户能理解 AI 的决策过程)
- 练习建议实用(可直接使用)
- 响应速度 < 10 秒
安全性
- 知识库内容无版权问题
- 搜索工具已开启安全搜索
- 无敏感信息泄露风险
- 错误处理完善(工具调用失败时不崩溃)
🔗 相关资源
文档与教程
推荐工具
- 知识库管理: Dify Knowledge Base / LangChain Document Loader
- 搜索 API: Tavily (AI 优化) / SerpAPI (全面) / DuckDuckGo (免费)
- 语音合成: Azure TTS / ElevenLabs / OpenAI TTS
- 重排序模型: BAAI/bge-reranker / Cohere Rerank
进阶阅读
- Anthropic - Prompt Engineering Guide
- OpenAI - Best Practices for Agent Development
- Google - Responsible AI Practices
文档版本:v2.0
最后更新:2025-01-21
适用平台:Dify / LangChain / Semantic Kernel / AutoGPT
许可协议:MIT License
附录:常见问题解答
Q1: 为什么推荐 DeepSeek-V3 而不是 GPT-4?
A: 在成本敏感的场景下,DeepSeek-V3 提供了接近 GPT-4 的推理能力,但价格仅为 1/10。对于教育类应用,性价比更高。如果预算充足且需要最佳效果,GPT-4o 仍是首选。
Q2: ReAct 和 Chain-of-Thought (CoT) 有什么区别?
A:
- CoT:只有思考过程,没有工具调用(纯推理)
- ReAct:思考 + 行动 + 观察的闭环(可调用外部工具)
简单说,ReAct = CoT + Tool Use
Q3: 如何判断知识库检索失败需要调用搜索?
A: 设置 Score Threshold = 0.6,当检索结果的相关度分数 < 0.6 时,自动触发搜索。也可以在提示词中指定关键词黑名单(如 "Rizz", "Skibidi" 等新词直接搜索)。
Q4: Agent 推理轮次过多导致超时怎么办?
A:
- 减少 Max Iterations(如 10 → 5)
- 在提示词中增加"2 轮内必须给出答案"的硬约束
- 使用 Function Calling 而非 ReAct(速度更快)
Q5: 能否用这套方案做非英语教学的 Agent?
A: 完全可以!只需替换 Role、Goals 和知识库内容。例如:
- 法律顾问:知识库 = 法律条文,搜索 = 案例库
- 医疗问诊:知识库 = 医学教科书,搜索 = 最新研究
- 编程助手:知识库 = 官方文档,搜索 = Stack Overflow
核心框架(ReAct + 工具编排)是通用的。