339 lines
9.5 KiB
Markdown
339 lines
9.5 KiB
Markdown
# Deep Research System - 开发流程指南
|
||
|
||
**框架:** DeepAgents (LangChain) | **最后更新:** 2025-10-31
|
||
|
||
---
|
||
|
||
## 🎯 开发优先级
|
||
|
||
### Phase 1: 基础架构 (Day 1-2)
|
||
|
||
**目标**: 搭建项目基础,配置开发环境
|
||
|
||
**环境配置:**
|
||
- [ ] 激活虚拟环境:`conda activate deep_research_env`
|
||
- [ ] 创建 `requirements.txt`(见开发文档)
|
||
- [ ] 安装依赖:`pip install -r requirements.txt`
|
||
- [ ] 验证DeepAgents安装:`python -c "import deepagents; print('OK')"`
|
||
|
||
**项目结构:**
|
||
- [ ] 创建目录结构(按开发文档 "项目结构" 章节)
|
||
- [ ] 创建 `.env` 文件(复制 `.env.example`)
|
||
- [ ] 配置 `.gitignore`(包含 `.env`)
|
||
|
||
**核心工具实现:**
|
||
- [ ] 创建 `src/config.py`(LLM配置和环境变量加载)
|
||
- [ ] 创建 `src/tools/search_tools.py`(实现 `batch_internet_search`)
|
||
- [ ] 测试 API 连接(DashScope + Tavily)
|
||
|
||
**验收标准**:
|
||
- ✅ `import deepagents` 成功
|
||
- ✅ API能成功调用(测试搜索功能)
|
||
- ✅ 批量搜索工具能真正并行执行(使用ThreadPoolExecutor)
|
||
|
||
**代码审查**: 完成后调用 `code-reviewer` 审查工具实现和配置文件
|
||
|
||
---
|
||
|
||
### Phase 2: SubAgent实现 (Day 3-5)
|
||
|
||
**目标**: 实现6个SubAgent的配置和系统提示词
|
||
|
||
- [ ] 创建 `src/agents/subagents.py`
|
||
- [ ] 实现 6个SubAgent配置(intent-analyzer, search-orchestrator, source-validator, content-analyzer, confidence-evaluator, report-generator)
|
||
- [ ] 编写单元测试验证配置格式
|
||
|
||
**验收标准**: 所有SubAgent使用正确字段名(`system_prompt` 不是 `prompt`),system_prompt足够详细,配置格式符合DeepAgents规范
|
||
|
||
**代码审查**: ⚠️ **必须审查** - SubAgent配置是核心组件
|
||
|
||
---
|
||
|
||
### Phase 3: 主Agent (Day 6-7)
|
||
|
||
**目标**: 实现ResearchCoordinator主Agent
|
||
|
||
- [ ] 创建 `src/agents/coordinator.py`
|
||
- [ ] 编写ResearchCoordinator系统提示词
|
||
- [ ] 集成SubAgent配置
|
||
- [ ] 测试整体流程(单次迭代)
|
||
- [ ] 调试迭代逻辑(多轮迭代)
|
||
|
||
**验收标准**: 主Agent能正确调用所有SubAgent,迭代逻辑正确,虚拟文件系统正常工作
|
||
|
||
**代码审查**: ⚠️ **必须审查** - 主Agent是系统核心
|
||
|
||
---
|
||
|
||
### Phase 4: CLI和打磨 (Day 8-10)
|
||
|
||
**目标**: 实现命令行界面和用户体验优化
|
||
|
||
- [ ] 实现CLI命令(research, config, history, resume)
|
||
- [ ] 实现进度显示 (Rich库)
|
||
- [ ] 完善错误处理和降级策略
|
||
- [ ] 编写用户文档
|
||
|
||
**验收标准**: 所有CLI命令功能正常,进度显示实时更新,错误信息友好
|
||
|
||
**代码审查**: 完成后整体审查
|
||
|
||
---
|
||
|
||
## 🔄 开发工作流与代码审查
|
||
|
||
### 开发-审查循环
|
||
|
||
```
|
||
开发阶段性功能 → 代码审查 → 修正问题 → 继续开发下一阶段
|
||
```
|
||
|
||
### 何时触发代码审查
|
||
|
||
| 触发时机 | 审查范围 | 优先级 |
|
||
|---------|---------|--------|
|
||
| **完成Phase任务** | 整个Phase的所有文件 | 🔴 必须 |
|
||
| **实现关键组件** | SubAgent配置、主Agent、工具实现 | 🔴 必须 |
|
||
| **重大重构** | 受影响的所有文件 | 🔴 必须 |
|
||
| **修复复杂bug** | 修改的文件 | 🟡 建议 |
|
||
|
||
### 如何使用代码审查子agent
|
||
|
||
#### 调用审查
|
||
|
||
```python
|
||
# 在主Claude Code窗口中
|
||
/task code-reviewer
|
||
|
||
# 然后提供上下文
|
||
"""
|
||
我刚完成了 Phase 2 的 SubAgent 配置,请审查以下文件:
|
||
1. src/agents/subagents.py - 6个SubAgent的配置
|
||
2. src/tools/search_tools.py - batch_internet_search工具
|
||
|
||
请检查是否符合DeepAgents框架规范和开发文档
|
||
"""
|
||
```
|
||
|
||
#### 审查报告包含
|
||
|
||
- ✅ 正确实现的部分
|
||
- ⚠️ 需要改进的部分(带建议代码)
|
||
- ❌ 必须修复的错误(带正确写法)
|
||
- 优先级标识(🔴高 / 🟡中 / 🟢低)
|
||
|
||
#### 处理审查结果
|
||
|
||
**🔴 高优先级(必须修复)**
|
||
- 立即修复,这些通常是框架规范错误
|
||
- 修复后建议再次审查确认
|
||
|
||
**🟡 中优先级(建议改进)**
|
||
- 评估是否影响功能
|
||
- 如果影响代码质量,建议修复
|
||
|
||
**🟢 低优先级(可选优化)**
|
||
- 记录到TODO列表
|
||
- 在时间允许时优化
|
||
|
||
### 代码审查子agent的能力边界
|
||
|
||
#### ✅ 子agent会做的
|
||
|
||
1. **详细审查** - 对照DeepAgents源码和开发文档检查
|
||
2. **提供建议** - 指出问题、提供修改建议和示例
|
||
3. **有限修正**(需征得同意)- 格式问题、拼写错误、简单API错误
|
||
|
||
#### ❌ 子agent不会做的
|
||
|
||
1. **大规模重构** - 保持代码所有权
|
||
2. **改变架构设计** - 架构决策由你主导
|
||
3. **添加新功能** - 只审查不扩展
|
||
4. **未经确认的修改** - 尊重开发决策
|
||
|
||
---
|
||
|
||
## 📊 进度管理(给Claude Code主窗口)
|
||
|
||
**重要区分:**
|
||
- 本节内容是给 **Claude Code 主窗口**看的,用于管理**开发Deep Research System的任务**
|
||
- 使用 Claude Code 的 `TodoWrite` 工具
|
||
- **不要与** DeepAgents 框架内部的 `write_todos` 工具混淆(那是给 ResearchCoordinator 主Agent用的)
|
||
|
||
### Claude Code 主窗口使用 TodoWrite 工具
|
||
|
||
**开发开始时**:
|
||
```
|
||
TodoWrite([
|
||
{"content": "Phase 1: 基础架构", "status": "in_progress", "activeForm": "搭建基础架构"},
|
||
{"content": "Phase 2: SubAgent实现", "status": "pending", "activeForm": "实现SubAgent"},
|
||
{"content": "Phase 3: 主Agent", "status": "pending", "activeForm": "实现主Agent"},
|
||
{"content": "Phase 4: CLI和打磨", "status": "pending", "activeForm": "实现CLI"}
|
||
])
|
||
```
|
||
|
||
**Phase完成时**:
|
||
```
|
||
TodoWrite([
|
||
{"content": "Phase 1: 基础架构", "status": "completed", "activeForm": "搭建基础架构"},
|
||
{"content": "Phase 2: SubAgent实现", "status": "in_progress", "activeForm": "实现SubAgent"},
|
||
...
|
||
])
|
||
```
|
||
|
||
### 代码审查集成到进度管理
|
||
|
||
```
|
||
TodoWrite([
|
||
{"content": "实现SubAgent配置", "status": "completed", "activeForm": "实现SubAgent配置"},
|
||
{"content": "代码审查 - SubAgent配置", "status": "in_progress", "activeForm": "审查SubAgent配置"},
|
||
{"content": "修复审查发现的问题", "status": "pending", "activeForm": "修复审查问题"},
|
||
{"content": "实现主Agent", "status": "pending", "activeForm": "实现主Agent"}
|
||
])
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ 关键注意事项
|
||
|
||
### 1. DeepAgents框架理解
|
||
|
||
**核心原则**:
|
||
- 主Agent不是传统Python程序流程控制
|
||
- 通过系统提示词引导LLM自主决策
|
||
- 通过文件读写实现状态管理
|
||
|
||
**错误示例**(Python循环):
|
||
```python
|
||
# ❌ 错误:不要这样写
|
||
while not finished:
|
||
search_results = search()
|
||
if validate(search_results):
|
||
finished = True
|
||
```
|
||
|
||
**正确方式**(系统提示词引导):
|
||
```python
|
||
# ✅ 正确:在system_prompt中描述逻辑
|
||
system_prompt = """
|
||
读取 /iteration_decision.json:
|
||
- 如果 decision="FINISH" → 生成报告
|
||
- 如果 decision="CONTINUE" → 回到搜索步骤
|
||
"""
|
||
```
|
||
|
||
### 2. 虚拟文件系统
|
||
|
||
**关键理解**:
|
||
- 文件存储在 `state["files"]` 字典中
|
||
- 主Agent和SubAgent共享同一个files对象
|
||
- 文件路径必须以 `/` 开头
|
||
|
||
**正确使用**:
|
||
```python
|
||
# ✅ 正确的文件路径
|
||
write_file("/search_queries.json", content)
|
||
read_file("/iteration_1/sources.json")
|
||
|
||
# ❌ 错误的文件路径
|
||
write_file("search_queries.json", content) # 缺少前导 /
|
||
```
|
||
|
||
### 3. 迭代控制
|
||
|
||
**关键理解**:
|
||
- 不使用Python `while`循环
|
||
- 系统提示词描述"如果...则..."逻辑
|
||
- LLM读取 `iteration_decision.json` 自主判断下一步
|
||
|
||
**实现方式**:
|
||
```python
|
||
# SubAgent (confidence-evaluator) 写入决策文件
|
||
{
|
||
"decision": "CONTINUE", # 或 "FINISH"
|
||
"current_iteration": 2,
|
||
"reason": "置信度未达标,需要继续搜索"
|
||
}
|
||
|
||
# 主Agent在system_prompt中被引导读取这个文件并决策
|
||
# LangGraph会持续调用主Agent直到它决定结束
|
||
```
|
||
|
||
### 4. 并行搜索
|
||
|
||
**关键理解**:
|
||
- 使用`ThreadPoolExecutor`实现真正的并发
|
||
- 不是简单的串行循环调用
|
||
|
||
**实现要点**:
|
||
```python
|
||
# ✅ 正确:使用ThreadPoolExecutor
|
||
with ThreadPoolExecutor(max_workers=5) as executor:
|
||
results = executor.map(search_single, queries)
|
||
|
||
# ❌ 错误:串行调用
|
||
for query in queries:
|
||
result = search(query) # 不是并行
|
||
```
|
||
|
||
### 5. 置信度计算
|
||
|
||
**严格遵守公式**:
|
||
```
|
||
置信度 = (来源可信度 × 50%) + (交叉验证 × 30%) + (时效性 × 20%)
|
||
|
||
来源可信度: Tier1=0.95, Tier2=0.80, Tier3=0.65, Tier4=0.45 (平均值)
|
||
交叉验证: 1源=0.4, 2-3源=0.7, 4+源=1.0, 有矛盾-0.3
|
||
时效性: <6月=1.0, 6-12月=0.9, 1-2年=0.7, 2-3年=0.5, >3年=0.3
|
||
```
|
||
|
||
**实现建议**:
|
||
- 在 `confidence-evaluator` 的 system_prompt 中详细说明公式
|
||
- 让LLM按步骤计算,而不是创建独立工具
|
||
|
||
### 6. 错误处理原则
|
||
|
||
**降级运行优先**:
|
||
- 部分失败不应导致整体失败
|
||
- 5个查询中2个失败 → 使用3个成功的继续
|
||
- 单个来源提取失败 → 不影响其他来源
|
||
|
||
**重试策略**:
|
||
- 自动重试2-3次(指数退避)
|
||
- 超时:降低并行度重试
|
||
- API限流:等待30秒后重试
|
||
|
||
---
|
||
|
||
## 📚 相关文档
|
||
|
||
- **开发文档**: `开发文档_V1.md` - 技术实现细节
|
||
- **需求文档**: `需求文档_V1.md` - 产品需求和业务逻辑
|
||
- **代码审查agent**: `.claude/agents/code-reviewer.md` - 审查规范
|
||
|
||
---
|
||
|
||
## 🎯 成功标准
|
||
|
||
### 代码质量
|
||
- [ ] 所有代码通过 `code-reviewer` 审查
|
||
- [ ] 符合DeepAgents框架规范
|
||
- [ ] 与开发文档完全一致
|
||
- [ ] 有适当的错误处理
|
||
|
||
### 功能完整性
|
||
- [ ] 所有Phase完成并测试通过
|
||
- [ ] 三种深度模式正常工作
|
||
- [ ] 迭代逻辑正确执行
|
||
- [ ] 报告生成符合规范
|
||
|
||
### 用户体验
|
||
- [ ] CLI命令响应快速
|
||
- [ ] 进度显示实时更新
|
||
- [ ] 错误信息清晰友好
|
||
- [ ] 配置简单直观
|
||
|
||
---
|
||
|
||
**文档版本:** 1.0 | **最后更新:** 2025-10-31
|