Files
PlantAI-dev/docs/AGENT_WORKFLOW_DESIGN.md
T
2026-08-03 18:42:47 +08:00

502 lines
14 KiB
Markdown
Executable File

# BBAV20311 Agent工作流设计文档
> 基于荔枝SPL基因家族案例的完整多Agent协作流程
> 版本: 1.0
> 日期: 2026-04-08
---
## 一、整体架构
```
用户提问
↓
[RouterAgent] 意图识别
↓
├─ FAQ/知识查询 → [KnowledgeAgent] → RAG检索 → 回答用户
├─ 分析请求 → [PlanningAgent] → 生成方案 → 询问确认
└─ 执行指令 → [ExecutionAgent] → 执行分析 → 返回结果
执行过程中:
- 出错 → [DiagnosisAgent] → 修复 → [LearningAgent]记录
- 完成 → [ValidatorAgent]验证 → [ResultParserAgent]解析
- 报告 → [KnowledgeAgent]增强 → 生成最终报告
```
---
## 二、场景流程详解
### 场景1: SPL基因家族知识查询
**用户输入**: "总结下SPL基因家族"
**Agent协作**:
| Agent | 动作 | 输出 |
|-------|------|------|
| RouterAgent | 意图识别 | `mode: FAQ`, `confidence: 0.95` |
| KnowledgeAgent | RAG检索 | SPL家族定义、功能、研究进展 |
**RAG检索内容**:
- SPL = SQUAMOSA PROMOTER BINDING PROTEIN-LIKE
- 主要功能: 调控开花时间、植物发育
- 结构域: SBP domain (PF03110)
- 研究进展: 拟南芥15个成员,水稻19个成员...
---
### 场景2: 荔枝SPL研究现状查询
**用户输入**: "荔枝的SPL基因家族是否有发表过相关的文章"
**Agent协作**:
| Agent | 动作 | 输出 |
|-------|------|------|
| RouterAgent | 意图识别 | `mode: FAQ`, `query: 荔枝SPL文献` |
| KnowledgeAgent | RAG检索 | 检索文献库 |
**RAG检索策略**:
```python
# 检索关键词组合
queries = [
"Litchi chinensis SPL",
"荔枝 SPL基因家族",
"Litchi SQUAMOSA PROMOTER BINDING PROTEIN",
"荔枝 开花调控 SPL"
]
# 结果处理
if found_papers:
return "已发现X篇相关文献: [列表]"
else:
return "目前未发现荔枝SPL基因家族的专门研究文献,这是一个潜在的研究空白。"
```
---
### 场景3: 研究可行性分析与方案规划
**用户输入**: "如果我想开展荔枝的SPL基因家族研究,可以吗?"
**Agent协作**:
| Agent | 动作 | 输出 |
|-------|------|------|
| RouterAgent | 意图识别 | `mode: ANALYSIS`, `target: 荔枝SPL` |
| KnowledgeAgent | 数据可用性检索 | 基因组、转录组数据状态 |
| PlanningAgent | 方案生成 | 完整分析计划 |
**PlanningAgent输出示例**:
```yaml
analysis_plan:
target_species: "Litchi chinensis (荔枝)"
gene_family: "SPL"
reference_genome:
status: available
source: "NCBI / 华南农业大学"
genome_fasta: "Lchi_v1.0.genome.fasta"
gff3: "Lchi_v1.0.gff3"
cds: "Lchi_v1.0.cds.fasta"
pep: "Lchi_v1.0.pep.fasta"
download_url: "https://www.ncbi.nlm.nih.gov/genome/..."
local_path: "/data/litchi/"
comparative_species:
- species: "Arabidopsis thaliana"
reason: "模式植物,功能验证"
files: "Ath.*"
- species: "Oryza sativa"
reason: "单子叶代表"
files: "Osa.*"
- species: "Solanum lycopersicum"
reason: "果实发育"
files: "Sly.*"
transcriptome_data:
status: available
source: "NCBI SRA"
samples:
- id: "SRRxxxx"
tissue: "flower"
condition: "blooming"
- id: "SRRxxxx"
tissue: "leaf"
condition: "control"
analysis_stages:
- identify: "基因家族鉴定"
- phylogeny: "系统发育分析"
- domain: "结构域分析"
- motif: "motif分析"
- expression: "表达模式分析"
- promoter: "启动子分析"
- synteny: "共线性分析"
estimated_time: "3-5天"
estimated_cost: "$50-100 (API调用)"
next_action: "等待用户确认执行"
```
**用户确认后**:
```
系统询问: "分析方案已生成,是否立即执行?"
用户选择: [执行分析] / [修改参数] / [取消]
```
---
### 场景4: 分析执行
**用户输入**: "执行分析"
**Agent协作**:
| Agent | 动作 | 输出 |
|-------|------|------|
| RouterAgent | 意图识别 | `mode: EXECUTE` |
| ExecutionAgent | 文件检查 | 命名规范验证 |
| ExecutionAgent | 参数确认 | 弹窗/自动默认 |
| ExecutionAgent | 阶段执行 | 逐阶段执行分析 |
| DiagnosisAgent | 错误诊断 | 出错时介入 |
| LearningAgent | 学习优化 | 记录修复方案 |
**文件命名检查**:
```python
naming_rules = {
"genome": r"^\w+\.genome\.fasta$", # Lchi.genome.fasta
"gff3": r"^\w+\.gff3$", # Lchi.gff3
"cds": r"^\w+\.cds\.fasta$", # Lchi.cds.fasta
"pep": r"^\w+\.pep\.fasta$", # Lchi.pep.fasta
"hmm": r"^\w+\.hmm$", # SPL.hmm
}
# 检查用户上传的文件
for file in uploaded_files:
if not validate_naming(file, naming_rules):
return f"文件 {file} 命名不规范,请按以下格式命名: [示例]"
```
**参数确认机制**:
```python
# 默认参数
default_params = {
"prefix": "Lchi.SPL",
"cpu": 8,
"evalue": 1e-5,
"max_target_seqs": 10,
}
# 弹窗确认(30秒超时)
user_confirmed = await show_confirmation_dialog(
params=default_params,
timeout=30 # 秒
)
if user_confirmed is None: # 超时
logger.info("用户30秒内未确认,使用默认参数")
params = default_params
elif user_confirmed is True: # 用户确认
params = default_params
else: # 用户修改
params = user_confirmed
```
---
### 场景5: 错误诊断与学习
**触发条件**: 分析阶段执行失败
**DiagnosisAgent工作流程**:
```python
class DiagnosisAgent:
async def diagnose(self, error: ExecutionError) -> DiagnosisResult:
# 1. 错误分类
error_type = self.classify_error(error)
# 2. 根因分析
root_cause = await self.analyze_root_cause(error)
# 3. 生成修复方案
fix_plan = await self.generate_fix(root_cause)
# 4. 执行修复
success = await self.apply_fix(fix_plan)
# 5. 测试验证
if success:
test_result = await self.test_fix()
# 6. 记录学习
await self.learning_agent.record_fix(error, fix_plan, test_result)
return DiagnosisResult(
error_type=error_type,
root_cause=root_cause,
fix_applied=fix_plan,
test_passed=test_result.success
)
```
**LearningAgent记录**:
```python
learning_record = {
"timestamp": "2026-04-08T10:30:00",
"error_type": "FileNotFoundError",
"error_message": "genome file not found: Lchi.genome.fa",
"root_cause": "文件扩展名不匹配,期望.fasta,实际.fa",
"fix_strategy": "自动检测并适配文件扩展名变体",
"code_changes": {
"file": "run_identify.py",
"line": 45,
"change": "添加扩展名适配逻辑"
},
"test_result": "passed",
"future_prevention": "在文件检查阶段增加扩展名变体检测"
}
```
---
### 场景6: 结果验证与报告生成
**Agent协作**:
| Agent | 动作 | 输出 |
|-------|------|------|
| ValidatorAgent | 结果验证 | 完整性/质量检查 |
| ResultParserAgent | 结果解析 | 关键发现提取 |
| KnowledgeAgent | RAG增强 | 文献对比、功能注释 |
**ValidatorAgent检查项**:
```python
validation_checks = {
"completeness": {
"required_files": [
"final/Lchi.SPL.pep.fasta",
"final/Lchi.SPL.cds.fasta",
"final/Lchi.SPL.geneID.txt",
"final/Lchi.SPL.domain.txt"
],
"required_stages": [
"identify", "phylogeny", "domain"
]
},
"quality": {
"min_genes": 10,
"max_genes": 100,
"phylogeny_bootstrap": 70,
"domain_coverage": 0.8
}
}
```
**最终报告结构**:
```markdown
# 荔枝SPL基因家族分析报告
## 执行摘要
- 鉴定到XX个SPL基因
- 分为X个亚家族
- 发现X个潜在功能基因
## 详细结果
### 1. 基因家族鉴定
- 基因列表: [表格]
- 染色体分布: [图]
### 2. 系统发育分析
- 进化树: [图]
- 与拟南芥/水稻比较
### 3. 功能预测
- 基于文献对比的功能注释
- 开花相关基因预测
## 生物学意义
- 荔枝SPL家族的扩张/收缩模式
- 与其他物种的差异
- 潜在研究方向
## 方法
- 分析工具: HMMER, MAFFT, IQTREE...
- 参数设置
- 可复现性信息
```
---
## 三、Agent状态流转
```
[RouterAgent]
↓
识别意图 → 路由到对应Agent
↓
├─ FAQ → [KnowledgeAgent] → 完成
├─ ANALYSIS → [PlanningAgent] → 等待确认
│ ↓
│ 用户确认
│ ↓
└─ EXECUTE → [ExecutionAgent] → 执行阶段
↓
阶段执行
↓
┌──────────┴──────────┐
↓ ↓
成功 失败
↓ ↓
[ValidatorAgent] [DiagnosisAgent]
↓ ↓
[ResultParserAgent] 修复代码
↓ ↓
[KnowledgeAgent] 测试修复
↓ ↓
生成报告 [LearningAgent]
↓ ↓
完成 记录并继续
```
---
## 四、关键设计决策
### 1. 30秒超时自动执行
- **目的**: 减少用户等待,提高效率
- **实现**: 前端倒计时 + 后端默认参数
- **可配置**: 用户可调整超时时间
### 2. DiagnosisAgent自动修复
- **范围**: 仅限于常见错误(文件路径、参数错误)
- **限制**: 复杂错误需人工介入
- **安全**: 修复前备份原代码
### 3. LearningAgent记录
- **存储**: 本地数据库 + 可选上传
- **隐私**: 不上传用户数据,仅上传错误模式
- **用途**: 改进系统,不用于商业
### 4. RAG知识增强
- **来源**: 已发表论文、数据库
- **更新**: 定期同步最新文献
- **引用**: 报告中标注文献来源
---
## 五、前端交互设计
### 主界面布局
```
┌─────────────────────────────────────────────────────────────┐
│ [标题] BBAV20311 - Agent Assistant [模型选择] [状态] │
├──────────────┬──────────────────────────────┬───────────────┤
│ │ │ │
│ 文件上传 │ Agent对话区域 │ 分析结果 │
│ │ │ │
│ [上传区] │ User: 荔枝SPL基因家族... │ [结果面板] │
│ │ │ │
│ 命名规范 │ Agent: 正在检索... │ [图片预览] │
│ [示例] │ │ │
│ │ [参数确认弹窗 - 30秒倒计时] │ [下载按钮] │
│ │ │ │
├──────────────┴──────────────────────────────┴───────────────┤
│ [输入框] 请输入您的问题... [发送] [RAG/Skill] │
└─────────────────────────────────────────────────────────────┘
```
### 参数确认弹窗
```
┌─────────────────────────────────────┐
│ 参数确认 [X] │
├─────────────────────────────────────┤
│ 分析阶段: identify │
│ 物种: Litchi chinensis │
│ 基因家族: SPL │
│ CPU: 8 │
│ E-value: 1e-5 │
│ │
│ [修改参数] [确认] (29s) │
└─────────────────────────────────────┘
```
---
## 六、API设计
### 核心端点
```python
# 1. 聊天/意图识别
POST /api/agent/chat
{
"message": "荔枝的SPL基因家族是否有发表过相关文章",
"session_id": "uuid"
}
# 2. 生成分析方案
POST /api/agent/plan
{
"species": "Litchi chinensis",
"gene_family": "SPL",
"session_id": "uuid"
}
# 3. 执行分析
POST /api/agent/execute
{
"plan_id": "plan_uuid",
"params": {...}, # 用户确认或修改的参数
"auto_confirm": false # 是否自动确认(30秒超时后)
}
# 4. 查询任务状态
GET /api/agent/status/{task_id}
# 5. 诊断错误
POST /api/agent/diagnose
{
"task_id": "task_uuid",
"error_log": "..."
}
# 6. 获取结果
GET /api/agent/results/{task_id}
```
---
## 七、待确认问题
1. **RAG知识库范围**
- 是否包含荔枝相关文献?
- 如何更新知识库?
2. **PlanningAgent数据源**
- 基因组数据从哪些数据库检索?
- 转录组数据如何查询?
3. **DiagnosisAgent权限**
- 自动修复的代码范围?
- 是否需要用户确认修复?
4. **LearningAgent数据共享**
- 是否上传错误模式到云端?
- 如何保护用户隐私?
5. **参数确认超时**
- 30秒是否合适?
- 是否可配置?
---
*文档创建: 2026-04-08*
*作者: xialab*
*状态: 待确认*
## 2026-05-26 追加:Agent 职责边界整改入口
KaKs/PPI/scope 讨论暴露出 PlanningAgent、DiagnosisAgent、ResultParserAgent 与执行层之间存在职责混杂:静态依赖、动态需求、artifact 解析、完成状态、修复策略在多个文件重复实现。
详细问题归类、非破坏迁移计划和验收矩阵见:[`docs/stage_requirements_agent_refactor_plan_2026-05-26.md`](stage_requirements_agent_refactor_plan_2026-05-26.md)。