feat: add analysis step type for non-code reasoning tasks (#677) (#723)

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:
Willem Jiang
2025-11-29 09:46:55 +08:00
committed by GitHub
parent 2cc19d6309
commit 2e010a4619
10 changed files with 264 additions and 67 deletions

View File

@@ -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 }}**指定的语言。