创建 Flow
用途
根据已经发布的 BioLine 工具版本,把多个工具组织成可复用的有向无环流程(DAG)。单节点(如一次性构建参考基因组索引)也按同一流程处理。Flow JSON 必须提供非空 desc 以及符合解析器 Schema 的必填 method 对象;desc 会写入网页显示的流程描述,未提供时 fkit 可从 method.purpose 兼容回退。
默认只规划在 BioLine Job 中运行的上游固定分析。统计整理、差异分析、绘图和报告等下游工作不作为 Flow 节点推荐或加入 Flow 图;上游 Job 完成后,应从项目 Tool 中动态选择合适的下游分析工具,使用 fkit pull 拉取到 AI 终端,并通过该工具镜像运行。只有用户明确要求将具体下游工作纳入 BioLine Flow 时,才检查对应工具版本、端口和运行条件,并按用户要求规划。不要因为平台上存在某个下游 Tool,就自动把它串进 Flow。
语法与命名约束
fkit flow create [OPTIONS] --file <FILE> <FLOW_NAME>- 名称唯一性与长度上限:
<FLOW_NAME>在项目内必须唯一(同名再次创建会被拒绝),且长度严格不超过 24 个字符。 - 版本迭代限制:
fkit flow仅提供create、list、inspect子命令,不支持对已有同名 Flow 追加版本。当底层工具升级版本(如metaphlan4:1→metaphlan4:2)需要更新流程时,必须拟定新的唯一名称(≤24 字符,例如缩写前缀并附加-v2)重新调用fkit flow create。
AI 调用流程
当用户表达“创建流程”“把这些工具串起来”“制作一条分析流程”等意图时:
- 读取工具清单:读取一次
fkit tool list --json,解析工具名称和版本;用户未指定版本时默认使用最新版。 - 补齐缺失工具:如果用户指定的工具不存在,先读取
fkit create-tool --docs,按创建工具方案核实镜像、命令、参数和输入输出,并创建、配置和读回核对缺失工具。工具创建完成后重新读取工具清单;不得猜测工具版本或跳过工具配置。工具创建和 Flow 发布是两个独立的确认点;若任一工具创建失败,立即停止 Flow 创建,不发布不完整的流程。 - 导出并核查工具配置与运行就绪度(关键防错步):对每个已存在或刚创建的工具执行
fkit tool config export和fkit tool summary export,配置是端口契约的唯一依据。若工具摘要标注“最小运行验证未完成”或涉及大型外部数据库/双端输入,须在组流前重点核查以下三项(如发现缺陷,先走fkit update <TOOL:VER> --mode new-version发布新工具版本):- 端口占位符路径语义:在 BioLine 容器运行时,
file型 I/O 端口占位符(如#{io<:>profile}、#{io<:>cleaned_r1})会被直接渲染为完整文件路径(如/io/profile/profile、/io/cleaned_r1/cleaned_r1.fq.gz),而folder型端口占位符渲染为目录路径(如/io/database/)。因此,file型输出端口在命令中必须直接作为输出文件路径使用(如-o "$4"),严禁写成-o "$4/profile"(会导致多套一层目录);若工具会自动追加扩展名(如.txt),应在命令末尾追加兼容回移逻辑(如&& if [ -f "$4.txt" ]; then mv "$4.txt" "$4"; fi)。 - 双端/多文件 CLI 参数语义核实:切勿猜测命令参数;对未实跑验证的工具,可通过
fkit pull拉取镜像到本地核对--help或源码。以metaphlan4为例,其-1/-2参数仅在同时指定--subsampling_paired时生效,普通调用下会被静默忽略并改为从空stdin读取(触发Error, input data has to be in fastq or fasta format);常规双端 FASTQ 必须合并为逗号分隔的位置参数"$1,$2",且因包含逗号多文件,必须同时指定--no_map或--bowtie2out(否则报错Error! --bowtie2out needs to be specified when multiple FASTQ or FASTA files (comma separated) are provided)。 - 容器内存与外部数据库体积匹配(防 OOM):先用
fkit ls <数据库目录> --json统计外部数据库/索引文件总大小,并核对工具配置的memory上限。例如 MetaPhlAn4 的CHOCOPhlAnSGB(.bt2l)索引合计约 23 GB,若沿用 16 GB 内存上限,运行时会因内存耗尽触发(ERR): bowtie2-align died with signal 9 (KILL)(并级联引发下游格式报错),必须提前将工具版本内存调高至充裕规格(如 64 GB,并按需匹配 CPU 与线程数)。
- 端口占位符路径语义:在 BioLine 容器运行时,
- 核对云端数据库/索引依赖与建库策略:
- 若用户指定了云端
/database/下的参考基因组或数据库,使用fkit ls或fkit file search(只读)确认文件真实存在且格式匹配端口要求。严格区分“原始参考基因组 FASTA(如.fna)”与“索引目录(如bowtie2要求的基名为host_index的.bt2/.bt2l目录)”,切勿将原始 FASTA 目录直接绑定给要求索引的folder端口。 - 若云端仅有原始 FASTA 而无对应索引,优先规划一次性独立建索引 Flow(如单节点
bowtie2-build)+ Job,待索引产物生成后(存入/database/或直接保留在建索引 Job 输出目录)供主流程绑定复用,避免将建索引节点串入主流程导致每次运行重复耗费算力。
- 若用户指定了云端
- 校验端口契约与连接关系:校验端口名称、类型、pattern、参数和连接关系。
file与file_group可互连,folder只能连接folder。未连接的输入和输出自动成为流程对外端口;至少保留一个外部输入和一个外部输出。每个输入端口最多一个来源,输出端口可以扇出。I/O 端口不能写进节点params。- 内部连接与对外端口的取舍:单一输出端口不能既作为内部连线连给下游节点、又同时作为 Flow 对外输出端口暴露。对预计可能供其它下游复用的中间产物(如去宿主后的
unmapped_r1/unmapped_r2),须在计划中向用户说明“内部连给下一节点”与“暴露为对外输出端口”之间的取舍。
- 内部连接与对外端口的取舍:单一输出端口不能既作为内部连线连给下游节点、又同时作为 Flow 对外输出端口暴露。对预计可能供其它下游复用的中间产物(如去宿主后的
- 拓扑与 DAG 校验:按工具语义检查拓扑顺序,确认图是 DAG;不得猜测端口或参数。
- 生成 Flow 图并执行
--dry-run预校验:生成包含非空desc、nodes、connections和必填method的 Flow 图文件,并生成中英双语摘要。在向远端正式创建前,必须先执行fkit flow create --file <FILE> --dry-run <FLOW_NAME>校验 JSON Schema 与图结构。 - 展示计划并等待用户确认:先在聊天中展示简洁的上游 Flow 计划,等待用户确认;如需说明下游工作,将其列为 Job 完成后的独立阶段,而非 Flow 节点。确认后才调用正式
fkit flow create。 - 读回核对:创建成功后必须用
fkit flow inspect <flowVersionId> --json及fkit flow list --json读回核对版本、节点、端口、连接和desc描述。
Flow 文件要求
fkit flow create 解析器对 JSON 结构校验严格,desc、nodes、connections、method 均为必填顶层字段(缺失 method 会报 missing field method):
{
"desc": "宏基因组宿主去除与物种注释流程:fastp 质控清洗双端 reads;bowtie2 比对宿主参考基因组去除宿主序列;metaphlan4 对去宿主 reads 进行物种丰度注释。",
"nodes": [
{"id": "fastp", "tool": "fastp:1", "params": {"threads": 4}},
{"id": "bowtie2", "tool": "bowtie2:1", "params": {"threads": 8}},
{"id": "metaphlan4", "tool": "metaphlan4:4", "params": {"threads": 8}}
],
"connections": [
{"from": "fastp.cleaned_r1", "to": "bowtie2.r1"},
{"from": "fastp.cleaned_r2", "to": "bowtie2.r2"},
{"from": "bowtie2.unmapped_r1", "to": "metaphlan4.r1"},
{"from": "bowtie2.unmapped_r2", "to": "metaphlan4.r2"}
],
"method": {
"purpose": "paired-end quality control, host depletion, and taxonomic profiling",
"ordered_steps": [
{"node": "fastp", "rationale": "Quality control and adapter trimming on raw paired-end reads"},
{"node": "bowtie2", "rationale": "Align cleaned reads against host index and retain unmapped read pairs"},
{"node": "metaphlan4", "rationale": "Taxonomic profiling on host-depleted paired-end reads"}
],
"sources": [
{
"kind": "official",
"title": "BioLine Flow Create Documentation",
"url": "https://www.bioline.cloud/ai/commandLineAndFkit/commands/flow-create/"
}
]
}
}字段校验细则
desc:用户可见的流程描述,应说明流程目的、主要节点和关键输出,不能为空。创建后必须用flow inspect或flow list --json读回并核对描述。nodes:节点id必须唯一,不含.或#;tool引用必须是清单中存在的精确TOOL:正整数;I/O 端口严禁写入params。connections:有向边数组,单节点流程无内部连线时传空数组[]。method:必填对象,用于记录设计依据和顺序校验。注意子字段必须严格遵循以下对象结构(严禁将ordered_steps或sources写成字符串数组):purpose:非空字符串,描述流程设计目的。ordered_steps:对象数组,每个元素必须为{"node": "<节点ID>", "rationale": "<步骤顺序与设计理由>"}。sources:对象数组,每个元素必须为{"kind": "official" | "literature", "title": "<来源标题>", "url": "<来源URL>"}(kind枚举值仅限"official"或"literature")。
工具更新、锁版本与运行排障联动规范
在 Flow 规划或关联 Job 验证过程中,若发现节点工具配置有误或运行失败,按以下规范闭环处理:
- 工具锁版本(
locked=true)与新版本发布:- 工具版本一旦被任何已创建的 Flow 引用,其状态即变为
locked=true(可通过fkit tool info <TOOL:VER> --json核查),平台禁止原地修改(in-place)。 - 修复命令、参数或资源时,必须以原版本为基线,通过
fkit update <TOOL:VER> --mode new-version --config <PATCH_JSON> --json发布新工具版本(如metaphlan4:2→:3→:4),并在创建 Flow 新名称(≤24 字符)中引用该新版本。
- 工具版本一旦被任何已创建的 Flow 引用,其状态即变为
- Job 失败可观测性缺口与日志取证:
- 当 Flow 提交的 Job 失败(
status = -1)时,fkit job get <pipelineId> --json返回的 Job 级与 Task 级errMsg往往为空字符串("")。 - 排障铁律:不得仅凭
fkit job get输出猜测原因;必须执行fkit ls /output/<outputDir>/<nodeName>/ --json定位对应失败节点的日志文件(如<nodeName>.log),再用fkit download下载到本地读取实际执行的 shell 命令、完整报错堆栈以及容器资源统计(最大内存占比、CPU 使用率),区分是命令/参数语法错误还是容器内存不足(OOM signal 9 KILL)。
- 当 Flow 提交的 Job 失败(
用户确认
计划只展示工具、节点顺序、连接、对外输入输出(及内部连接与对外端口的取舍)、参数、资源配置、顺序理由和风险(如数据库/索引是否就绪、工具是否完成最小运行验证)。不要展示命令原文、原始 CLI 输出、内部 workspace 路径或调试过程。用户确认后连续完成 --dry-run 校验、正式创建和 flow inspect 读回核对,不在中间再次确认。
参数与选项
--file <FILE>— 必填;Flow JSON 图文件。--dry-run— 只校验图 Schema 与连接并预览生成结果,不创建远端 Flow。正式创建前推荐先执行一次--dry-run。
影响范围
正式执行会在 BioLine 创建一个新的 Flow(及其初始版本 v1);--dry-run 不写入远端。
输出
成功时返回 Flow 名称、Flow ID 和版本(及 latestFlowVersionId)。创建后必须读取 fkit flow inspect <flowVersionId> --json 进行核对。
读取本页
添加 --docs 可从 BioLine 官方 AI 文档读取本页;--docs-json 返回 JSON 包装。
