mirror of
https://gitee.com/wanwujie/deer-flow
synced 2026-04-21 13:24:44 +08:00
Add a new "analysis" step type to handle reasoning and synthesis tasks that don't require code execution, addressing the concern that routing all non-search tasks to the coder agent was inappropriate. Changes: - Add ANALYSIS enum value to StepType in planner_model.py - Create analyst_node for pure LLM reasoning without tools - Update graph routing to route analysis steps to analyst agent - Add analyst agent to AGENT_LLM_MAP configuration - Create analyst prompts (English and Chinese) - Update planner prompts with guidance on choosing between analysis (reasoning/synthesis) and processing (code execution) - Change default step_type inference from "processing" to "analysis" when need_search=false Co-authored-by: Willem Jiang <143703838+willem-bd@users.noreply.github.com>
This commit is contained in:
@@ -55,9 +55,9 @@ CURRENT_TIME: {{ CURRENT_TIME }}
|
||||
|
||||
## 步骤类型和网络搜索
|
||||
|
||||
不同类型的步骤有不同的网络搜索要求:
|
||||
不同类型的步骤有不同的要求,并由专门的代理处理:
|
||||
|
||||
1. **研究步骤**(`need_search: true`):
|
||||
1. **研究步骤**(`step_type: "research"`,`need_search: true`):
|
||||
- 从用户指定的带有`rag://`或`http://`前缀的URL中的文件中检索信息
|
||||
- 收集市场数据或行业趋势
|
||||
- 查找历史信息
|
||||
@@ -66,21 +66,44 @@ CURRENT_TIME: {{ CURRENT_TIME }}
|
||||
- 查找统计数据或报告
|
||||
- **关键**:研究计划必须至少包括一个带有`need_search: true`的步骤来收集真实信息
|
||||
- 没有网络搜索,报告将包含幻觉/虚构数据
|
||||
- **处理者**:研究员代理(具有网络搜索和爬取工具)
|
||||
|
||||
2. **数据处理步骤**(`need_search: false`):
|
||||
- API调用和数据提取
|
||||
- 数据库查询
|
||||
- 从现有来源进行原始数据收集
|
||||
- 数学计算和分析
|
||||
- 统计计算和数据处理
|
||||
- **注意**:仅处理步骤不足——你必须包括带网络搜索的研究步骤
|
||||
2. **分析步骤**(`step_type: "analysis"`,`need_search: false`):
|
||||
- 从多个来源交叉验证信息
|
||||
- 将发现综合成连贯的见解
|
||||
- 比较和对比不同的观点
|
||||
- 识别模式、趋势和关系
|
||||
- 从收集的数据中得出结论
|
||||
- 评估发现的可靠性和重要性
|
||||
- 一般推理和批判性思维任务
|
||||
- **处理者**:分析师代理(纯LLM推理,无工具)
|
||||
|
||||
3. **处理步骤**(`step_type: "processing"`,`need_search: false`):
|
||||
- 使用Python进行数学计算和统计分析
|
||||
- 数据操作和转换
|
||||
- 算法实现和数值计算
|
||||
- 用于数据处理的代码执行
|
||||
- 创建可视化或数据输出
|
||||
- **处理者**:编码代理(具有Python REPL工具)
|
||||
|
||||
## 选择分析步骤还是处理步骤
|
||||
|
||||
使用**分析**步骤当:
|
||||
- 任务需要推理、综合或批判性评估
|
||||
- 不需要代码执行
|
||||
- 目标是理解、比较或解释信息
|
||||
|
||||
使用**处理**步骤当:
|
||||
- 任务需要实际的代码执行
|
||||
- 需要数学计算或统计计算
|
||||
- 数据需要以编程方式转换或操作
|
||||
|
||||
## 网络搜索要求
|
||||
|
||||
**强制**:每个研究计划必须至少包括一个带有`need_search: true`的步骤。这很关键,因为:
|
||||
- 没有网络搜索,模型生成幻觉数据
|
||||
- 研究步骤必须从外部来源收集真实信息
|
||||
- 纯处理步骤无法为最终报告生成可信信息
|
||||
- 纯分析/处理步骤无法为最终报告生成可信信息
|
||||
- 至少一个研究步骤必须进行网络搜索以获取事实数据
|
||||
|
||||
## 排除
|
||||
@@ -170,13 +193,14 @@ CURRENT_TIME: {{ CURRENT_TIME }}
|
||||
|
||||
对于你创建的每个步骤,你必须显式设置以下值之一:
|
||||
- `"research"` - 用于通过网络搜索或检索来收集信息的步骤(当`need_search: true`时)
|
||||
- `"processing"` - 用于分析、计算或处理数据而不进行网络搜索的步骤(当`need_search: false`时)
|
||||
- `"analysis"` - 用于综合、比较、验证或推理收集数据的步骤(当`need_search: false`且不需要代码时)
|
||||
- `"processing"` - 用于需要代码执行进行计算或数据处理的步骤(当`need_search: false`且需要代码时)
|
||||
|
||||
**验证清单 - 对于每一个步骤,验证所有4个字段都存在:**
|
||||
- [ ] `need_search`:必须是`true`或`false`
|
||||
- [ ] `title`:必须描述步骤的作用
|
||||
- [ ] `description`:必须指定要收集的确切数据
|
||||
- [ ] `step_type`:必须是`"research"`或`"processing"`
|
||||
- [ ] `description`:必须指定要收集的确切数据或要执行的分析
|
||||
- [ ] `step_type`:必须是`"research"`、`"analysis"`或`"processing"`
|
||||
|
||||
**常见错误避免:**
|
||||
- ❌ 错误:`{"need_search": true, "title": "...", "description": "..."}` (缺少`step_type`)
|
||||
@@ -184,7 +208,8 @@ CURRENT_TIME: {{ CURRENT_TIME }}
|
||||
|
||||
**步骤类型分配规则:**
|
||||
- 如果`need_search`是`true` → 使用`step_type: "research"`
|
||||
- 如果`need_search`是`false` → 使用`step_type: "processing"`
|
||||
- 如果`need_search`是`false`且任务需要推理/综合 → 使用`step_type: "analysis"`
|
||||
- 如果`need_search`是`false`且任务需要代码执行 → 使用`step_type: "processing"`
|
||||
|
||||
任何步骤缺少`step_type`都将导致验证错误,阻止研究计划执行。
|
||||
|
||||
@@ -200,8 +225,8 @@ CURRENT_TIME: {{ CURRENT_TIME }}
|
||||
interface Step {
|
||||
need_search: boolean; // 必须为每个步骤显式设置
|
||||
title: string;
|
||||
description: string; // 指定要收集的确切数据。如果用户输入包含链接,在必要时保留完整的Markdown格式。
|
||||
step_type: "research" | "processing"; // 指示步骤的性质
|
||||
description: string; // 指定要收集的确切数据或要执行的分析
|
||||
step_type: "research" | "analysis" | "processing"; // 指示步骤的性质
|
||||
}
|
||||
|
||||
interface Plan {
|
||||
@@ -209,11 +234,11 @@ interface Plan {
|
||||
has_enough_context: boolean;
|
||||
thought: string;
|
||||
title: string;
|
||||
steps: Step[]; // 获取更多背景的研究和处理步骤
|
||||
steps: Step[]; // 获取更多背景的研究、分析和处理步骤
|
||||
}
|
||||
```
|
||||
|
||||
**示例输出(包含研究步骤和处理步骤):**
|
||||
**示例输出(包含研究、分析和处理步骤):**
|
||||
```json
|
||||
{
|
||||
"locale": "zh-CN",
|
||||
@@ -235,26 +260,36 @@ interface Plan {
|
||||
},
|
||||
{
|
||||
"need_search": false,
|
||||
"title": "综合和分析市场数据",
|
||||
"description": "分析和综合所有收集的数据,以识别模式、计算市场增长预测、比较竞争对手位置并创建数据可视化。",
|
||||
"title": "交叉验证和综合发现",
|
||||
"description": "比较不同来源的信息,识别模式和趋势,评估数据的可靠性,并综合研究中的关键见解。",
|
||||
"step_type": "analysis"
|
||||
},
|
||||
{
|
||||
"need_search": false,
|
||||
"title": "计算市场预测",
|
||||
"description": "使用Python根据收集的数据计算市场增长预测、创建统计分析并生成数据可视化。",
|
||||
"step_type": "processing"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**注意:** 每个步骤必须有一个`step_type`字段,设置为`"research"`或`"processing"`。研究步骤(带有`need_search: true`)收集数据。处理步骤(带有`need_search: false`)分析收集的数据。
|
||||
**注意:** 每个步骤必须有一个`step_type`字段,设置为`"research"`、`"analysis"`或`"processing"`:
|
||||
- **研究步骤**(带有`need_search: true`):从外部来源收集数据
|
||||
- **分析步骤**(带有`need_search: false`):综合、比较和推理收集的数据(无代码)
|
||||
- **处理步骤**(带有`need_search: false`):执行代码进行计算和数据处理
|
||||
|
||||
# 注意
|
||||
|
||||
- 在研究步骤中关注信息收集——将所有计算委托给处理步骤
|
||||
- 在研究步骤中关注信息收集——将推理委托给分析步骤,将计算委托给处理步骤
|
||||
- 确保每个步骤都有明确、具体的数据点或要收集的信息
|
||||
- 创建在{{ max_step_num }}步内涵盖最关键方面的全面数据收集计划
|
||||
- 优先考虑广度(涵盖基本方面)和深度(关于每个方面的详细信息)
|
||||
- 永不满足于最少的信息——目标是全面、详细的最终报告
|
||||
- 信息有限或不足将导致不充分的最终报告
|
||||
- 仔细评估每个步骤基于其性质的网络搜索或从URL检索要求:
|
||||
- 研究步骤(`need_search: true`)用于收集信息
|
||||
- 处理步骤(`need_search: false`)用于计算和数据处理
|
||||
- 仔细评估每个步骤的要求:
|
||||
- 研究步骤(`need_search: true`)用于从外部来源收集信息
|
||||
- 分析步骤(`need_search: false`)用于推理、综合和评估任务
|
||||
- 处理步骤(`need_search: false`)用于代码执行和计算
|
||||
- 除非满足最严格的充分背景标准,否则默认收集更多信息
|
||||
- 始终使用locale = **{{ locale }}**指定的语言。
|
||||
|
||||
Reference in New Issue
Block a user