Files
PlantAI-rag-new/docs/team/report_bioflow_dev1.md
T

7.9 KiB
Raw Blame History

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 两处
    1. get_pfam_from_rag(): BBA_RAG_MAPPING_FILE 优先 → 原有两条候补链(parents[2]/parents[1] / data/rag_db/pfam_mapping.json)
    2. _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 裁决。