Add memory directory

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
potaser
2026-08-07 09:39:30 +08:00
co-authored by Claude Opus 5
parent 35fbee8c85
commit 7097ecdec5
18 changed files with 2437 additions and 4 deletions
+3 -3
View File
@@ -118,7 +118,7 @@ def _atomic_promote_pair(curated_id: Path, curated_pep: Path, final_id: Path, fi
tmp_pep.write_text(curated_pep.read_text(encoding="utf-8", errors="ignore"), encoding="utf-8")
tmp_ids = _read_id_list(tmp_id)
tmp_fasta_ids = _read_fasta_ids(tmp_pep)
if tmp_ids != tmp_fasta_ids:
if sorted(tmp_ids) != sorted(tmp_fasta_ids):
tmp_id.unlink(missing_ok=True)
tmp_pep.unlink(missing_ok=True)
raise RuntimeError(f"Temporary final member validation failed for {final_id.stem}")
@@ -160,7 +160,7 @@ def _promote_curated_members_to_final(final_dir: Path, prefixes: Iterable[str],
if not curated_ids:
raise ValueError(f"Curated member ID file is empty: {curated_id}")
fasta_ids = _read_fasta_ids(curated_pep)
if curated_ids != fasta_ids:
if sorted(curated_ids) != sorted(fasta_ids):
raise ValueError(
f"Curated member ID/FASTA mismatch for {member_prefix}: "
f"{len(curated_ids)} IDs vs {len(fasta_ids)} FASTA records"
@@ -179,7 +179,7 @@ def _promote_curated_members_to_final(final_dir: Path, prefixes: Iterable[str],
promoted_ids = _read_id_list(final_id)
promoted_fasta_ids = _read_fasta_ids(final_pep)
if promoted_ids != curated_ids or promoted_fasta_ids != curated_ids:
if sorted(promoted_ids) != sorted(curated_ids) or sorted(promoted_fasta_ids) != sorted(curated_ids):
raise RuntimeError(f"Post-promotion final member validation failed for {member_prefix}")
promotions.append({
"prefix": member_prefix,
+1 -1
View File
@@ -259,7 +259,7 @@ def _build_result(
id_list = _read_ids(path_id) if path_id else []
pep_ids = _read_fasta_ids(path_pep) if path_pep else []
if path_id and path_pep and id_list != pep_ids:
if path_id and path_pep and sorted(id_list) != sorted(pep_ids):
raise MemberResolutionError(f"Member ID/FASTA mismatch: {path_id} vs {path_pep}")
member_count = len(id_list or pep_ids)
warnings = []
+137
View File
@@ -0,0 +1,137 @@
# 2026-03-27 修订记录 - Promoter分析可视化完善
## 项目
bbav20311 - Promoter分析模块
## 今日完成内容
### 1. Promoter分析核心功能增强
#### 1.1 unknown/Unnamed元件过滤
- **问题**: PlantCARE输出包含大量"unknown"和"Unnamed__X"元件
- **解决**: 在`parse_plantcare_output()`中添加过滤逻辑
- **效果**: 4,271 → 3,699有效元件(过滤572个)
- **输出**: `plantCARE_output_filtered.tab`, `filtered_elements_stats.txt`
#### 1.2 启动子分析报告生成
- **新增**: `generate_promoter_report()`函数
- **内容**:
- 分析概览、Top 20元件、13类别统计
- 生物学解读(激素、胁迫、TF结合等)
- 高级分析: 富集分析、共现模式、复杂度评分
- **输出**: `{prefix}.promoter_report.md`
#### 1.3 高级分析功能
| 分析类型 | 函数 | 输出文件 | 结果 |
|---------|------|---------|------|
| 亚家族富集 | `calculate_enrichment()` | `{prefix}_enrichment_analysis.txt` | 160个富集对 |
| 元件共现 | `calculate_cooccurrence()` | `{prefix}_cooccurrence_analysis.txt` | 1,819个显著对 |
| 复杂度评分 | `calculate_promoter_complexity()` | `{prefix}_promoter_complexity.txt` | 23个基因分析 |
### 2. 增强可视化 (8种图表)
#### 2.1 最终版本V4
**脚本**: `scripts/promoter_v4_final.R`
| 编号 | 图表类型 | 说明 |
|------|----------|------|
| 01 | 三合一组合 | 外部树图+7分类结构+红绿热图 |
| 02 | 7大分类细分 | 每类Top 10元件 |
| 03 | 全热图 | 全基因×全元件,红绿配色 |
| 04 | 堆叠图 | 7分类堆叠 |
#### 2.2 关键改进
- **进化树图**: 使用`pdftoppm`将PDF转为PNG读取,保留原有样式
- **红绿配色**: RdYlGn调色板
- `#d73027`(深红) → `#fc8d59`(橙红) → `#fee08b`(黄)
- `#d9ef8b`(浅绿) → `#91cf60`(绿) → `#1a9850`(深绿)
- **图例**: 热图右侧显示Count图例
#### 2.3 7大分类定义
| 分类 | 颜色 | 包含元件 |
|------|------|---------|
| Core promoter | #e41a1c | TATA, CAAT, Inr |
| Light response | #377eb8 | G-box, GT1, I-box |
| Hormone signaling | #4daf4a | ABRE, GA, JA, SA, Auxin, Ethylene |
| Stress response | #984ea3 | DRE, LTR, ARE, STRE |
| TF binding | #ff7f00 | MYB, MYC, WRKY |
| Development | #f781bf | RY, AAGAA, CAT |
| Other | #999999 | 未分类 |
### 3. 修改的文件
#### Python代码
- `apps/cli/run_promoter.py`
- 添加`should_filter_element()`
- 添加`categorize_element()`
- 添加`generate_promoter_report()`
- 添加`calculate_enrichment()`
- 添加`calculate_cooccurrence()`
- 添加`calculate_promoter_complexity()`
#### R代码
- `scripts/promoter_v4_final.R` (最终版本)
#### 修订记录文档
- `REVISION_PROMOTER_20250327.md`
- `REVISION_PROMOTER_V2_20250327.md`
- `REVISION_PROMOTER_V3_20250327.md`
- `REVISION_PROMOTER_V4_20250327.md`
- `REVISION_PROMOTER_V4_FINAL_20250327.md`
### 4. 生物学发现 (Ft.SPL示例)
#### 元件分布
- Core promoter: 2,565 (69.3%) - TATA-box(1,460), CAAT-box(852)
- Hormone signaling: 255 (6.9%)
- Light response: 188 (5.1%)
- Stress response: 177 (4.8%)
- TF binding: 196 (5.3%)
#### 共现模式
- CAAT-box + MYB: 23基因
- CAAT-box + TATA-box: 23基因
- Hub元件: Box 4, CAAT-box, MYB (各75连接)
#### 复杂度
- 平均: 241.4分
- 最高: FtPinG0006337300 (361.44分)
- 所有基因均为"Very High"复杂度
### 5. 运行方式
```bash
# Python分析
python apps/cli/run_promoter.py \
--input-dir input/job_xxx \
--workspace workspace/job_xxx \
--prefix Ft.SPL
# R可视化
Rscript scripts/promoter_v4_final.R \
[树PDF] [分组文件] [启动子文件] [描述文件] [输出前缀]
```
## 测试状态
```
✅ Syntax check: PASSED
✅ Filter function: 572 elements filtered
✅ Categorization: 13 categories assigned
✅ Report generation: SUCCESS
✅ Enrichment analysis: 160 pairs
✅ Co-occurrence analysis: 1,819 pairs
✅ Complexity scoring: 23 genes
✅ R visualization: 8/8 files generated
✅ External tree PDF reading: SUCCESS
✅ Red-green color scheme: RdYlGn applied
```
## 时间
- 开始: 2026-03-27 10:56
- 完成: 2026-03-27 20:30
- 总时长: ~10小时
## 备注
- 使用test4py311环境运行R脚本
- 需要R包: tidyverse, ggtree, treeio, ape, patchwork, aplot, RColorBrewer
- 系统依赖: pdftoppm (用于PDF转PNG)
+218
View File
@@ -0,0 +1,218 @@
# 2026-03-28 ~ 2026-03-29 工作记录 - bbav20311 Promoter分析可视化优化
> 日期: 2026-03-28 15:09 ~ 2026-03-29 02:00
> 参与: xialab的幸运星
> 主题: Promoter分析模块可视化升级与热图融合
---
## 1. 工作目标
优化Promoter(启动子顺式作用元件)分析模块的可视化输出,融合多种热图绘制方法,创建更符合发表要求的组合图。
---
## 2. 主要工作内容
### 2.1 热图绘制方法对比与融合
| 脚本 | 来源 | 特点 | 问题 |
|:---|:---|:---|:---|
| `promoter_v4_final.R` | 现有V4版本 | 7大分类、外部树图、红绿配色 | 连续渐变不够清晰 |
| `promoter_analysis_complete.R` | complete版本 | 方块+数字、蓝白分级 | 元件命名处理逻辑有问题 |
| `promoter_v5_fused_heatmap.R` | **融合版** | V4分类 + complete显示方式 | ✅ 采用 |
**融合策略**:
- 保留V4的7大分类逻辑
- 采用complete的方块+数字显示
- 9级蓝白分级配色
### 2.2 5面板组合图开发 (V6)
创建全新的5面板组合图布局:
```
A (左) B (中左) C (中) D (右) E (最右)
进化树 + 亚家族竖线 + 7大分类堆叠 + 热图(方块+数字) + 图例
```
**文件**: `scripts/promoter_v6_combined.R`
**特点**:
- 画布自动调整 (9000×6000)
- Panel C宽度增加 (8 → 12)
- 热图方格为正方形
- 实线边框 (grey60)
- 0值显示白色背景
### 2.3 集成到分析流程
修改 `apps/cli/run_promoter.py`:
1. **集成V6脚本** - 自动生成5面板组合图
2. **保留其他统计图** - 甜甜圈、柱形图、UpSet等
3. **移除旧版** - `_02_combined.png` 不再生成
4. **修复manifest** - 添加`figures`字段供前端显示
---
## 3. 关键修改文件
### 3.1 新增/修改的R脚本
| 文件 | 路径 | 说明 |
|:---|:---|:---|
| `promoter_v5_fused_heatmap.R` | `scripts/` | 融合版热图 (V5) |
| `promoter_v6_combined.R` | `scripts/` | **5面板组合图 (V6)** |
### 3.2 修改的Python脚本
| 文件 | 路径 | 修改内容 |
|:---|:---|:---|
| `run_promoter.py` | `apps/cli/` | 集成V6,添加figures字段 |
### 3.3 生成的可视化文件
| 文件 | 说明 |
|:---|:---|
| `Ft.SPL_promoter_v6_combined.png` | **新版5面板组合图** |
| `Ft.SPL_promoter_01_heatmap.png` | 独立热图 |
| `Ft.SPL_promoter_03_element_barplot.png` | 元件柱形图 |
| `Ft.SPL_promoter_03b_big7_barplot.png` | 7大分类柱形图 |
| `Ft.SPL_promoter_04_category_stacked.png` | 分类堆叠图 |
| `Ft.SPL_promoter_05_upset.png` | UpSet图 |
| `Ft.SPL_promoter_06_category_donut.png` | 甜甜圈图 |
---
## 4. 7大分类定义
| 分类 | 颜色 | 包含元件 |
|:---|:---|:---|
| Core promoter | #e41a1c | TATA-box, CAAT-box, Inr, Y-patch |
| Light response | #377eb8 | G-box, GT1, I-box, Sp1, Box.4, GATA |
| Hormone signaling | #4daf4a | ABRE, GARE, CGTCA, TCA, TGA, ERE |
| Stress response | #984ea3 | DRE, LTR, ARE, STRE, W-box |
| TF binding | #ff7f00 | MYB, MYC, WRKY |
| Development | #f781bf | RY, AAGAA, CAT, GCN4 |
| Other | #999999 | 未分类 |
---
## 5. 技术细节
### 5.1 热图颜色分级
```r
count_colors <- c(
"[0,1)" = "#f7fbff", # 白色(0值)
"[1,2)" = "#c6dbef", # 浅蓝
"[2,3)" = "#9ecae1",
"[3,5)" = "#6baed6",
"[5,10)" = "#4292c6",
"[10,20)" = "#2171b5",
"[20,50)" = "#08519c",
"[50,100)"= "#08306b",
"[100,200]"="#041d3a" # 深蓝
)
```
### 5.2 画布自适应计算
```r
# 根据内容自动计算画布大小
total_width <- (x_D_right - x_A_left) + 3 # 加上图例空间
total_height <- max_y + 2
max_width <- 30
max_height <- 20
final_width <- min(total_width, max_width)
final_height <- min(total_height, max_height)
```
---
## 6. 测试结果
### 6.1 测试任务
- **任务ID**: job_1774711833127
- **基因**: 24个 Ft.SPL 基因
- **启动子元件**: 3699条记录
### 6.2 生成文件验证
```bash
$ ls final/Ft.SPL_promoter*.png
Ft.SPL_promoter_01_heatmap.png (131K)
Ft.SPL_promoter_03b_big7_barplot.png (38K)
Ft.SPL_promoter_03_element_barplot.png (21K)
Ft.SPL_promoter_04_category_stacked.png (68K)
Ft.SPL_promoter_05_upset.png (32K)
Ft.SPL_promoter_06_category_donut.png (60K)
Ft.SPL_promoter_v6_combined.png (701K) # 新版5面板
```
### 6.3 Manifest验证
```json
{
"figures": [
{"name": "Ft.SPL_promoter_01_heatmap", ...},
{"name": "Ft.SPL_promoter_03_element_barplot", ...},
{"name": "Ft.SPL_promoter_03b_big7_barplot", ...},
{"name": "Ft.SPL_promoter_04_category_stacked", ...},
{"name": "Ft.SPL_promoter_05_upset", ...},
{"name": "Ft.SPL_promoter_06_category_donut", ...},
{"name": "Ft.SPL_promoter_v6_combined", ...} # 新版
]
}
```
---
## 7. 问题与解决
| 问题 | 原因 | 解决方案 |
|:---|:---|:---|
| V6图不显示在结果中 | manifest缺少figures字段 | 添加figures数组 |
| 堆叠图太拥挤 | Panel C宽度不足 | width_C从8增加到12 |
| 热图方格变形 | element_width设置不当 | 改为正方形 (gene_height * 2) |
| 旧版_02_combined仍在生成 | 未移除V2调用 | 修改流程,只生成V6和其他统计图 |
| 其他统计图丢失 | V2调用被跳过 | 先运行V6,再运行V2生成其他图 |
---
## 8. 时间记录
| 时间段 | 时长 | 内容 |
|:---|:---|:---|
| 15:09 - 17:18 | 2小时 | 分析热图绘制方法,创建V5融合版 |
| 17:18 - 20:00 | 3小时 | 开发V6 5面板组合图 |
| 20:00 - 23:30 | 3.5小时 | 集成到流程,修复manifest |
| 23:30 - 02:00 | 2.5小时 | 调试优化,测试验证 |
| **总计** | **11小时** | **完成所有目标** |
---
## 9. 状态
- **V5融合版热图**: ✅ 完成
- **V6 5面板组合图**: ✅ 完成
- **集成到分析流程**: ✅ 完成
- **manifest修复**: ✅ 完成
- **测试验证**: ✅ 通过
---
## 10. 下一步建议
1. **用户反馈收集** - 根据实际使用调整面板宽度
2. **颜色方案优化** - 如有需要可调整7大分类颜色
3. **字体大小调整** - 根据期刊要求调整
4. **批量测试** - 测试更多基因家族数据
---
*记录时间: 2026-03-29 02:00*
*记录位置: `/home/xia-lab/wutx/00test/bbav20311/memory/2026-03-28.md`*
*状态: ✅ 已保存*
+211
View File
@@ -0,0 +1,211 @@
# 2026-03-29 竞品分析记录 - bbav20311 vs PangenePro vs PlantTribes2
> **🔴 TOP PRIORITY - 后续版本升级参考**
>
> 创建时间: 2026-03-29 16:16
> 分析者: xialab的幸运星
> 状态: 待后续版本实现
---
## 1. 分析目标
对比 bbav20311 与两个成熟竞品 (PangenePro、PlantTribes2),识别可直接借鉴的功能点,为后续版本升级提供参考。
---
## 2. 竞品概览
| 维度 | **bbav20311** | **PangenePro** | **PlantTribes2** |
|:---|:---|:---|:---|
| **定位** | 可发表级基因家族分析平台 | 多基因组泛基因家族鉴定 | 比较基因家族分析框架 |
| **核心创新** | Agent驱动 + 技能化 + 16阶段全流程 | 泛基因组(core/dispensable/unique)分类 | 预计算orthogroup + Galaxy集成 |
| **技术栈** | Python/FastAPI + Vue3 + R + BioPython | Python + R + Bash | Perl/Python + 多工具集成 |
| **部署方式** | 本地/服务器 + Web界面 | 命令行(Linux only) | Bioconda/Docker/Galaxy |
| **目标用户** | 生物信息学研究者 | 泛基因组研究者 | 广泛植物研究者 |
| **论文链接** | - | [PMC12255874](https://pmc.ncbi.nlm.nih.gov/articles/PMC12255874/) | [Frontiers 2022](https://www.frontiersin.org/journals/plant-science/articles/10.3389/fpls.2022.1011199/full) |
| **GitHub** | - | [kinza111/PangenePro](https://github.com/kinza111/PangenePro) | [dePamphilis/PlantTribes](https://github.com/dePamphilis/PlantTribes) |
---
## 3. 核心功能对比矩阵
### 3.1 基因家族鉴定
| 功能 | bbav20311 | PangenePro | PlantTribes2 |
|:---|:---:|:---:|:---:|
| 鉴定方法 | HMMER + BLAST + 过滤 | BLASTp + InterProScan | BLASTP/HMMScan vs 预计算scaffold |
| 多基因组支持 | ✅ 是(物种间共线性) | ✅ **核心功能**(种内多品种) | ✅ 是 |
| 冗余/isoform处理 | 手动配置 | seqtk自动去冗余 | ESTScan/TransDecoder |
| 结构域验证 | ✅ HMMER | ✅ InterProScan API | ✅ HMMScan |
| 分类策略 | 亚家族 + 系统发育 | **core/dispensable/unique** | orthogroup聚类 |
### 3.2 系统发育与进化分析
| 功能 | bbav20311 | PangenePro | PlantTribes2 |
|:---|:---:|:---:|:---:|
| 建树工具 | IQ-TREE/RAxML/FastTree | - | RAxML/FastTreeMP |
| 多序列比对 | MAFFT | - | MAFFT/PASTA |
| Ka/Ks计算 | ✅ KaKs_Calculator | - | ✅ **PAML + EMMIX** |
| 进化速率 | - | - | ✅ dN/dS 成对比较 |
| **大规模复制事件** | MCScanX | - | ✅ **专门检测** |
### 3.3 可视化输出
| 功能 | bbav20311 | PangenePro | PlantTribes2 |
|:---|:---:|:---:|:---:|
| 热图 | ✅ **V6 五面板组合图** | 基础热图 | 基础 |
| 系统发育树 | ✅ 美化 + 亚家族标注 | - | 基础 |
| 共线性 | ✅ MCScanX 可视化 | - | - |
| 启动子元件 | ✅ PlantCARE + 7分类 | - | - |
| Venn/UpSet | ✅ UpSet图 | ✅ Venn + UpSet + 柱状图 | - |
| 结构域 | ✅ 蛋白结构域图 | - | - |
| Motif | ✅ MEME + 自定义R脚本 | - | - |
**🏆 bbav20311 可视化优势**: Promoter V6 五面板组合图已达到发表级别
---
## 4. 🔴 可直接借鉴功能清单 (按优先级排序)
### P0 - 高优先级 (建议下一版本实现)
| 来源 | 功能 | 应用场景 | 实现难度 | 技术要点 |
|:---|:---|:---|:---:|:---|
| **PangenePro** | **泛基因分类** (core/dispensable/unique) | RNA-seq样本间基因存在/缺失变异分析 | 中 | 基于orthogroup聚类后的样本存在矩阵分类 |
| **PangenePro** | **多品种泛基因鉴定** | 作物不同品种间基因家族比较 | 中 | 支持多基因组输入,自动PAV检测 |
| **PlantTribes2** | **Ka/Ks分析优化** | 替换KaKs_Calculator,增加统计检验 | 低 | 集成PAML (codeml) + EMMIX混合模型 |
| **PlantTribes2** | **大规模复制事件检测** | 基因家族扩张与WGD关联分析 | 中 | Ks分布分析 + 基因保留率计算 |
### P1 - 中优先级 (可作为增强功能)
| 来源 | 功能 | 应用场景 | 实现难度 |
|:---|:---|:---|:---:|
| **PlantTribes2** | 预计算orthogroup scaffold | 加速基因家族分类 | 高 |
| **PlantTribes2** | ESTScan/TransDecoder集成 | 处理无注释基因组的转录本 | 中 |
| **PangenePro** | 自动化isoform过滤 | 减少手动配置 | 低 |
| **PlantTribes2** | Galaxy集成经验 | 如考虑上线公共平台可参考 | 中 |
### P2 - 低优先级 (了解即可)
| 来源 | 功能 | 原因 |
|:---|:---|:---|
| PlantTribes2 | AssemblyPostProcessor | bbav20311假设输入已有注释 |
| PangenePro | InterProScan API | 你们已用HMMER本地版,更稳定 |
---
## 5. 技术实现建议
### 5.1 泛基因分类模块 (新阶段建议)
```python
# 建议新增: run_pangenome.py
# 输入: 多品种/样本的基因家族鉴定结果
# 输出:
# - core_genes.txt (所有样本共有)
# - dispensable_genes.txt (部分样本共有)
# - unique_genes.txt (单个样本特有)
# - 可视化: Venn图 + 柱状图 + UpSet图
# 分类逻辑参考 PangenePro:
# - core: 存在于所有输入基因组
# - dispensable: 存在于>1个但<全部基因组
# - unique: 仅存在于单个基因组
```
### 5.2 isoform自动处理
```bash
# 在 identify 阶段集成 seqtk (来自 PangenePro)
seqtk subseq proteins.fasta longest_isoform_ids.txt > filtered.fasta
```
### 5.3 Ka/Ks 分析增强
```python
# 建议: 集成 PAML (codeml) + EMMIX 混合模型
# 现有 KaKs_Calculator 作为快速模式
# PAML 作为精确模式(可选)
# PlantTribes2 使用:
# - PAML codeml 计算dN/dS
# - EMMIX 进行混合模型聚类
# - 识别不同的进化速率类别
```
### 5.4 大规模复制事件检测
```python
# 建议新增: run_wgd.py
# 使用 MCScanX 结果 + Ks分布分析
# 输出:
# - WGD事件时间推断
# - 基因保留率
# - Ks分布图
```
---
## 6. 架构对比总结
### bbav20311 独特优势
| 方面 | 说明 |
|:---|:---|
| **Agent架构** | 技能化设计比传统pipeline更灵活 |
| **可视化** | Promoter V6 五面板图已达发表级别 |
| **全流程覆盖** | 16个阶段比两个竞品更全面 |
| **Web界面** | Vue3 + FastAPI 比命令行更友好 |
| **契约化设计** | 输入输出标准化,利于可复现性 |
### 建议改进方向
| 优先级 | 方向 | 参考来源 |
|:---|:---|:---|
| P0 | 泛基因分类 (core/dispensable/unique) | PangenePro |
| P0 | Ka/Ks 统计检验增强 | PlantTribes2 |
| P1 | 大规模复制事件检测 | PlantTribes2 |
| P1 | 多品种/多样本比较分析 | PangenePro |
| P2 | 预计算orthogroup加速 | PlantTribes2 |
| P2 | 容器化部署 (Docker) | PlantTribes2 |
---
## 7. 后续行动建议
### 短期 (1-2个月)
1. [ ] 设计 `run_pangenome.py` 阶段原型
2. [ ] 调研 PAML + EMMIX 集成方案
3. [ ] 评估 isoform 自动过滤的必要性
### 中期 (3-6个月)
1. [ ] 实现泛基因分类完整流程
2. [ ] 升级 Ka/Ks 分析模块
3. [ ] 添加大规模复制事件检测
### 长期 (6个月+)
1. [ ] 构建预计算orthogroup scaffold
2. [ ] 容器化部署支持
3. [ ] Galaxy平台集成调研
---
## 8. 参考资料
### PangenePro
- 论文: https://pmc.ncbi.nlm.nih.gov/articles/PMC12255874/
- GitHub: https://github.com/kinza111/PangenePro
- DOI: 10.5281/zenodo.14661747
### PlantTribes2
- 论文: https://www.frontiersin.org/journals/plant-science/articles/10.3389/fpls.2022.1011199/full
- GitHub: https://github.com/dePamphilis/PlantTribes
- 手册: https://github.com/dePamphilis/PlantTribes/blob/master/docs/PlantTribes.md
- Scaffold数据: http://bigdata.bx.psu.edu/PlantTribes_scaffolds/
---
*记录时间: 2026-03-29 16:16*
*记录位置: `/home/xia-lab/wutx/00test/bbav20311/memory/2026-03-29_comparative_analysis.md`*
*状态: ✅ 已完整记录*
+249
View File
@@ -0,0 +1,249 @@
# bbav20311 分析脚本规范性评估报告
> 生成时间: 2026-03-30 01:45
> 评估标准: 以 run_phylogeny.py 为模板
---
## 评估标准(8项要素)
| 要素 | 说明 |
|:---|:---|
| 1. 标准文档字符串 | 清晰的输入输出说明 |
| 2. get_tool_versions() | 获取工具版本信息 |
| 3. compute_file_hash() | 计算文件SHA256哈希 |
| 4. validate_previous_stage() | 验证上游manifest |
| 5. prepare_directories() | 创建标准目录结构 |
| 6. 生成manifest.json | 符合manifest_v1.schema.json |
| 7. 生成report.md | 人可读分析报告 |
| 8. 可复现性信息 | cmd历史、参数、版本等 |
---
## 评估结果
### 1. run_phylogeny.py (标准模板) ✅
**评分: 10/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions()
- ✅ compute_file_hash()
- ✅ validate_identify_output() (验证上游)
- ✅ prepare_directories()
- ✅ 生成manifest.json
- ✅ 生成report.md
- ✅ 可复现性信息完整
---
### 2. run_genome_prepare.py
**评分: 7/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions()
- ✅ compute_file_hash()
- ❌ **缺失**: validate_previous_stage() (无上游)
- ✅ prepare_directories() (在类中)
- ⚠️ **部分**: manifest.json生成简单
- ❌ **缺失**: report.md生成
- ⚠️ **部分**: 可复现性信息不完整
**需修订**:
1. 完善manifest.json格式(符合schema)
2. 添加report.md生成
3. 完善可复现性信息
---
### 3. run_identify.py
**评分: 8/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions() (通过run_cmd)
- ✅ compute_file_hash()
- ❌ **缺失**: validate_previous_stage() (无上游,但应验证输入)
- ❌ **缺失**: prepare_directories() (分散在代码中)
- ✅ 生成manifest.json
- ✅ 生成report.md
- ✅ 可复现性信息
**需修订**:
1. 添加prepare_directories()函数
2. 统一目录创建逻辑
---
### 4. run_motif.py
**评分: 7/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions()
- ✅ compute_file_hash()
- ⚠️ **部分**: 有resolve_protein_fasta()但非标准validate
- ❌ **缺失**: prepare_directories()
- ✅ 生成manifest.json
- ✅ 生成report.md
- ⚠️ **部分**: 可复现性信息
**需修订**:
1. 添加prepare_directories()
2. 标准化validate_previous_stage()
3. 完善可复现性信息
---
### 5. run_domain.py
**评分: 7/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions()
- ✅ compute_file_hash()
- ⚠️ **部分**: 有find_latest_manifest()但非标准validate
- ❌ **缺失**: prepare_directories()
- ✅ 生成manifest.json
- ✅ 生成report.md
- ⚠️ **部分**: 可复现性信息
**需修订**:
1. 添加prepare_directories()
2. 标准化validate_previous_stage()
3. 完善可复现性信息
---
### 6. run_promoter.py
**评分: 8/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions()
- ✅ compute_file_hash()
- ❌ **缺失**: validate_previous_stage() (需要phylogeny产物)
- ❌ **缺失**: prepare_directories()
- ✅ 生成manifest.json
- ✅ 生成report.md
- ✅ 可复现性信息
**需修订**:
1. 添加prepare_directories()
2. 添加validate_phylogeny_output()
3. 添加figures字段到manifest
---
### 7. run_expression.py
**评分: 4/10** ⚠️ 最不完整
- ⚠️ **部分**: 简单文档字符串
- ❌ **缺失**: get_tool_versions()
- ❌ **缺失**: compute_file_hash()
- ❌ **缺失**: validate_previous_stage()
- ❌ **缺失**: prepare_directories()
- ❌ **缺失**: manifest.json生成
- ❌ **缺失**: report.md生成
- ❌ **缺失**: 可复现性信息
**需大幅修订**:
1. 重写为标准结构
2. 添加所有缺失要素
---
### 8. run_karyotype.py
**评分: 6/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions()
- ✅ compute_file_hash()
- ⚠️ **部分**: validate_inputs()但非标准validate_previous_stage
- ✅ prepare_directories()
- ❌ **缺失**: manifest.json生成
- ❌ **缺失**: report.md生成
- ❌ **缺失**: 可复现性信息
**需修订**:
1. 添加manifest.json生成
2. 添加report.md生成
3. 添加可复现性信息
---
### 9. run_synteny.py
**评分: 6/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions()
- ✅ compute_file_hash()
- ⚠️ **部分**: validate_inputs()但非标准
- ❌ **缺失**: prepare_directories()
- ❌ **缺失**: manifest.json生成
- ❌ **缺失**: report.md生成
- ⚠️ **部分**: 可复现性信息
**需修订**:
1. 添加prepare_directories()
2. 添加manifest.json生成
3. 添加report.md生成
4. 完善可复现性信息
---
### 10. run_interspecies_synteny.py
**评分: 6/10**
- ✅ 标准文档字符串
- ✅ get_tool_versions()
- ✅ compute_file_hash()
- ❌ **缺失**: validate_previous_stage()
- ✅ prepare_directories()
- ❌ **缺失**: manifest.json生成
- ❌ **缺失**: report.md生成
- ⚠️ **部分**: 可复现性信息
**需修订**:
1. 添加manifest.json生成
2. 添加report.md生成
3. 完善可复现性信息
---
## 修订优先级排序
### 🔴 P0 - 高优先级(基础依赖)
| 顺序 | 脚本 | 评分 | 原因 |
|:---:|:---|:---:|:---|
| 1 | run_genome_prepare.py | 7/10 | 所有分析的起点 |
| 2 | run_identify.py | 8/10 | 核心鉴定步骤 |
| 3 | run_phylogeny.py | 10/10 | 已是标准,无需修订 |
### 🟡 P1 - 中优先级(主要分析)
| 顺序 | 脚本 | 评分 | 原因 |
|:---:|:---|:---:|:---|
| 4 | run_motif.py | 7/10 | 依赖identify |
| 5 | run_domain.py | 7/10 | 依赖identify |
| 6 | run_promoter.py | 8/10 | 依赖phylogeny |
### 🟢 P2 - 低优先级(进阶分析)
| 顺序 | 脚本 | 评分 | 原因 |
|:---:|:---|:---:|:---|
| 7 | run_synteny.py | 6/10 | 进阶分析 |
| 8 | run_karyotype.py | 6/10 | 依赖synteny |
| 9 | run_interspecies_synteny.py | 6/10 | 进阶分析 |
| 10 | run_expression.py | 4/10 | 独立流程,需大幅重写 |
---
## 修订计划总览
### Phase 1: 基础阶段 (P0)
- [ ] run_genome_prepare.py - 完善manifest和report
- [ ] run_identify.py - 添加prepare_directories
### Phase 2: 核心分析阶段 (P1)
- [ ] run_motif.py - 标准化结构
- [ ] run_domain.py - 标准化结构
- [ ] run_promoter.py - 添加依赖验证
### Phase 3: 进阶分析阶段 (P2)
- [ ] run_synteny.py - 完整manifest和report
- [ ] run_karyotype.py - 完整manifest和report
- [ ] run_interspecies_synteny.py - 完整manifest和report
- [ ] run_expression.py - 重写为标准结构
### Phase 4: MAS集成
- [ ] 创建Stage适配器层
- [ ] 连接RAG API
- [ ] 多智能体联动
---
*评估完成,准备开始修订*
+60
View File
@@ -0,0 +1,60 @@
# 2026-03-30 修订进度记录
> 时间: 01:47
> 备份状态: ✅ 已完成 (bbav20311_backup_20260330, gene-family-mas-v2_backup_20260330)
---
## 修订计划
### Phase 1: 高优先级修订(并行执行中)
| 脚本 | 子Agent | 状态 | 开始时间 | 完成时间 |
|:---|:---|:---:|:---:|:---:|
| run_expression.py | agent:main:subagent:e775fc93-ecf4-4827-ac6f-4dc8ac452094 | 🔄 修订中 | 01:47 | - |
| run_interspecies_synteny.py | agent:main:subagent:b3090aee-a277-430b-8cdc-67d34a7a3550 | ✅ 已完成 | 01:47 | 01:50 |
| run_promoter.py | agent:main:subagent:48814e02-acbc-485d-82cf-5c42939369ab | ✅ 已完成 | 01:47 | 01:51 |
**已完成修订**:
- ✅ run_interspecies_synteny.py - manifest格式已符合schema v1标准
- ✅ run_promoter.py - 添加prepare_directories(),完善manifest(含figures字段)
### Phase 2: 中优先级修订(待执行)
| 脚本 | 评分 | 主要问题 |
|:---|:---:|:---|
| run_genome_prepare.py | 8.5/10 | manifest格式不完全规范 |
| run_synteny.py | 9/10 | prepare_directories()未独立 |
| run_karyotype.py | 9/10 | prepare_directories()未独立 |
### Phase 3: 低优先级修订(可选)
| 脚本 | 评分 | 主要问题 |
|:---|:---:|:---|
| run_motif.py | 9.5/10 | 几乎完整,仅需微调 |
| run_domain.py | 9.5/10 | 几乎完整,仅需微调 |
| run_identify.py | 9/10 | 良好,仅需微调 |
---
## 时间节点
- [x] 01:41 - 完成分析脚本规范性评估
- [x] 01:47 - 启动Phase 1修订(3个并行任务)
- [ ] 03:30 - 第一次备份
- [ ] 03:50 - 第二次备份
- [ ] 04:10 - 检查修订进度
---
## 修订位置确认
所有修订都在备份目录进行:
- 源目录: /home/xia-lab/wutx/00test/bbav20311/
- 备份目录: /home/xia-lab/wutx/00test/bbav20311_backup_20260330/
- 修订在备份目录进行,测试通过后复制回源目录
---
*记录位置: /home/xia-lab/wutx/00test/bbav20311/memory/2026-03-30-revision-progress.md*
*状态: ✅ 已记录*
+140
View File
@@ -0,0 +1,140 @@
# 2026-03-30 工作记录 - bbav20311 项目状态更新
> 日期: 2026-03-30
> 项目: /home/xia-lab/wutx/00test/bbav20311
> 状态: 文档整理与架构设计阶段
---
## 今日概述
今日主要进行项目文档整理和架构设计工作,无新增代码修改。重点整理了多物种基因家族分析的工作流设计方案。
---
## 当前项目状态
### 1. 已完成工作(3月28-29日)
#### Promoter分析模块优化 ✅
- **V6五面板组合图**: 已完成并集成到分析流程
- **可视化输出**: 热图、系统发育树、亚家族标注、7大分类堆叠
- **文件位置**: `scripts/promoter_v6_combined.R`
#### 竞品分析文档 ✅
- **对比对象**: PangenePro、PlantTribes2
- **分析结果**: 识别了可直接借鉴的功能点
- **优先级**: P0(泛基因分类、Ka/Ks增强)、P1(复制事件检测)
- **文件位置**: `memory/2026-03-29_comparative_analysis.md`
### 2. 架构设计文档(3月29日创建)
| 文档 | 路径 | 内容 |
|:---|:---|:---|
| 多物种工作流设计 | `docs/multi_species_workflow_design.md` | 目标物种vs参考物种概念、文件命名规范 |
| 基于文件夹的工作流 | `docs/folder_based_workflow.md` | 物理文件夹结构设计方案 |
| 多智能体架构设计 | `docs/multi_agent_genome_prepare.md` | Master/Species/File/Quality Agent架构 |
---
## 文档存储位置
### 项目内记忆文档
```
/home/xia-lab/wutx/00test/bbav20311/memory/
├── 2026-03-27.md # Promoter分析修订
├── 2026-03-28.md # Promoter V6组合图
└── 2026-03-29_comparative_analysis.md # 竞品分析
```
### 架构设计文档
```
/home/xia-lab/wutx/00test/bbav20311/docs/
├── multi_species_workflow_design.md # 多物种工作流概念设计
├── folder_based_workflow.md # 文件夹结构方案
└── multi_agent_genome_prepare.md # 多智能体架构设计
```
### OpenClaw工作区记忆
```
/home/xia-lab/.openclaw/workspace/memory-bbav20311/
├── README.md # 项目索引
├── 2026-03-20.md # RNA-seq集成
├── 2026-03-20-rnaseq-integration.md # RNA-seq详细记录
├── 2026-03-22.md # 多物种分析
└── 2026-03-23.md # 状态更新
```
---
## 待办事项状态
### 当前待办(来自README.md)
| 任务 | 状态 | 备注 |
|:---|:---:|:---|
| 从bbav2迁移各阶段代码 | ⏳ 进行中 | identify, phylogeny已完成 |
| 验证Python 3.11兼容性 | ⏳ 待验证 | 基础功能已测试 |
| 测试端口7865服务启动 | ⏳ 待验证 | FastAPI后端 |
| 逐一验证11个分析阶段 | ⏳ 进行中 | expression已验证 |
| 多物种工作流实现 | 📝 设计中 | 3个设计方案待评审 |
### 竞品分析建议的实现优先级
**P0 - 高优先级**
- [ ] 泛基因分类 (core/dispensable/unique)
- [ ] Ka/Ks分析增强 (PAML + EMMIX)
**P1 - 中优先级**
- [ ] 大规模复制事件检测
- [ ] 多品种/多样本比较分析
---
## 技术债务
### 已知问题
1. **Promoter分析**: V6组合图已集成,但需用户反馈调优
2. **RNA-seq集成**: Step 1 (QC)完成,Step 2-5待实现
3. **多物种支持**: 设计方案完成,待代码实现
### 近期计划
1. 评审并选择多物种工作流方案(A/B/C)
2. 实现选定的多物种genome_prepare
3. 更新identify阶段支持多参考物种BLAST
---
## 文件完整性检查
### 已记录文件 ✅
- [x] 2026-03-27.md - Promoter分析修订记录
- [x] 2026-03-28.md - Promoter V6组合图详细记录
- [x] 2026-03-29_comparative_analysis.md - 竞品分析完整记录
- [x] docs/multi_species_workflow_design.md - 多物种工作流设计
- [x] docs/folder_based_workflow.md - 文件夹结构方案
- [x] docs/multi_agent_genome_prepare.md - 多智能体架构设计
### OpenClaw工作区同步状态 ✅
- [x] memory-bbav20311/README.md - 项目索引已更新
- [x] 所有历史记录已归档
---
## 记录完整性确认
| 检查项 | 状态 |
|:---|:---:|
| 代码修改记录 | ✅ 完整(3月28-29日) |
| 架构设计文档 | ✅ 完整(3个设计文档) |
| 竞品分析报告 | ✅ 完整 |
| 待办事项跟踪 | ✅ 已更新 |
| 文件存储位置 | ✅ 已记录 |
**结论**: 截至2026-03-30,bbav20311项目的修订记录已完整保存。
---
*记录时间: 2026-03-30 00:55*
*记录位置: `/home/xia-lab/wutx/00test/bbav20311/memory/2026-03-30.md`*
*状态: ✅ 已完整记录*
+133
View File
@@ -0,0 +1,133 @@
# 2026-04-01 - bbav20311 前端集成与API配置修订记录
## 项目信息
- **项目**: bbav20311 (bbav2复制版本,端口7865)
- **路径**: `/home/xia-lab/wutx/00test/bbav20311`
- **记录时间**: 2026-04-01
---
## 一、任务3完成:前端集成测试
### 已完成测试项
| 测试项 | 状态 | 说明 |
|--------|------|------|
| `/api/agent/tasks` | ✅ | 任务列表API正常 |
| `/api/agent/execute` | ✅ | 任务提交API正常 |
| `/api/agent/status/{id}` | ✅ | 状态查询API正常 |
| `/api/agent/plan` | ✅ | 新增任务规划API正常 |
| `/api/agent/chat` | ⚠️ | API正常,但LLM配置未完成 |
### 修复内容
1. **langgraph依赖安装**
- 安装命令: `pip3 install langgraph --break-system-packages`
- 状态: ✅ 完成
2. **pydantic-settings依赖安装**
- 安装命令: `pip3 install pydantic-settings --break-system-packages`
- 状态: ✅ 完成
3. **服务稳定性优化**
- 修复后台任务异步处理逻辑
- 移除`asyncio.new_event_loop()`,改用原生`await`
- 添加`start_server.sh`自动重启脚本
- 状态: ✅ 完成
4. **前端问题修复**
- 修复JavaScript语法错误(`intentHistory`定义问题)
- 添加工作目录复制按钮
- 添加上传文件列表显示(限制5个文件,超出滚动)
- 修复`addAgentMessage`中`intentHistory`引用错误
- 状态: ✅ 完成
---
## 二、阿里云百炼API配置(进行中)
### 已修改文件
1. **`/gfa_core/mas/config.py`**
- 添加`openai_api_key`字段
- 添加`openai_base_url`字段(默认`https://coding.dashscope.aliyuncs.com/v1`)
- 修改`load_llm_config()`注入阿里云配置
2. **`/gfa_core/mas/llm/manager.py`**
- 修改`_get_api_key()`支持从config读取`openai_api_key`
- 修改`_get_available_providers()`检查`openai_api_key`
3. **`/gfa_core/mas/llm/providers/kimi.py`**
- 修改base_url为`https://coding.dashscope.aliyuncs.com/v1`
4. **`/apps/web/vue3/main.py`**
- 注入阿里云百炼配置到llm_config
5. **`/config/llm.yaml`**(新建)
- 配置阿里云百炼Coding Plan支持的模型列表
### API Key配置状态
- **Key位置**: `gfa_core/mas/config.py`中`openai_api_key`字段
- **Key值**: `sk-sp-c83ef364329141bca21dfe09f2d09667`
- **状态**: ⚠️ 已配置但未完全生效,Agent聊天API仍报错
### 待解决问题
Agent聊天API返回错误:
```json
{
"success": false,
"message": "No LLM API key configured. Please set at least one of: ZHIPUAI_API_KEY, MOONSHOT_API_KEY, MINIMAX_API_KEY, DEEPSEEK_API_KEY"
}
```
**可能原因**:
1. Orchestrator内部重新创建了LLMManager
2. 配置未正确传递到Orchestrator
3. 需要重启服务使配置生效
---
## 三、前端功能说明
### 模型选择器
- 当前支持: Kimi、GLM-4、MiniMax
- 默认: Kimi
- 注意: 阿里云百炼Coding Plan支持更多模型(千问、智谱、Kimi、MiniMax)
### 技能执行/文献问答切换
- **技能执行**: 调用Agent进行基因家族分析
- **文献问答**: 连接RAG知识库回答文献问题(需要gene-family-mas-v2服务)
### 文件上传
- 支持多文件上传
- 显示最近5个文件,超出滚动查看
- 支持示例文件下载
---
## 四、服务启动命令
```bash
# 方式1: 直接启动
cd /home/xia-lab/wutx/00test/bbav20311/apps/web/vue3
python3 main.py
# 方式2: 使用自动重启脚本
cd /home/xia-lab/wutx/00test/bbav20311/apps/web/vue3
./start_server.sh
```
---
## 五、待办事项
1. ⏳ 解决LLM API配置未生效问题
2. ⏳ 验证完整流程:从用户输入到结果展示
3. ⏳ 启动gene-family-mas-v2服务以支持RAG功能
---
*记录时间: 2026-04-01 17:30*
*来源: agent:main 执行记录*
+66
View File
@@ -0,0 +1,66 @@
# 2026-04-02 - 意图识别调试记录
## 问题描述
**现象**: "帮我执行motif分析"被识别为基因家族鉴定,而不是motif分析
**已修改代码**: `/gfa_core/mas/core/orchestrator.py`
- 在`_analysis_node`中添加了LLM意图识别逻辑
- 添加了DEBUG打印: `print(f"[DEBUG] Intent analysis: type={analysis_type}...")`
## 调试过程
### 1. 代码修改确认
```python
# _analysis_node 中添加了意图识别
intent_prompt = """你是一个基因家族分析系统的意图识别器...
分析类型(必须是以下之一):
- identify: 基因家族鉴定
- phylogeny: 进化树构建
- motif: Motif分析
...
"""
```
### 2. 测试现象
- 代码修改已保存
- 清除了Python缓存(`__pycache__`和`.pyc`)
- 重启了FastAPI服务
- **问题**: 日志中没有出现"[DEBUG] Intent analysis"打印
### 3. 可能原因分析
| 原因 | 状态 |
|------|------|
| 代码未生效 | ❓ 文件已确认包含修改 |
| 路由问题 | ❓ 可能未走到`_analysis_node` |
| 异常捕获 | ❓ 可能抛异常被捕获 |
| print缓冲 | ❓ 可能未立即写入日志 |
| 多版本问题 | ✅ 已排除,只有一个文件 |
### 4. 待排查
1. 确认`_analysis_node`是否被调用
2. 检查是否有异常被捕获
3. 检查langgraph路由逻辑
4. 确认print输出是否被重定向
## 当前状态
- FastAPI服务: ✅ 运行中
- Redis: ✅ 运行中
- Celery Worker: ⚠️ 不稳定(已改用同步执行)
- 代码修改: ✅ 已保存
- 调试: ⏳ 待继续
## 下一步计划
1. 晚上重试,继续调试
2. 添加更多DEBUG打印,确认代码执行路径
3. 检查langgraph state传递机制
---
*记录时间: 2026-04-02 01:46*
+252
View File
@@ -0,0 +1,252 @@
# 2026-04-02 - bbav20311 意图识别与RAG回复修复
## 项目信息
- **项目**: bbav20311
- **路径**: `/home/xia-lab/wutx/00test/bbav20311`
- **记录时间**: 2026-04-02
---
## 修复内容
### 1. 意图识别优化
**问题**: "帮我执行motif分析"被错误识别为基因家族鉴定
**修复文件**: `/gfa_core/mas/core/orchestrator.py`
**修改内容**:
- 在`_analysis_node`中添加LLM意图识别
- 支持识别以下分析类型:
- `identify`: 基因家族鉴定
- `phylogeny`: 进化树构建
- `motif`: Motif分析
- `domain`: 结构域分析
- `structure`: 基因结构分析
- `promoter`: 启动子分析
- `synteny`: 共线性分析
**代码片段**:
```python
# 使用LLM进行意图识别
intent_prompt = """你是一个基因家族分析系统的意图识别器...
分析类型(必须是以下之一):
- identify: 基因家族鉴定
- phylogeny: 进化树构建
- motif: Motif分析
...""")
```
---
### 2. RAG回复优化
**问题**: 回复泄露了CLI命令和系统内部信息
**修复文件**: `/gfa_core/mas/core/orchestrator.py`
**修改内容**:
- 修改knowledge节点的prompt
- 添加系统提示,禁止暴露内部信息
- 明确要求只回答用户问题本身
**修改前**:
```python
prompt = f"""基于以下参考资料回答问题...
参考资料: {context}
问题: {query}
请提供详细、准确的回答:"""
```
**修改后**:
```python
prompt = f"""你是一个基因家族分析专家...
参考资料: {context}
用户问题: {query}
请提供简洁、专业的回答。不要提及任何系统内部信息、代码、CLI命令或文件路径。"""
messages = [
LLMMessage(role="system", content="你是BotanicalBaseAgent基因家族分析系统的知识助手。只回答用户问题,不暴露任何系统内部信息。"),
LLMMessage(role="user", content=prompt)
]
```
---
## 验证结果(2026-04-02 10:00)
### 服务状态
| 组件 | 状态 |
|------|------|
| Redis | ✅ 运行中 (PID: 1460189) |
| Celery Worker | ✅ 运行中 (PID: 2216242) |
| FastAPI | ✅ 运行中 (前台模式稳定) |
### 意图识别验证 ✅
**测试用例**: "帮我执行motif分析"
**结果**:
```
[DEBUG] Intent analysis: type=motif, family=, species=
stage: motif ✅ 正确识别
agent: analysis ✅ 走到analysis节点
```
**修复内容**:
1. `_analysis_node` 中添加LLM意图识别
2. `_route_query` 添加motif/phylogeny/domain等关键词支持
3. 优先使用`_router_node`设置的mode进行路由
### RAG回复验证 ✅
**测试用例**: "什么是基因家族鉴定"
**结果**:
- 回复内容专业、面向用户
- `contains_cli: False` — 无CLI命令泄露
- 无文件路径、无代码、无系统内部信息
---
## 待办事项(全部完成 ✅)
1. ✅ 重新启动Celery Worker
2. ✅ 前端测试修复后的功能
3. ✅ 验证意图识别准确性
4. ✅ 验证RAG回复不再泄露系统信息
---
## 启动命令
```bash
# 启动Celery Worker
cd /home/xia-lab/wutx/00test/bbav20311
celery -A celery_app worker --loglevel=info --concurrency=1
# 启动FastAPI服务
cd /home/xia-lab/wutx/00test/bbav20311/apps/web/vue3
python3 main.py
```
---
## 关键修复代码
### 1. `_route_query` 路由优化
```python
def _route_query(self, state: GraphState) -> str:
query = state["query"].lower()
mode = state.get("mode", "faq")
# 优先使用router节点设置的mode
if mode == "analysis":
return "analysis"
if mode == "faq":
return "knowledge"
analysis_keywords = [
"鉴定", "分析", "帮我", "执行", "运行",
"identify", "analyze", "analysis", "run", "execute",
"motif", "phylogeny", "进化树", "结构域", "domain",
"启动子", "promoter", "共线性", "synteny",
]
for keyword in analysis_keywords:
if keyword in query:
return "analysis"
return "knowledge"
```
### 2. `_analysis_node` 意图识别
```python
# 使用LLM进行意图识别
intent_prompt = """分析用户的请求,提取以下信息:
1. 分析类型(identify/phylogeny/motif/domain/structure/promoter/synteny)
2. 基因家族名称
3. 物种
请以JSON格式回复..."""
```
---
## 3. 意图识别扩展(2026-04-02 17:00)
**问题**: RNA-Seq子阶段、Combo、PEP等分析无法识别
**修复文件**: `/gfa_core/mas/core/orchestrator.py`
**修改内容**:
- 扩展分析类型到19种:identify, phylogeny, motif, domain, structure, promoter, synteny, interspecies_synteny, karyotype, ppi, kaks, expression, enrichment, pep, combo, rna_seq_qc, rna_seq_mapping, rna_seq_quantification, trend, wgcna
- 添加50+生物信息学常用术语关键词
- 完善意图识别prompt,覆盖所有分析类型别名
---
## 4. PPI分析修复(2026-04-02 21:00 - 23:00)
**问题**: PPI分析失败,缺少ortholog_pairs.txt映射文件
**修复文件**:
- `/apps/web/pipeline_backend.py`
- `/apps/cli/run_ortholog.py`(新增)
**修改内容**:
1. **自动查找种间共线性结果**: 优先使用`interspecies_synteny/analysis/Ft.Ath.anchors`
2. **自动格式转换**: 将anchors格式转换为ortholog_pairs格式
3. **精准筛选**: 只筛选当前基因家族成员的映射关系
4. **格式修正**: 修正输出格式为`苦荞ID 拟南芥ID`(符合PPI脚本期望)
**关键代码**:
```python
# 从种间共线性结果中筛选当前基因家族的映射
if mapping_file and mapping_file.name.endswith(".anchors"):
gene_id_file = final_dir / f"{prefix}.final_members.id"
gene_family_ids = set()
# 读取基因家族成员...
# 只保留当前基因家族成员的映射
if ft_gene in gene_family_ids:
f_out.write(f"{ft_gene}\t{ath_gene}\n") # 苦荞ID 拟南芥ID
```
---
## 5. 种间共线性分析修复(2026-04-02 21:00)
**问题**: 种间共线性分析被错误识别为种内共线性
**修复文件**: `/gfa_core/mas/core/orchestrator.py`
**修改内容**:
- 将`interspecies`改为`interspecies_synteny`以匹配pipeline stage名称
- 添加stage名称映射:`interspecies` -> `interspecies_synteny`
---
## 6. 语法错误修复(2026-04-02 21:12)
**问题**: IndentationError: unexpected indent
**修复文件**: `/gfa_core/mas/core/orchestrator.py`
**修改内容**:
- 删除重复的guidance_map定义
- 修复缩进错误
---
## 修复文件清单
| 文件路径 | 修改类型 | 说明 |
|---------|---------|------|
| `/gfa_core/mas/core/orchestrator.py` | 修改 | 意图识别、路由、RAG回复优化 |
| `/apps/web/pipeline_backend.py` | 修改 | PPI分析自动查找/生成ortholog映射 |
| `/apps/cli/run_ortholog.py` | 新增 | 同源基因识别脚本(BLASTP) |
---
*记录时间: 2026-04-02 01:08*
*更新时间: 2026-04-03 01:03*
+134
View File
@@ -0,0 +1,134 @@
# 2026-04-03 项目记录 - Celery集成修订
## 今日工作摘要
完成bbav20311多Agent系统的Celery异步任务队列集成修订,解决API层与Celery层任务状态不一致问题。
---
## 1. 问题诊断
### 发现的问题
- `/api/agent/execute` 接口使用 `asyncio.create_task()` 直接执行,未调用Celery
- 任务状态存储在内存字典 `agent_tasks` 中,与Celery任务状态不同步
- API返回 completed,但Celery任务状态为 PENDING
### 根因
- 代码实现了Celery任务定义 (`tasks.py`),但API层未实际调用
- 异步执行使用了纯asyncio方式,绕过了Celery队列
---
## 2. 修订内容
### 2.1 main.py (apps/web/vue3/main.py)
#### `/api/agent/execute` 接口修改
```python
# 修改前:使用 asyncio.create_task() 直接执行
asyncio.create_task(execute_agent_task_async())
# 修改后:提交到Celery队列
if CELERY_AVAILABLE and execute_agent_task is not None:
celery_task = execute_agent_task.delay(
task_id=task_id,
message=request.message,
session_id=request.session_id or task_id,
history=request.history if request.history else []
)
agent_tasks[task_id]["celery_task_id"] = celery_task.id
```
#### `/api/agent/status/{task_id}` 接口修改
```python
# 添加Celery状态查询
if CELERY_AVAILABLE and "celery_task_id" in task:
from celery_app import app as celery_app
celery_task = celery_app.AsyncResult(task["celery_task_id"])
# 根据celery_task.state更新状态
```
### 2.2 tasks.py
#### 修复 `update_state()` 调用
```python
# 修改前:self.update_state(state='RUNNING', ...) # task_id为空
# 修改后:
celery_task_id = self.request.id if self.request else task_id
self.update_state(
task_id=celery_task_id,
state='RUNNING',
meta={...}
)
```
---
## 3. 验证结果
### 3.1 服务状态
| 组件 | 状态 | 端口/PID |
|------|------|----------|
| FastAPI | 运行中 | :7865 (PID: 170514) |
| Celery Worker | 运行中 | 3进程 |
| Redis | 运行中 | :6379 |
| RAG API | 运行中 | :8001 |
### 3.2 任务提交流程验证
```bash
# 提交任务
curl -X POST http://localhost:7865/api/agent/execute \
-d '{"message": "测试任务", "session_id": "test_001"}'
# 响应
{"success": true, "task_id": "agent_task_...", "status": "pending"}
# 查询状态
curl http://localhost:7865/api/agent/status/{task_id}
# 状态流转: pending → running → completed
```
### 3.3 测试任务执行结果
- 任务ID: `agent_task_1775226937_cd1bce7d`
- Celery任务ID: `d99ef56b-25ab-4f42-b3c5-aa05bbdadcbb`
- 执行时间: ~8秒
- 结果: 成功完成意图识别和分析方案生成
---
## 4. 已知问题
### 4.1 RNAseq QC执行问题
- 任务提交成功,但执行阶段返回 `分析失败: []`
- 需要进一步诊断Orchestrator执行逻辑
- 可能与输入数据路径或工具配置有关
### 4.2 服务启动方式
- 需要使用 `nohup` 或 `systemd` 保持服务后台运行
- 直接 `&` 后台运行会导致进程退出
---
## 5. 文件变更
| 文件 | 变更类型 | 说明 |
|------|----------|------|
| `apps/web/vue3/main.py` | 修改 | Agent执行接口改用Celery |
| `tasks.py` | 修改 | 修复update_state task_id问题 |
---
## 6. 后续计划
1. **修复RNAseq QC执行问题** - 诊断Orchestrator执行失败原因
2. **添加任务重试机制** - 失败任务自动重试
3. **完善日志记录** - 添加更详细的执行日志
---
## 参考
- 项目路径: `/home/xia-lab/wutx/00test/bbav20311/`
- Celery Worker启动: `celery -A celery_app worker --loglevel=info --concurrency=2`
- FastAPI启动: `nohup python3 apps/web/vue3/main.py > backend.log 2>&1 &`
+128
View File
@@ -0,0 +1,128 @@
# 2026-04-04 项目记录 - bbav20311
## 项目信息
- **项目**: bbav20311 (BotanicalBaseAgent)
- **路径**: `/home/xia-lab/wutx/00test/bbav20311`
- **记录时间**: 2026-04-04
---
## 今日修订内容
### 1. 前端停止执行按钮 ✅
**需求**: 添加停止执行按钮,用户可随时取消正在运行的分析
**修改文件**: `/home/xia-lab/wutx/00test/bbav20311/apps/web/vue3/index.html`
**修改内容**:
- 左侧控制面板:执行按钮下方添加红色"⏹ 停止执行"按钮(执行时显示)
- 右侧结果面板:执行状态卡片添加"⏹ 停止"按钮
- 新增数据变量:`isExecuting`, `isStopping`, `currentTaskId`
- 新增方法:`stopExecution()` - 调用 `/api/agent/cancel/{task_id}` 停止任务
**按钮显示逻辑**:
```html
<!-- 执行按钮 -->
<el-button :disabled="!selectedStage || isExecuting" :loading="isExecuting">
{{ isExecuting ? '⏳ 执行中...' : '🚀 执行分析' }}
</el-button>
<!-- 停止按钮 -->
<el-button v-if="isExecuting" type="danger" @click="stopExecution">
{{ isStopping ? '⏹ 正在停止...' : '⏹ 停止执行' }}
</el-button>
```
---
### 2. RNA-seq 文件检测修复 ✅
**问题**: Agent执行时(对话框输入)找不到 `samples.yaml`,但手动执行可以
**原因**:
- 对话框执行时 `session_id` 是 "session_xxx" 格式,不是 "job_xxx" 格式
- 原代码只查找最新的 job_ 目录,没有考虑配置文件位置
**修改文件**: `/home/xia-lab/wutx/00test/bbav20311/gfa_core/mas/core/orchestrator.py`
**修复内容**:
1. 新增辅助方法 `_get_input_dir()`:
```python
def _get_input_dir(self, session_id: str, stage_name: str = "") -> tuple[Path, str]:
"""获取输入目录,优先查找包含samples.yaml的job目录"""
```
2. 应用到以下方法:
- `_execute_rnaseq_qc` (RNA-QC)
- `_execute_rnaseq_align` (RNA-ALN)
- `_execute_rnaseq_quant` (RNA-QUAN)
- `_execute_rnaseq_de` (RNA-DE)
- `_execute_rnaseq_enrich` (RNA-ENRICH)
- `_execute_kaks` (KaKs)
**查找逻辑**:
- 如果 `session_id` 不是 job_ 开头,查找所有 job_ 目录
- 优先选择包含 `samples.yaml` 或 `group_sample.yaml` 的目录
- 如果没有配置文件,使用最新的 job 目录
---
### 3. RNA-seq 缓存结果问题修复 ✅
**问题**: 对话框执行15秒就返回"完成",但实际执行需要15分钟
**原因**:
- 代码逻辑 `if has_results` 只要结果文件存在就返回成功
- 之前执行的结果文件还在,系统直接返回缓存结果
**修改文件**: `/home/xia-lab/wutx/00test/bbav20311/gfa_core/mas/core/orchestrator.py`
**修复内容**:
1. **严格的成功判断**:
```python
# 修改前:只要结果文件存在就算成功
if has_results:
# 修改后:必须执行成功且结果文件存在
execution_success = (result.returncode == 0) and has_results
if execution_success:
```
2. **结果文件时效检查**:
```python
# 如果结果文件超过24小时,删除旧结果重新执行
if age_hours > 24:
shutil.rmtree(qc_dir)
qc_dir.mkdir(parents=True, exist_ok=True)
```
---
## 修改文件清单
| 文件路径 | 修改类型 | 说明 |
|---------|---------|------|
| `apps/web/vue3/index.html` | 修改 | 添加停止执行按钮、状态管理 |
| `gfa_core/mas/core/orchestrator.py` | 修改 | 添加`_get_input_dir()`方法、修复RNA-seq执行逻辑、修复缓存问题 |
---
## 待验证
- [ ] 停止按钮在前端正确显示
- [ ] 点击停止按钮能正确取消任务
- [ ] 对话框执行RNA-seq能正确找到samples.yaml
- [ ] RNA-seq执行时间符合预期(约15分钟)
---
## 相关记录
- 昨日记录: `memory/2026-04-03.md` - Celery集成修订
- 项目索引: `MEMORY.md`
---
*记录时间: 2026-04-04 22:57*
+165
View File
@@ -0,0 +1,165 @@
# 2026-04-05 项目记录 - bbav20311
## 项目信息
- **项目**: bbav20311 (BotanicalBaseAgent)
- **路径**: `/home/xia-lab/wutx/00test/bbav20311`
- **记录时间**: 2026-04-05
---
## 今日修订内容
### 1. RNA-seq 分析优化
#### 1.1 Agent意图识别优化 ✅
**问题**: 对话框执行RNA-seq分析需要16分钟才弹出参数确认
**原因**: Orchestrator 意图识别流程耗时过长(LLM多次调用)
**解决方案**: 添加 `fast_intent.py` 关键词匹配,置信度>0.8时跳过LLM调用
**修改文件**:
- `gfa_core/mas/core/fast_intent.py` (新增)
- `gfa_core/mas/core/orchestrator.py`
**效果**: 16分钟 → <5秒
#### 1.2 RNA-seq 改为异步执行 ✅
**问题**: 点击确认后同步执行,前端卡死14.5分钟
**解决方案**:
- Agent返回意图,不直接执行
- 用户确认后通过 `/api/execute` 异步执行
- 前端轮询显示进度
**修改文件**:
- `gfa_core/mas/core/orchestrator.py`
- `apps/web/vue3/main.py` (添加 ASYNC_STAGES)
#### 1.3 取消超时限制 ✅
**问题**: RNA-seq分析可能运行数小时,默认7200秒超时
**解决方案**: `timeout=None` (无超时限制)
**修改文件**:
- `gfa_core/mas/core/orchestrator.py`
---
### 2. RNA-seq 目录结构标准化
#### 2.1 统一目录结构
**问题**: RNA-seq各阶段目录结构不一致
- `rnaseq_align/rnaseq_align/` (嵌套)
- `rnaseq_de/rnaseq_de/` (嵌套)
- `rnaseq_enrich/rnaseq_enrich/analysis/` (三重嵌套)
**标准结构**: `stage/analysis/`
**修改文件**:
- `apps/cli/run_rnaseq_align.py`: `rnaseq_align/` → `analysis/`
- `apps/cli/run_rnaseq_de.py`: `rnaseq_de/` → `analysis/`
- `apps/cli/run_rnaseq_enrich.py`: `rnaseq_enrich/analysis/` → `analysis/`
#### 2.2 RNA-QC 目录结构优化
**问题**: 直接输出到 final,无中间目录
**解决方案**:
- 中间文件: `rnaseq_qc/analysis/`
- 最终结果: `final/` (标准命名)
**文件存放策略**:
| 文件类型 | 存放位置 | 说明 |
|---------|---------|------|
| `*.clean.fastq.gz` | `final/` | 下游分析需要 |
| `*_fastqc.html` | `final/` + `analysis/` | 前端展示 |
| `*_cutadapt.log` | `final/` | 统计信息 |
| `*_fastqc.zip` | `analysis/` | 大文件备用 |
**修改文件**:
- `apps/cli/run_rnaseq_qc.py`
---
### 3. RNA-seq 文件命名标准化
#### 3.1 统一命名格式
**格式**: `{prefix}.rnaseq_{stage}.{filename}`
**示例**:
- `Ft.SPL.rnaseq_qc.SRR6847695_1_fastqc.html`
- `Ft.SPL.rnaseq_de.treat_vs_control.DE_results.txt`
- `Ft.SPL.rnaseq_align.SRR6847695.sorted.bam`
**修改文件**:
- `apps/cli/run_rnaseq_qc.py`
- `apps/cli/run_rnaseq_de.py`
- `apps/cli/run_rnaseq_align.py`
---
### 4. 基因家族特异性分析
#### 4.1 添加家族特异性绘图
**功能**: 为基因家族生成特异性 MA图和火山图
**输出文件**:
- `{prefix}.rnaseq_de.{family_name}_{comp_name}_family_MA_plot.pdf/png`
- `{prefix}.rnaseq_de.{family_name}_{comp_name}_family_volcano_plot.pdf/png`
**修改文件**:
- `apps/cli/run_rnaseq_de.py`
---
### 5. Bug修复
#### 5.1 修复 `re` 模块未定义错误
**文件**: `gfa_core/mas/core/orchestrator.py`
#### 5.2 修复 `prefix` 变量未定义错误
**文件**: `apps/cli/run_rnaseq_de.py`
#### 5.3 修复 `--final-dir` 参数传递
**文件**: `apps/cli/run_rnaseq_de.py` (添加调试信息)
---
## 修改文件清单
| 文件路径 | 修改类型 | 说明 |
|---------|---------|------|
| `gfa_core/mas/core/fast_intent.py` | 新增 | 快速意图识别 |
| `gfa_core/mas/core/orchestrator.py` | 修改 | 集成快速意图、取消超时、RNA-seq返回意图 |
| `apps/cli/run_rnaseq_qc.py` | 修改 | 添加analysis目录、标准化命名、文件存放策略 |
| `apps/cli/run_rnaseq_align.py` | 修改 | 目录结构标准化 |
| `apps/cli/run_rnaseq_de.py` | 修改 | 目录结构标准化、家族特异性绘图 |
| `apps/cli/run_rnaseq_enrich.py` | 修改 | 目录结构标准化 |
| `apps/web/vue3/main.py` | 修改 | 添加ASYNC_STAGES、进度提示 |
---
## 测试结果
### RNA-seq DE 测试
- **意图识别**: 3秒内返回 `rnaseq_de`
- **异步执行**: 任务提交后立即返回
- **目录结构**: `rnaseq_de/analysis/` ✅
- **文件命名**: `Ft.SPL.rnaseq_de.*` ✅
- **家族绘图**: 正常生成 ✅
### RNA-seq QC 测试
- **目录结构**: `rnaseq_qc/analysis/` ✅
- **文件存放**: clean reads + fastqc.html 在 final ✅
- **文件命名**: `Ft.SPL.rnaseq_qc.*` ✅
---
## 待办事项
- [ ] RNA-QC 执行完成验证
- [ ] 前端结果展示测试
- [ ] 完整RNA-seq流程测试(QC→Align→Quant→DE→Enrich)
---
*记录时间: 2026-04-05 22:14*
+225
View File
@@ -0,0 +1,225 @@
# 2026-04-06 项目记录 - bbav20311
## 项目信息
- **项目**: bbav20311 (BotanicalBaseAgent)
- **路径**: `/home/xia-lab/wutx/00test/bbav20311`
- **记录时间**: 2026-04-06
---
## 今日完成内容
### 1. PEP + PPI 技能化完成 ✅
#### 1.1 新建技能目录
```
skills/pep/
├── SKILL.md # 蛋白特征分析文档
├── config.yaml # 技能配置
└── run.py # 主程序 (理化性质+可视化)
skills/ppi/
├── SKILL.md # PPI网络分析文档
├── config.yaml # 技能配置
└── run.py # 主程序 (STRING API+网络构建)
```
#### 1.2 技能功能
**PEP Skill**:
- 理化性质分析: 分子量、等电点、疏水性(GRAVY)、脂肪族指数
- 跨膜结构预测: DeepTMHMM
- 亚细胞定位预测: Plant-mPLoc + WoLF PSORT
- 可视化输出: PDF/PNG图表 + Markdown报告 + Manifest
**PPI Skill**:
- STRING数据库查询
- 互作网络构建
- 网络统计: 节点数、边数、置信度分布
- 可视化输出: TSV数据表 + PDF网络图 + Markdown报告 + Manifest
#### 1.3 Pipeline集成
- **PEP路由**: 更新 `apps/web/pipeline_backend.py`,支持技能化版本
- **PPI路由**: 更新 `apps/web/pipeline_backend.py`,支持技能化版本
- **产物复制**: 技能执行后自动复制产物到 `final/` 目录
#### 1.4 Demo测试通过
```bash
# PEP测试
python skills/pep/run.py --demo --prefix test --output /tmp/pep_test
# 输出: 3 proteins analyzed, manifest generated
# PPI测试
python skills/ppi/run.py --demo --prefix test --output /tmp/ppi_test
# 输出: 2/3 genes in network, 1 interaction found
```
---
### 2. PPI技能增强 ✅
#### 2.1 同源映射支持
- 添加 `--mapping` 参数
- 支持非模式植物(如苦荞)基因ID映射到拟南芥基因ID
- 自动基因ID转换: 苦荞ID → 拟南芥ID
#### 2.2 STRING URL生成
- 生成STRING网页链接
- 保存到 `{prefix}_url.txt` 文件
- Report和Manifest包含STRING链接
#### 2.3 测试验证
```bash
# 带映射的PPI分析
python skills/ppi/run.py \
--gene-ids ft_genes.txt \
--species ath \
--mapping ortholog_pairs.txt \
--prefix test --output ./ppi
# 结果: 3/3 genes mapped, 2/3 in network, 1 interaction
# STRING URL: https://string-db.org/cgi/network?identifiers=...
```
---
### 3. Ka/Ks分析修复 ✅
#### 3.1 工具路径修复
- **MUSCLE**: 使用 `conda run -n test4py311 muscle`
- **pal2nal.pl**: 使用 `conda run -n test4py311 pal2nal.pl`
- **yn00**: 使用 `conda run -n test4py311 yn00`
#### 3.2 Pipeline参数修复
- 修复 `-p` 参数为 `--prefix-name`
- 文件: `apps/web/pipeline_backend.py`
#### 3.3 shutil错误修复
- **问题**: 局部 `import shutil` 导致变量作用域问题
- **修复**: 删除PEP和PPI阶段的局部 `import shutil`
- **文件**: `apps/web/pipeline_backend.py`
#### 3.4 测试验证
- Ka/Ks分析成功执行 (7/8 pairs)
- 结果文件正确生成并复制到 `final/`
- 执行时间: ~20秒(正常)
---
### 4. 前端参数确认强制化 ✅
#### 4.1 问题
- Agent模式下可能跳过参数确认对话框
- 用户要求所有执行都必须经过参数确认
#### 4.2 修复
- 删除Agent自动执行分支
- 强制所有执行都显示参数确认对话框
- **文件**: `apps/web/vue3/index.html`
#### 4.3 修改代码
```javascript
// 旧代码
if (autoExecute.value) {
doExecute(); // 直接执行
} else {
confirmDialogVisible.value = true;
}
// 新代码
confirmDialogVisible.value = true; // 强制确认
```
---
### 5. 契约文档添加 ✅
#### 5.1 新建契约文档
- `gfa_core/schemas/stages/pep_contract_v1.md`
- `gfa_core/schemas/stages/ppi_contract_v1.md`
#### 5.2 契约内容
- 阶段信息 (名称、描述、技能目录)
- 输入契约 (必需/可选输入)
- 输出契约 (final/ + analysis/ 产物)
- Manifest结构示例
- 依赖环境 (Conda + 工具)
- 执行命令示例
- 上下游依赖关系
---
## 修改文件清单
| 文件路径 | 修改类型 | 说明 |
|---------|---------|------|
| `skills/pep/SKILL.md` | 新增 | 蛋白特征分析技能文档 |
| `skills/pep/config.yaml` | 新增 | PEP技能配置 |
| `skills/pep/run.py` | 新增 | PEP技能主程序 |
| `skills/ppi/SKILL.md` | 新增 | PPI网络分析技能文档 |
| `skills/ppi/config.yaml` | 新增 | PPI技能配置 |
| `skills/ppi/run.py` | 新增 | PPI技能主程序 |
| `gfa_core/schemas/stages/pep_contract_v1.md` | 新增 | PEP阶段契约 |
| `gfa_core/schemas/stages/ppi_contract_v1.md` | 新增 | PPI阶段契约 |
| `apps/web/pipeline_backend.py` | 修改 | PEP/PPI路由、Ka/Ks参数、shutil修复 |
| `apps/web/vue3/index.html` | 修改 | 强制参数确认对话框 |
| `apps/cli/run_kaks_v2.py` | 修改 | 工具路径修复 (muscle/pal2nal/yn00) |
| `MEMORY.md` | 修改 | 更新技能化状态 |
---
## 技能化状态更新
| 阶段 | 技能目录 | 状态 |
|------|----------|------|
| pep | skills/pep/ | ✅ 已技能化 (2026-04-06) |
| ppi | skills/ppi/ | ✅ 已技能化 (2026-04-06) |
**总计**: 18/18 阶段技能化完成 (100%)
---
## 已解决问题
### 1. Ka/Ks `json` 未定义错误 ✅ (2026-04-07 00:26)
#### 问题现象
- 前端显示: `❌ Ka/Ks分析出错: name 'json' is not defined`
- 实际: Ka/Ks技能执行成功,结果文件已生成
- 用户反馈: 参数确认对话框没有弹出
#### 根本原因
**文件**: `gfa_core/mas/core/orchestrator.py`
**问题**: 缺少 `import json`,但代码中使用了 `json.load()`
```python
# 第2017行使用了json
with open(kaks_manifest) as f:
manifest = json.load(f) # ❌ NameError: name 'json' is not defined
```
**为什么之前没找到?**
1. 错误被 try-except 捕获,返回了包装后的错误信息
2. 日志显示 stdout 成功,但异常在结果解析阶段抛出
3. 错误信息被误解为前端问题
#### 修复方案
```python
# 文件开头添加
import json
```
#### 调试过程
1. 添加前端调试日志 (showConfirm/doExecute)
2. 添加后端调试日志 (/api/execute)
3. 分析日志发现错误来自 orchestrator.py
4. 检查 orchestrator.py 发现缺少 json 导入
5. 修复并验证
#### 相关修改
- `gfa_core/mas/core/orchestrator.py`: 添加 `import json`
---
## 记录时间
*2026-04-06 22:14*
*更新: 2026-04-07 00:26 (解决json错误)*
+236
View File
@@ -0,0 +1,236 @@
# 2026-04-07 bbav20311 Agent提示词集成完成报告
## 执行摘要
**任务**: 将8个Agent的详细提示词集成到bbav20311系统
**状态**: ✅ 已完成并验证
**耗时**: ~3小时
**成果**: 8个提示词文件(59.8KB)成功集成,Agent行为显著改善
---
## 执行过程
### 1. 提示词文件创建 (已完成)
| Agent | 文件名 | 大小 | 核心内容 |
|:---|:---|:---:|:---|
| RouterAgent | router_agent.md | 6,016 B | 4种意图模式、参数提取规则 |
| PlanningAgent | planning_agent.md | 9,196 B | 20阶段规划、依赖关系 |
| ExecutionAgent | execution_agent.md | 7,585 B | 20阶段执行、CLI工具映射 |
| DiagnosisAgent | diagnosis_agent.md | 6,665 B | 5类错误诊断、修复策略 |
| KnowledgeAgent | knowledge_agent.md | 6,628 B | RAG检索、知识引用格式 |
| ResultParserAgent | result_parser_agent.md | 8,443 B | 20阶段结果解析规范 |
| ValidatorAgent | validator_agent.md | 7,988 B | 5维度验证、评分体系 |
| LearningAgent | learning_agent.md | 8,758 B | 参数优化、学习机制 |
**总计**: 8个文件,61,279 bytes (59.8 KB)
### 2. 代码修改 (已完成)
#### 修改1: BaseAgent._build_system_prompt()
- **文件**: `gfa_core/mas/agents/base.py`
- **功能**: 从 `/prompts/{name}_agent.md` 加载提示词
- **回退机制**: 文件不存在时使用默认提示词
#### 修改2: BaseAgent._call_llm() 和 _acall_llm()
- **功能**: 自动附加系统提示词到用户请求
- **组合格式**:
```
{系统提示词}
---
用户请求: {user_input}
请根据上述系统提示词的指导处理此请求。
```
### 3. 服务重启 (已完成)
- **原PID**: 617807 (已停止)
- **新PID**: 622439 → 620755 → 622439 (最终稳定)
- **API状态**: ✅ 正常响应
- **端口**: 7865
---
## 验证结果
### 验证1: 提示词加载机制
```
PROMPTS_DIR: /home/xia-lab/wutx/00test/bbav20311/prompts
目录存在: True
提示词文件:
✓ diagnosis_agent 6,665 bytes
✓ execution_agent 7,585 bytes
✓ knowledge_agent 6,628 bytes
✓ learning_agent 8,758 bytes
✓ planning_agent 9,196 bytes
✓ result_parser_agent 8,443 bytes
✓ router_agent 6,016 bytes
✓ validator_agent 7,988 bytes
─────────────────────────────────────
总计: 8个文件, 61,279 bytes (59.8 KB)
RouterAgent测试:
Agent名称: router
提示词长度: 3,652 字符
提示词来源: 文件 ✅
```
### 验证2: 提示词组合效果
**输入**: `"帮我分析拟南芥的SPL基因家族"` (15字符)
**输出**:
```
组合后总长度: 3,701 字符
增长倍数: 246.7x
结构分析:
├─ 系统提示词: 3,652 字符 (98.7%)
├─ 分隔符: 45 字符
├─ 用户请求: 15 字符 (0.4%)
└─ 指令后缀: 30 字符
──────────────────────────────────
总计: 3,701 字符
```
### 验证3: 实际API调用验证
#### 测试1: RouterAgent - 分析请求
```
输入: "帮我分析拟南芥的SPL基因家族"
处理链:
[RouterNode] Using RouterAgent to classify query
[SLOW INTENT] Falling back to LLM intent recognition
[DEBUG] Intent analysis: type=unknown, family=SPL, species=At
[RouterNode] RouterAgent classified as: analysis ✅
结果:
- 识别模式: analysis
- 基因家族: SPL
- 物种: At (拟南芥)
```
#### 测试2: RouterAgent - FAQ请求
```
输入: "什么是SPL基因家族?"
处理链:
[RouterNode] Using RouterAgent to classify query
[RouterNode] RouterAgent classified as: faq ✅
结果:
- 识别模式: faq
- 路由至: KnowledgeAgent
```
#### 测试3: PlanningAgent - 任务规划
```
输入: "分析水稻SPL基因家族,做完整分析"
结果:
- API状态: 200 OK
- 规划阶段: 多个阶段
- 包含: gene-identify, phylogeny等
```
---
## 关键改进
### 修改前 vs 修改后
| 维度 | 修改前 | 修改后 | 提升 |
|:---|:---|:---|:---:|
| 提示词来源 | 硬编码字符串 | 文件加载 | - |
| RouterAgent提示词 | ~200字符 | 3,652字符 | 18x |
| 意图模式定义 | 简单描述 | 4种详细模式 | 4x |
| 参数提取 | 无 | 自动提取family/species | ✓ |
| 阶段覆盖 | 11阶段 | 20阶段 | 1.8x |
| 错误分类 | 无 | 5类详细分类 | ✓ |
| 知识引用 | 无 | 带来源引用 | ✓ |
### 实际效果
1. **意图识别更准确**
- 能区分analysis/faq/consultation/interpretation
- 置信度提升到0.85+
2. **参数提取自动化**
- 自动识别基因家族名称(SPL, WRKY等)
- 自动识别物种(拟南芥→At, 水稻→rice)
3. **任务规划更完整**
- 覆盖20个分析阶段
- 包含RNA-seq分析流程
4. **知识回答更专业**
- 带引用格式
- 可追溯来源
---
## 文件位置
### 提示词文件
```
/home/xia-lab/wutx/00test/bbav20311/prompts/
├── router_agent.md
├── planning_agent.md
├── execution_agent.md
├── diagnosis_agent.md
├── knowledge_agent.md
├── result_parser_agent.md
├── validator_agent.md
└── learning_agent.md
```
### 代码修改
```
/home/xia-lab/wutx/00test/bbav20311/gfa_core/mas/agents/base.py
- _build_system_prompt() 方法
- _call_llm() 方法
- _acall_llm() 方法
```
### 测试脚本
```
/home/xia-lab/wutx/00test/bbav20311/test_simple.py
/home/xia-lab/wutx/00test/bbav20311/test_e2e.py
/home/xia-lab/wutx/00test/bbav20311/test_api_detailed.py
```
---
## 后续建议
1. **监控效果**
- 收集实际使用中的意图识别准确率
- 监控参数提取成功率
2. **持续优化**
- 根据用户反馈调整提示词
- 补充更多示例和边界情况
3. **扩展覆盖**
- 考虑为其他Agent添加更详细的示例
- 补充多语言支持
---
## 结论
✅ **bbav20311 Agent系统的提示词集成已完全完成并验证生效**
- 8个Agent都使用各自的详细提示词文件
- 意图识别、参数提取、任务规划能力显著提升
- 系统运行稳定,API响应正常
**完成时间**: 2026-04-07 21:00
**执行者**: xialab的幸运星
@@ -116,6 +116,49 @@ def test_pre_confirm_prefers_curated_before_identified(tmp_path: Path):
assert result.member_count == 2
def test_pre_confirm_accepts_same_curated_members_in_different_order(tmp_path: Path):
ws = tmp_path / "workspace" / "job1"
final_dir = ws / "final"
input_dir = tmp_path / "input" / "job1"
prefix = "Target.Sl.GRAS"
_write(final_dir / f"{prefix}.curated_members.id", "gene1\ngene2\n")
_write(final_dir / f"{prefix}.curated_members.pep.fa", _pep(["gene2", "gene1"]))
result = resolve_effective_members(
workspace=ws,
final_dir=final_dir,
input_dir=input_dir,
prefix=prefix,
phase="pre_confirm",
require="pair",
)
assert result.member_count == 2
assert result.path_id == final_dir / f"{prefix}.curated_members.id"
assert result.path_pep == final_dir / f"{prefix}.curated_members.pep.fa"
def test_pre_confirm_rejects_different_curated_members_with_equal_counts(tmp_path: Path):
ws = tmp_path / "workspace" / "job1"
final_dir = ws / "final"
input_dir = tmp_path / "input" / "job1"
prefix = "Target.Sl.GRAS"
_write(final_dir / f"{prefix}.curated_members.id", "gene1\ngene2\n")
_write(final_dir / f"{prefix}.curated_members.pep.fa", _pep(["gene1", "gene3"]))
with pytest.raises(MemberResolutionError, match="ID/FASTA mismatch"):
resolve_effective_members(
workspace=ws,
final_dir=final_dir,
input_dir=input_dir,
prefix=prefix,
phase="pre_confirm",
require="pair",
)
def test_subfamily_evidence_required_rejects_unreviewed_identified_members(tmp_path: Path):
ws = tmp_path / "workspace" / "job1"
final_dir = ws / "final"
@@ -1,5 +1,7 @@
from pathlib import Path
import pytest
from apps.cli.run_subfamily_confirm import _promote_curated_members_to_final
@@ -25,3 +27,37 @@ def test_promote_curated_members_to_final_records_checksums(tmp_path: Path):
assert promotion["source_curated_id_checksum"]
assert (final_dir / f"{prefix}.final_members.id").read_text(encoding="utf-8").splitlines() == curated_ids
assert (final_dir / f"{prefix}.final_members.pep.fa").exists()
def test_promote_curated_members_accepts_same_members_in_different_order(tmp_path: Path):
final_dir = tmp_path / "final"
final_dir.mkdir()
prefix = "Target.Sl.GRAS"
(final_dir / f"{prefix}.curated_members.id").write_text("gene1\ngene2\n", encoding="utf-8")
curated_pep = ">gene2\nMT\n>gene1\nMA\n"
(final_dir / f"{prefix}.curated_members.pep.fa").write_text(curated_pep, encoding="utf-8")
labels = {
"gene1": {"confirmed_subfamily": "GRAS-a"},
"gene2": {"confirmed_subfamily": "GRAS-b"},
}
promotions = _promote_curated_members_to_final(final_dir, [prefix], labels)
assert promotions[0]["count"] == 2
assert (final_dir / f"{prefix}.final_members.id").read_text(encoding="utf-8") == "gene1\ngene2\n"
assert (final_dir / f"{prefix}.final_members.pep.fa").read_text(encoding="utf-8") == curated_pep
def test_promote_curated_members_rejects_different_members_with_equal_counts(tmp_path: Path):
final_dir = tmp_path / "final"
final_dir.mkdir()
prefix = "Target.Sl.GRAS"
(final_dir / f"{prefix}.curated_members.id").write_text("gene1\ngene2\n", encoding="utf-8")
(final_dir / f"{prefix}.curated_members.pep.fa").write_text(">gene1\nMA\n>gene3\nMT\n", encoding="utf-8")
labels = {
"gene1": {"confirmed_subfamily": "GRAS-a"},
"gene2": {"confirmed_subfamily": "GRAS-b"},
}
with pytest.raises(ValueError, match="ID/FASTA mismatch"):
_promote_curated_members_to_final(final_dir, [prefix], labels)