7.9 KiB
7.9 KiB
BIOFLOW DEV1 P0 报告(开发 agent A1)
工作分支: feature/bioflow-conversation-orchestration(保持,未切换) 报告逐节追加,每完成一步写一节。
0. 探索发现(写盘前记录)
- dev 仓库实际布局: apps/cli(92文件)、gfa_core/(顶层,30+模块)、scripts/(顶层,2.2G 其中 bge-m3-model 2.2G)、assets/(顶层,examples+hmm)
- 任务书路径 apps/gfa_core 与 apps/scripts 在 dev 实际位于顶层,按目标 bioflow_kernel/{cli,gfa_core,scripts,assets/hmm} 复制,与 dev 顶层同构(保 parents[2] 机制)
- parents[2] 机制: cli/run_*.py 中 PROJECT_ROOT = Path(file).resolve().parents[2]
- dev: dev/apps/cli/run_x.py → parents[2] = dev/
- 镜像内: /app/cli/run_x.py → parents[2] = /app/(内核树放 /app/{cli,gfa_core,scripts},需内核 assets/hmm 或挂载)
- BBA_* 环境变量已存在于 dev 源码: BBA_PFAM_DIR/BBA_DISABLE_RAG_PFAM_LOOKUP/BBA_CONDA_SH/BBA_RAG_* 均已实现(dev 侧已完成部分容器化准备)
- 金标: test_input/ 含 Ft 四件套 + SBP.hmm + SPL_Ath.fasta 参考;预期 test_final/identify/combine/Ft.SPL.combined.ids = 24 ID
- 硬编码超限: /home/xzq/miniconda3 硬编码 87 处/39 文件(详见 §4),>3 处 → 按纪律交 TL 裁决(见 §4),本 agent 不自行扩散修改
- bioflow-data/ 尚未创建(team_context 称 TL 建;若金标跑前仍无,将记入报告并尝试自建软链)
- 18 基因家族链入口定义: gfa_core/mas/utils/intent_parser.py CORE_STAGES = 15 阶段(identify/phylogeny/motif/domain/structure/combo/promoter/tfbs/synteny/interspecies_synteny/karyotype/pep/ortholog/kaks/ppi)
- workflow 前置链: genome_prepare(准备)、reference_classification(亚家族预测)、subfamily_confirm(亚家族确认) 任务 F 采用此 18 入口执行 --help 冒烟(原 CORE_STAGES 15 + genome_prepare + identify_refine + gene_family_report 或 reference_classification/subfamily_confirm 的取舍最终以 §8 为准)
- run_kaks.py 不存在,入口为 run_kaks_v2.py(阶段名 kaks)
- 环境: docker 权限 OK(docker ps 成功)、磁盘 /home 12T 可用、conda 环境齐全(test4py311 py3.11.14/16G、rnaseq 6.3G、rnaR 2.7G、ASAW 5.4G/py3.8、interproscanpy311 777M/py3.11.15)
- conda-pack 可用(/home/xzq/miniconda3/bin/conda-pack);编译基线 compile_sdk.sh 已读,白名单机制明确(支持改造为 glob)
- 编译陷阱记忆(来自记忆文件): scp 散落文件易漏编译;compile_sdk.sh 三参用法 [python]
1. 内核树复制(完成)
目标 /home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new/bioflow_kernel/,源 PlantAI-dev 只读零改动:
| 子目录 | 来源 | 文件数 | 说明 |
|---|---|---|---|
| cli/ | dev/apps/cli/ | 94 | 92 文件全量 + 2 隐藏文件,含 legacy 变体(pep_legacy/v2_preview) |
| gfa_core/ | dev/gfa_core/(dev 顶层,非 apps/ 下) | 277 | 30+ 模块 + mas/ + pipelines/ + templates/ + schemas/ + workflows/ |
| scripts/ | dev/scripts/(dev 顶层) | 157 | 排除 bge-m3-model 2.2G;pep_v2 包与 tree_domain.R 齐全 |
| assets/hmm/ | dev/assets/hmm/ | 1 | SBP.hmm |
- rsync -a --exclude pycache --exclude .py.bak(dev 有 .bak_20260716 文件排除)
- 一致性: diff -r cli vs dev/apps/cli 退出码 0(完全一致)
- 总计 529 文件 11M
- dev 仓库未做任何写入(只 rsync 读)
2. 源码适配 B(完成)
B3: from apps.cli → from cli 机械替换
- 替换范围: bioflow_kernel/{cli,gfa_core,scripts} 全树
- 方式: sed -i "s/apps.cli/cli/g"(逐文件)
- 命中: 66 处(25 处 import 语句 + 约 41 处 -m 模块名/runner 标注等字符串与路径,一并替换保持一致性)
- 替换后 grep "apps.cli" = 0
- 剩余 "apps" 引用(未改,照抄 dev,涉及 12 文件):
- PROJECT_ROOT / "apps" / "cli" / run_x.py 路径拼接(orchestrator/stage_tools/stage_registry/identify_tool/diagnosis/run_phylogeny)
- from apps.web.pipeline_backend import(diagnosis/stage_tools/pipeline_with_repro)——apps.web 不在内核树,import 时会失败;但只在 dev 编排路径触发,内核树入口 -m cli.run_x 不触发(记录)
- scripts/check_autofill_regression.py 引用 apps/web/vue3/index.html(诊断脚本,不参与阶段执行) 这些属于 dev 编排层遗留,不影响金标 identify 等价性;是否进一步适配交 TL 裁决(见 §4)
B1: CONDA_PREFIX 硬编码 → sys.executable 推导 + 环境变量覆盖
- 文件: cli/run_identify.py(dev 行 53-58)
- 改动: 新增 _derive_conda_prefix(): BBA_CONDA_PREFIX 环境变量优先 → 回退 sys.executable 推导 (exe 父目录名为 bin 则 prefix=bin 本身,否则 prefix=exe 所在目录;两种形态下 CONDA_BIN/CONDA_LIB 均正确推导)
- 效果: 容器内 sys.executable=/usr/local/bin/python → CONDA_BIN=/usr/local/bin;宿主机 test4py311 内 python → CONDA_BIN=env/bin 行为与原硬编码完全一致
- 原 87 处 /home/xzq/miniconda3 硬编码其余 86 处未动 → 记入 §4 交 TL 裁决(超 3 处纪律)
B2: pfam_mapping.json 候选链 + BBA_RAG_MAPPING_FILE
- 文件: cli/run_identify.py 两处
- get_pfam_from_rag(): BBA_RAG_MAPPING_FILE 优先 → 原有两条候补链(parents[2]/parents[1] / data/rag_db/pfam_mapping.json)
- _pfam_alias_to_accession(): BBA_RAG_MAPPING_FILE 优先 → 回退 PROJECT_ROOT/data/rag_db/pfam_mapping.json
3. 宿主冒烟(前置,正式在镜像内复跑)
- 环境: /home/xzq/miniconda3/envs/test4py311/bin/python -B -m cli.run_X --help(test4py311 即 bioflow-gf 镜像包源)
- 18 入口结果: 17 OK / 1 FAIL
- FAIL: run_ortholog —— argparse help 未转义 %(--identity help 字符串含括号百分号)
- 对照: dev 原文件 apps.cli.run_ortholog --help 同样失败(上游 bug,非移植引入)
- 建议修复(一行,改 % 转义),交 TL 裁决后执行
4. 硬编码裁决清单(>3 处,按纪律交 TL)
全树 /home/xzq/miniconda3 硬编码 87 处 / 39 文件。已按要求只适配 run_identify.py 的 CONDA_PREFIX(§2 B1)。 其余 86 处分三类,供 TL 裁决:
A. 有环境变量覆盖的软硬编码(BBA_* 已实现,仅默认值硬编码,容器内运行时如无此工具调用不会触发;不改也不影响金标):
- run_identify.py: BBA_CONDA_SH 默认 /home/xzq/miniconda3/etc/profile.d/conda.sh(interproscan 支线)
- rnaseq_env.py: DEFAULT_CONDA_BASE + PLANTAI_CONDA_BASE 覆盖(整文件)
- project_paths.py: get_conda_base() CONDA_PREFIX/BBAV5_CONDA_BASE 覆盖 + ~/miniconda3 兜底
B. 工具路径候选链(绝对路径第一个 + which 回退,容器内 PATH 有工具即自愈;run_identify 的 hmmsearch/hmmfetch 属此类,金标可过):
- 分布: run_annotation/run_combo/run_domain/run_expression/run_fetch_expression/run_genome_prepare/ run_interspecies_synteny/run_kaks_v2/run_karyotype/run_motif/run_msa_region_plot/run_ortholog/ run_pep/run_phylogeny/run_ppi/run_promoter/run_reference_classification/run_structure/run_synteny/ run_tfbs/run_tree_plot 等 21+ 文件的 CONDA_BIN=.../test4py311/bin(纯 PATH 前缀,bin 缺失即跳过)
C. 无回退的真硬编码(容器内会失效,但多为主机侧编排/诊断路径,容器阶段执行不触发):
- gfa_core/mas/core/orchestrator.py、mas/tools/、extension_stage/、mas/agents/diagnosis.py、pipeline_with_repro.py 等 dev 编排层(内核树保留它们是满足依赖闭包,阶段执行走 -m cli.run_X 不经过)
- scripts/interspecies_tree.R、scripts/pep_v2/*.py 的 Rscript/python 绝对路径
- run_identify.py:2043/2059 hmmsearch/hmmfetch 绝对路径(属 B 类,有 which 回退,归入 B)
建议裁决方向: A/B 类不改(默认值兜底已满足宿主行为一致);C 类若未来需要在容器内跑 dev 编排层再适配。 另外 §2 遗留的 apps.web 引用(from apps.web.pipeline_backend)同属 C 类编排层问题,一并待 TL 裁决。