Files
PlantAI-rag/docs/PROJECT_ANALYSIS.md
2026-07-10 17:59:59 +08:00

159 lines
5.3 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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