Files

226 lines
6.2 KiB
Markdown
Raw Permalink Normal View History

# 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错误)*