docs(bioflow): A2 任务书追加 FlowStore 对接契约;契约文档计数 59→60(dev 新增 wgs_impute 契约)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-05 17:49:02 +08:00
co-authored by Claude Fable 5
parent adb97f49a8
commit 644ac2fb40
3 changed files with 104 additions and 1 deletions
+6
View File
@@ -44,3 +44,9 @@ B. BFF 两处最小改动:
## 【完成标准】
报告写入后,最终回复明确写「BIOFLOW DEV2 P1 完成」+ 报告路径 + 自测通过数
## 【P6 对接补充(2026-09-05 TL 追加,A4 已交付)】
planner.py 的知识库检索对接 vstore/flow.py 的 FlowStore 本地实例(不是 8094 HTTP API):
- flow_docs 集合:vstore/data/flow_docs/(index.json + chunks/*.json 明文);块字段约定见 docs/team/report_bioflow_dev4.md §5(source 三源 corpus|stage_contract|skill、title_path、heading、stage_name、cite{anchor,line}、keywords 二档检索等)
- 检索方式:FlowStore.search 混合检索(向量+词面双通道);对话咨询引用块携带 cite 字段供前端跳转(跳转渲染由 A3 对接)
- 生产入库:vstore/scripts/ingest_flow_docs.py(幂等可重跑);语料 106 文件/724 块已切好
+1 -1
View File
@@ -9,7 +9,7 @@
A. 语料切块入库(vstore 新增独立集合 flow_docs,不混入既有公文/资料集合):
- 语料源(按优先级):
1) Obsidian《PlantAI_现有分析全流程_基因家族_RNAseq_WGS_GWAS》——TL 已导出副本到仓库 docs/bioflow_corpus/PlantAI_现有分析全流程_基因家族_RNAseq_WGS_GWAS.md(79 章,只读使用;入库脚本以该副本为源,不依赖 Obsidian)
2) dev 的 gfa_core/schemas/stages/*_contract_v1.md(59 份阶段契约,复制源 /home/xzq/5090/teamWorkspace/zh/PlantAI-dev/,只读)
2) dev 的 gfa_core/schemas/stages/*_contract_v1.md(60 份阶段契约,复制源 /home/xzq/5090/teamWorkspace/zh/PlantAI-dev/,只读)
3) 技能说明(dev docs 内分析方法说明,只读)
- 切块策略:按章/节切块,块含标题路径 + 原文 + 源文件标记;入库脚本 vstore/scripts/ingest_flow_docs.py(幂等可重跑)
B. 生信对话内流程咨询:检索 flow_docs 集合 → 答案含引用原文(引用块带源文件与章节定位,UI 可跳转——跳转渲染与 A3 协作,接口约定写入报告)
+97
View File
@@ -0,0 +1,97 @@
# 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 三参用法 <source-root> <output-dir> [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 裁决。