159 lines
5.3 KiB
Markdown
159 lines
5.3 KiB
Markdown
# Gene-Family-MAS-V2 项目分析报告
|
||||
|
|
|
|||
|
|
## 项目架构概览
|
|||
|
|
|
|||
|
|
### RAG 阶段的两个子系统
|
|||
|
|
|
|||
|
|
| 系统 | 位置 | 类型 | 状态 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| **V13 提取器** | `src/rag/extractors/v13/` | 纯Pipeline流程 | ✅ 生产使用 |
|
|||
|
|
| **Agentic 系统** | `src/rag/agentic/` | Agent编排框架 | ⚠️ 部分使用 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、V13 提取器(生产核心)
|
|||
|
|
|
|||
|
|
### 流程架构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Phase 1 → Phase 2 → Phase 2.5 → Phase 3 → Phase 4 → Phase 5 → Phase 5.5 → Phase 6
|
|||
|
|
文档解析 附表处理 多组学提取 实体识别 关系抽取 后处理 审核 VLM图像
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 各模块功能
|
|||
|
|
|
|||
|
|
| Phase | 模块 | 功能 | 关键点 |
|
|||
|
|
|:------|------|------|--------|
|
|||
|
|
| 1 | `phase1_document_parser_mineru.py` | MinerU PDF解析 + 章节识别 | 从 layout.json 解析章节标题 |
|
|||
|
|
| 2 | `phase2_supplementary.py` | 附表下载 + Excel解析 | PMID→PMCID→Europe PMC |
|
|||
|
|
| 2.5 | `geo_extractor.py` | GEO/GSE数据提取 | RNA-seq、Microarray等 |
|
|||
|
|
| 3 | `phase3_entity_recognition.py` | 8种实体识别 | 基因家族、基因名、物种名等 |
|
|||
|
|
| 4 | `phase4_relation_extraction.py` | 74个PC模式关系抽取 | **最核心模块,45KB** |
|
|||
|
|
| 5 | `phase5_post_processing.py` | 去重、验证、chunks | |
|
|||
|
|
| 5.5 | `phase5_review.py` | 规则审查 + 评估 | A/B/C/D等级 |
|
|||
|
|
| 6 | `phase6_vlm_image_extraction.py` | VLM图像关系提取 | 阿里云百炼 qwen3.6-plus |
|
|||
|
|
|
|||
|
|
### 入口点
|
|||
|
|
|
|||
|
|
- `v13_extractor.py` - 主提取器类 `V13Extractor`
|
|||
|
|
- `test_v13_1_simple.py` - 快速测试入口
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、Agentic 系统(部分使用)
|
|||
|
|
|
|||
|
|
### Agent 组件清单
|
|||
|
|
|
|||
|
|
| Agent | 文件 | 设计功能 | 实际状态 |
|
|||
|
|
|-------|------|----------|----------|
|
|||
|
|
| `QueryAnalyzer` | `query_analyzer.py` | 意图识别 + 实体提取 | ✅ **API使用** |
|
|||
|
|
| `RetrievalStrategyAgent` | `retrieval_strategy.py` | 检索策略选择 | ✅ **API使用** |
|
|||
|
|
| `ResultEvaluator` | `result_evaluator.py` | 结果评估 | ⚠️ 只在Orchestrator内 |
|
|||
|
|
| `IterativeRetriever` | `iterative_retriever.py` | 多跳迭代检索 | ❌ **仅测试脚本** |
|
|||
|
|
| `RAGAgentOrchestrator` | `orchestrator.py` | LangGraph编排 | ❌ **fallback模式** |
|
|||
|
|
|
|||
|
|
### 实际调用链路
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
API (/api/v1/rag/chat)
|
|||
|
|
├── mode="agentic" → _agentic_search()
|
|||
|
|
│ ├── QueryAnalyzer.analyze() ✅ 被调用
|
|||
|
|
│ ├── RetrievalStrategyAgent.determine_strategy() ✅ 被调用
|
|||
|
|
│ └── 根据策略执行: exact/bm25/substring/hybrid
|
|||
|
|
│
|
|||
|
|
└── mode="hybrid/substring/bm25" → 直接调用对应搜索方法
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 关键发现:LangGraph 未启用
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
# orchestrator.py 第 14-18 行
|
|||
|
|
try:
|
|||
|
|
from langgraph.graph import StateGraph, END
|
|||
|
|
LANGGRAPH_AVAILABLE = False # V2: 禁用 LangGraph,使用 Fallback
|
|||
|
|
except ImportError:
|
|||
|
|
LANGGRAPH_AVAILABLE = False
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**结论**:Orchestrator 实际用的是 `_run_fallback()` 方法,而非真正的 LangGraph 状态机。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、Agentic 系统使用情况分析
|
|||
|
|
|
|||
|
|
### 在生产中发挥作用的
|
|||
|
|
|
|||
|
|
| Agent | 使用位置 | 作用 |
|
|||
|
|
|-------|----------|------|
|
|||
|
|
| `QueryAnalyzer` | `api/rag_routes.py:29,383` | 分析查询意图,提取实体 |
|
|||
|
|
| `RetrievalStrategyAgent` | `api/rag_routes.py:30,386` | 根据意图选择检索模式 |
|
|||
|
|
|
|||
|
|
### 未发挥作用的(死代码候选)
|
|||
|
|
|
|||
|
|
| Agent | 原因 |
|
|||
|
|
|-------|------|
|
|||
|
|
| `IterativeRetriever` | 只在 `scripts/test_phase2_complete.py` 测试脚本中引用 |
|
|||
|
|
| `RAGAgentOrchestrator` (LangGraph部分) | `LANGGRAPH_AVAILABLE = False` 强制禁用 |
|
|||
|
|
| `ResultEvaluator` | 只在 Orchestrator 的 fallback 流程中调用,但 fallback 流程本身未被生产使用 |
|
|||
|
|
|
|||
|
|
### 实际效果
|
|||
|
|
|
|||
|
|
Agentic 系统当前只是**两步规则映射**:
|
|||
|
|
1. 查询分析 → 查询类型
|
|||
|
|
2. 查询类型 → 检索策略
|
|||
|
|
|
|||
|
|
没有真正的 Agent 自主决策、迭代优化、结果评估闭环。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、历史遗留代码
|
|||
|
|
|
|||
|
|
### extractors/archive/ 目录(18个废弃提取器)
|
|||
|
|
|
|||
|
|
- `extractor_pc_*.py` - 各种 PC 模式实验版本
|
|||
|
|
- `extractor_complete_v1.py` - 早期完整版
|
|||
|
|
- `extractor_production_v1.py` - 早期生产版
|
|||
|
|
|
|||
|
|
### extractors/ 目录(非v13)
|
|||
|
|
|
|||
|
|
- `extract_v12_*.py` - v12 版本(已被 v13 替代)
|
|||
|
|
- `smart_gene_family_extractor*.py` - 早期智能提取器
|
|||
|
|
- `expression_relation_extractor.py` - 表达关系提取器(功能已整合到v13)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、建议
|
|||
|
|
|
|||
|
|
### Agentic 系统处理建议
|
|||
|
|
|
|||
|
|
| 选择 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| **保留 QueryAnalyzer + RetrievalStrategyAgent** | API实际使用,保留 |
|
|||
|
|
| **简化 Orchestrator** | 删除 LangGraph 相关代码,只保留 fallback 逻辑 |
|
|||
|
|
| **删除 IterativeRetriever** | 死代码,仅测试脚本引用 |
|
|||
|
|
| **评估 ResultEvaluator** | 若无计划使用 LangGraph,可删除 |
|
|||
|
|
|
|||
|
|
### 或者完全重构
|
|||
|
|
|
|||
|
|
如果真想用 Agent 编排,应该:
|
|||
|
|
1. 安装 LangGraph 并启用
|
|||
|
|
2. 重新设计状态机流程
|
|||
|
|
3. 让 Orchestrator 成为真正的生产入口
|
|||
|
|
|
|||
|
|
当前状态是"有 Agent 架构但没用 Agent 能力"。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 六、结论
|
|||
|
|
|
|||
|
|
| 项目 | 结论 |
|
|||
|
|
|------|------|
|
|||
|
|
| **V13提取器** | 完整、稳定、生产使用 |
|
|||
|
|
| **Agentic系统** | 两成用到,八成死代码 |
|
|||
|
|
| **整体架构** | 混合设计,有冗余 |
|
|||
|
|
|
|||
|
|
**务实建议**:保留真正使用的部分(QueryAnalyzer、StrategyAgent),清理未使用的(IterativeRetriever、LangGraph相关),让代码更清晰。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
生成时间: 2026-04-15
|