714 lines
35 KiB
Markdown
714 lines
35 KiB
Markdown
# RNA-seq 与多智能体功能框架横向比较报告
|
||||
|
|
|
|||
|
|
生成时间:2026-05-22 15:00:09
|
|||
|
|
本地项目:`/home/xia-lab/wutx/00test/bbav5_0502_Yang_Tihuan.7880`
|
|||
|
|
外部参考:`BioScriptHub/RNAseq_pipeline`,本地读取副本 `/tmp/RNAseq_pipeline_BioScriptHub`,commit `5cde0c3`,提交日期 2026-05-16
|
|||
|
|
外部仓库地址:https://github.com/BioScriptHub/RNAseq_pipeline
|
|||
|
|
|
|||
|
|
## 1. 结论先行
|
|||
|
|
|
|||
|
|
这次通读后,需要纠正一个前提:本项目的 RNA-seq 和多智能体设计并不只是一个线性五步流程。它已经具备:
|
|||
|
|
|
|||
|
|
- 自然语言入口到阶段执行的多智能体链路;
|
|||
|
|
- `PlanningAgentV2` 内置 preflight;
|
|||
|
|
- `/api/execute` 的语义 preflight;
|
|||
|
|
- `DiagnosisAgent` 的 preflight/postflight/failure 门控诊断;
|
|||
|
|
- `stage_capabilities + ArtifactResolver` 的 manifest/上下文驱动输入解析;
|
|||
|
|
- Celery 多队列和 ResourceGovernor 的 CPU 令牌调度;
|
|||
|
|
- RNA-seq 主流程外的 `sample_qc / fgsea / wgcna / candidate_family` 解释层;
|
|||
|
|
- 面向基因家族系统的候选家族/结构域排序能力。
|
|||
|
|
|
|||
|
|
外部 BioScriptHub pipeline 的优势不在“多智能体”或“分析深度”,而在 RNA-seq 命令行流水线的工程收口:一键 `run_all.sh`、显式 `00_preflight_check.sh`、MultiQC、项目级 HTML 报告、featureCounts 属性自动试探、样本并行/单样本线程拆分、HISAT2 到 sorted BAM 的流式落盘、resume 开关。这些是本项目可以吸收的工程做法,但不应该照搬它的命名、目录和报告结构。
|
|||
|
|
|
|||
|
|
## 2. 本项目 RNA-seq 功能框架
|
|||
|
|
|
|||
|
|
### 2.1 阶段总览
|
|||
|
|
|
|||
|
|
| 层级 | 阶段 | 脚本 | 主要作用 | 当前定位 |
|
|||
|
|
|---|---|---|---|---|
|
|||
|
|
| 原始数据处理 | `rnaseq_qc` | `apps/cli/run_rnaseq_qc.py` | FASTQ 输入校验、FastQC、cutadapt、clean FASTQ、QC markdown/manifest | 核心执行层 |
|
|||
|
|
| 比对 | `rnaseq_align` | `apps/cli/run_rnaseq_align.py` | HISAT2 比对、samtools view/sort/index、sorted BAM、比对统计 | 核心执行层 |
|
|||
|
|
| 定量 | `rnaseq_quant` | `apps/cli/run_rnaseq_quant.py` | StringTie、GFF/GFF3 转 GTF、featureCounts、count/FPKM/TPM | 核心执行层 |
|
|||
|
|
| 样本质控 | `rnaseq_sample_qc` | `apps/cli/run_rnaseq_sample_qc.py` | DESeq2 VST、PCA、样本相关性、距离热图、聚类 | 解释/质量层 |
|
|||
|
|
| 差异表达 | `rnaseq_de` | `apps/cli/run_rnaseq_de.py` | DESeq2、比较组、MA/火山图、全基因/家族 foreground | 核心统计层 |
|
|||
|
|
| 富集 | `rnaseq_enrich` / `rnaseq_go_enrich` / `rnaseq_kegg_enrich` | `apps/cli/run_rnaseq_enrich.py` | GO/KEGG 富集、gene2go/gene2ko/OrgDb、植物 KEGG 过滤、pathview | 生物解释层 |
|
|||
|
|
| GSEA | `rnaseq_fgsea` | `apps/cli/run_rnaseq_fgsea.py` | 基于排序统计量的 KEGG fgsea,支持植物通路过滤 | 生物解释层 |
|
|||
|
|
| 共表达 | `rnaseq_wgcna` | `apps/cli/run_rnaseq_wgcna.py` | VST/count 输入、WGCNA 模块、软阈值、模块性状关联 | 高阶解释层 |
|
|||
|
|
| 候选家族 | `rnaseq_candidate_family` | `apps/cli/run_rnaseq_candidate_family.py` | DEG + InterPro/Pfam + GO/KEGG 上下文,排序候选家族/结构域 | 基因家族系统特色层 |
|
|||
|
|
|
|||
|
|
### 2.2 `rnaseq_qc`
|
|||
|
|
|
|||
|
|
当前实现:
|
|||
|
|
|
|||
|
|
- 输入来自 `samples.yaml`,包含样本、R1/R2 路径。
|
|||
|
|
- 执行前检查 R1/R2 是否存在、是否非空、R1/R2 文件大小是否严重不平衡。
|
|||
|
|
- 使用 `FastQC` 对 raw FASTQ 做质控。
|
|||
|
|
- 使用 `cutadapt` 做接头和质量过滤,默认 adapter 为 `AGATCGGAAGAGC`,质量阈值 20,最短长度 50。
|
|||
|
|
- 生成 clean FASTQ、FastQC HTML/zip、cutadapt log、Markdown 报告和 manifest。
|
|||
|
|
- manifest 记录 artifacts、metrics、工具版本、sha256、路径。
|
|||
|
|
|
|||
|
|
当前短板:
|
|||
|
|
|
|||
|
|
- 没有 MultiQC 汇总。
|
|||
|
|
- 没有样本级并行参数,多个样本基本按循环执行。
|
|||
|
|
- 质控工具用 cutadapt,而外部 pipeline 用 fastp;两者都常规,但 fastp 的 JSON/HTML 与 MultiQC 集成更顺。
|
|||
|
|
- 部分 manifest 参数仍有硬编码倾向,例如报告中记录的 CPU 参数不一定完全等于调度后的有效 CPU。
|
|||
|
|
|
|||
|
|
### 2.3 `rnaseq_align`
|
|||
|
|
|
|||
|
|
当前实现:
|
|||
|
|
|
|||
|
|
- 有非常重要的“基因组索引锁定”逻辑:从 prefix 提取物种 token,只接受 `{species}.genome.*.ht2` 或对应 genome FASTA 构建出的 index。
|
|||
|
|
- 避免误用蛋白 HISAT2 index,这是本项目比一般脚本更稳的一点。
|
|||
|
|
- 支持自动查找 clean FASTQ,包括 `final/` 中带 prefix 的 QC 产物。
|
|||
|
|
- HISAT2 输出 SAM,然后 `samtools view` 转 BAM,`samtools sort` 生成 sorted BAM,最后 index。
|
|||
|
|
- final 里已经是 sorted BAM:`{sample}.sorted.bam` 和 `{sample}.sorted.bam.bai`。
|
|||
|
|
- 解析 HISAT2 log 得到 total reads、aligned reads、unaligned reads、alignment rate、unique/multiple alignments。
|
|||
|
|
|
|||
|
|
当前短板:
|
|||
|
|
|
|||
|
|
- 虽然 final 是 sorted BAM,但中间会先落地大 SAM 和 unsorted BAM;外部 pipeline 使用 `hisat2 | samtools sort` 流式直接得到 sorted BAM,磁盘压力更小。
|
|||
|
|
- 当前没有显式暴露 `--rna-strandness`、splice-site 模式、min/max intron length。
|
|||
|
|
- 没有 `samtools flagstat/stats` 作为标准 BAM QC,也没有 MultiQC BAM 汇总。
|
|||
|
|
|
|||
|
|
### 2.4 `rnaseq_quant`
|
|||
|
|
|
|||
|
|
当前实现:
|
|||
|
|
|
|||
|
|
- 输入 sorted BAM 和 GTF/GFF/GFF3。
|
|||
|
|
- 每个 BAM 跑 StringTie,得到 sample-level StringTie GTF 和 coverage。
|
|||
|
|
- 如果输入是 GFF/GFF3,会尝试 `gffread -T` 转 GTF;失败时用 Python fallback 根据 gene/mRNA/exon/CDS 层级补 `gene_id` 和 `transcript_id`。
|
|||
|
|
- featureCounts 当前固定参数为 `-t exon -g gene_id -p -B -C -T cpu`。
|
|||
|
|
- 输出 count matrix、FPKM、TPM、gene length、normalization info、report、manifest。
|
|||
|
|
|
|||
|
|
当前短板:
|
|||
|
|
|
|||
|
|
- 没有 `feature_type` 和 `group_attribute` 的自动探测。
|
|||
|
|
- 没有根据 Assigned 低比例自动换属性重试。
|
|||
|
|
- featureCounts summary 和 assigned ratio 没有作为一等指标进入 manifest。
|
|||
|
|
- 对 NCBI GFF3,固定 `gene_id` 可能不如 `gene / locus_tag / Parent / ID` 自动候选稳。
|
|||
|
|
|
|||
|
|
不会打乱后续分析的关键原则:
|
|||
|
|
|
|||
|
|
- 可以在 quant 阶段内部试探不同 `-t/-g` 组合,但最终只落一个标准 count matrix。
|
|||
|
|
- manifest 记录最终选择的 `feature_type`、`group_attribute`、Assigned 率、候选尝试列表。
|
|||
|
|
- 后续 `rnaseq_de` 只依赖 count matrix 的第一列 gene_id 和样本列,不关心 featureCounts 曾用哪个 attribute。
|
|||
|
|
- 风险在于不同 attribute 会改变 gene_id 命名体系,所以必须把最终 gene_id universe 固化,并在 enrich/candidate 阶段做 ID overlap 检查。
|
|||
|
|
|
|||
|
|
### 2.5 `rnaseq_sample_qc`
|
|||
|
|
|
|||
|
|
当前实现:
|
|||
|
|
|
|||
|
|
- 这是我之前容易看漏的一层。PCA、样本相关性热图、样本距离热图和聚类并不是没有,而是放在独立阶段 `rnaseq_sample_qc`。
|
|||
|
|
- 优先读取 count matrix,也可从配置/YAML 推断样本分组。
|
|||
|
|
- R 端使用 DESeq2 VST,输出 VST matrix、PCA 数据、PCA 方差、PCA 图、sample correlation matrix/heatmap、sample distance matrix/heatmap、sample clustering。
|
|||
|
|
- 生成 manifest、report、commands.sh、environment.txt、R script。
|
|||
|
|
|
|||
|
|
与外部 pipeline 的区别:
|
|||
|
|
|
|||
|
|
- 外部把 VST/PCA/correlation 放在 DESeq2 主脚本里,并由最终 HTML 报告收口。
|
|||
|
|
- 本项目拆成单独阶段,模块边界更清晰,也方便只做样本 QC;但总报告没有把它统一串起来时,用户会觉得“DE 阶段没给 PCA”。
|
|||
|
|
|
|||
|
|
### 2.6 `rnaseq_de`
|
|||
|
|
|
|||
|
|
当前实现:
|
|||
|
|
|
|||
|
|
- 输入 count matrix 和 group/sample YAML。
|
|||
|
|
- 支持从 `groups` 或 sample metadata 中读取分组,按 count matrix 列顺序对齐。
|
|||
|
|
- 有 replicate policy,默认允许单重复但记录 replicate violations。
|
|||
|
|
- 支持 pairwise comparisons,也有 time LRT / spline LRT 的计划能力。
|
|||
|
|
- 输出每个比较的 DE_results、DE_genes、MA plot、volcano plot。
|
|||
|
|
- 支持 family foreground:如果提供 `final_members.id`,可输出 family-specific DE 结果。
|
|||
|
|
- all-zero count matrix 等边界条件会写空表和 `NO_EXPRESSION_SIGNAL.txt`,避免直接崩掉。
|
|||
|
|
- manifest 记录 comparison stats、family analysis、replicate counts、replicate violations、de_plan。
|
|||
|
|
|
|||
|
|
当前短板:
|
|||
|
|
|
|||
|
|
- 候选基因排序还没有成为 DE 阶段标准 artifact。
|
|||
|
|
- UpSet、top candidate gene ranking、标准化 count/VST 目前没有作为 `rnaseq_de` 的固定输出集合;其中 VST/PCA 在 `rnaseq_sample_qc`,FPKM/TPM 在 `rnaseq_quant`。
|
|||
|
|
- 多比较之间的“同一基因跨比较证据”还没有固化成候选排序。
|
|||
|
|
|
|||
|
|
### 2.7 `rnaseq_enrich`
|
|||
|
|
|
|||
|
|
当前实现:
|
|||
|
|
|
|||
|
|
- 支持 GO、KEGG 或 both。
|
|||
|
|
- 背景可以来自上传的 `gene2go/gene2ko`,也支持部分 OrgDb 物种。
|
|||
|
|
- KEGG 支持 KO 到 pathway 映射、KEGG REST cache、植物兼容过滤、pathview 图。
|
|||
|
|
- 有 foreground/background ID mismatch 的强检查,重叠为 0 时会明确失败并给示例。
|
|||
|
|
- 支持 global 和 family foreground。
|
|||
|
|
- manifest 记录 DE gene 输入、GO terms、KEGG pathways、背景基因数、overlap、raw/filtered KEGG 等。
|
|||
|
|
|
|||
|
|
本项目优势:
|
|||
|
|
|
|||
|
|
- 对植物和非模式物种更友好。
|
|||
|
|
- 不强行套人类 OrgDb/MSigDB。
|
|||
|
|
- 与 annotation 阶段、候选家族阶段能衔接。
|
|||
|
|
|
|||
|
|
### 2.8 `rnaseq_fgsea`
|
|||
|
|
|
|||
|
|
当前实现定位:
|
|||
|
|
|
|||
|
|
- 用全量 DESeq2 排序结果做 fgsea,而不是只对显著 DEG 做 over-representation。
|
|||
|
|
- pathway 集合来自 `gene2ko` 和 KEGG KO/species cache。
|
|||
|
|
- 支持按物种名推断 KEGG organism,例如 Arabidopsis、rice、maize、soybean、tomato、wheat 等。
|
|||
|
|
- 默认过滤明显动物/人类疾病通路,更适合植物数据。
|
|||
|
|
|
|||
|
|
### 2.9 `rnaseq_wgcna`
|
|||
|
|
|
|||
|
|
当前实现:
|
|||
|
|
|
|||
|
|
- 可直接复用 `rnaseq_sample_qc` 的 VST matrix。
|
|||
|
|
- 如果没有 VST,也可从 count matrix 构建 DESeq2 VST。
|
|||
|
|
- 支持 `min_mean`、`max_genes`、`min_module_size`、`merge_cut_height`、`powers`。
|
|||
|
|
- 做 goodSamplesGenes、样本聚类、pickSoftThreshold、模块识别、模块 eigengene、模块-性状关联等 WGCNA 常规流程。
|
|||
|
|
- 通过 `pipeline_backend.py` 自动寻找 VST/count matrix、sample_table 或 samples.yaml。
|
|||
|
|
|
|||
|
|
定位:
|
|||
|
|
|
|||
|
|
- 外部 BioScriptHub pipeline 没有 WGCNA。
|
|||
|
|
- 这是本项目 RNA-seq 解释层的扩展优势,尤其适合“候选基因家族”和“调控模块”问题。
|
|||
|
|
|
|||
|
|
### 2.10 `rnaseq_candidate_family`
|
|||
|
|
|
|||
|
|
当前实现:
|
|||
|
|
|
|||
|
|
- 这不是普通 DE gene ranking,而是候选家族/结构域排序。
|
|||
|
|
- 输入 global DE genes、全蛋白 FASTA、可选 InterProScan TSV、GO/KEGG 富集上下文。
|
|||
|
|
- 支持 TF 家族规则:SPL/SBP、MYB、WRKY、bHLH、bZIP、NAC、AP2/ERF、MADS、TCP、GRAS、C2H2、Homeobox、GATA、HSF、ARF。
|
|||
|
|
- 支持常见功能结构域:kinase/RLK、LRR、NBS-LRR、F-box、ubiquitin、P450、PPR、ABC transporter、transporter、AAA ATPase 等。
|
|||
|
|
- 若有已有 InterProScan,优先复用;否则可按 `auto/always/never` 决定是否运行。
|
|||
|
|
- 输出 candidate family ranking、gene annotations、enrichment context、report、manifest。
|
|||
|
|
|
|||
|
|
本项目优势:
|
|||
|
|
|
|||
|
|
- 与“基因家族分析系统”定位高度一致。
|
|||
|
|
- 外部 pipeline 只做 candidate genes;本项目可以进一步回答“下一步应该跑哪个家族 identify/phylogeny/motif/domain/expression”。
|
|||
|
|
|
|||
|
|
建议补齐:
|
|||
|
|
|
|||
|
|
- 在 `rnaseq_de` 增加 gene-level candidate ranking。
|
|||
|
|
- 在 `rnaseq_candidate_family` 保持 family/domain-level ranking。
|
|||
|
|
- 总报告里并列放 `Top Candidate Genes` 和 `Top Candidate Families/Domains`。
|
|||
|
|
|
|||
|
|
## 3. 本项目多智能体功能框架
|
|||
|
|
|
|||
|
|
### 3.1 总体链路
|
|||
|
|
|
|||
|
|
本项目不是简单“用户点按钮跑脚本”。实际执行链路大致是:
|
|||
|
|
|
|||
|
|
1. 前端/API 接收自然语言或阶段执行请求。
|
|||
|
|
2. Router 判断 FAQ、咨询、分析、解读、可行性、报告增强等模式。
|
|||
|
|
3. IntentAgentV2 解析目标阶段、物种、家族、job、prefix、参数。
|
|||
|
|
4. PlanningAgentV2 做 preflight、补依赖、生成阶段计划、应用学习参数。
|
|||
|
|
5. `/api/execute` 对明确阶段执行再做语义 preflight 和 artifact resolve。
|
|||
|
|
6. Celery 将任务分配到 default/heavy/medium/light/rnaseq 队列。
|
|||
|
|
7. ResourceGovernor 根据 CPU token 和最大并发数发放资源租约。
|
|||
|
|
8. StageToolRegistry 调用 `pipeline_backend.run_stage()`。
|
|||
|
|
9. 每个 stage 执行对应 `apps/cli/run_*.py`,产出 final artifacts 和 manifest。
|
|||
|
|
10. DiagnosisAgent 在 preflight/postflight/failure 三个门控点做审计和部分自动修复。
|
|||
|
|
11. ResultParser/Discovery/Knowledge 负责结果解读、发现建议和报告增强。
|
|||
|
|
|
|||
|
|
### 3.2 LangGraph 编排器
|
|||
|
|
|
|||
|
|
核心文件:`gfa_core/mas/core/langgraph_orchestrator.py`
|
|||
|
|
|
|||
|
|
已定义节点:
|
|||
|
|
|
|||
|
|
- `router`
|
|||
|
|
- `intent`
|
|||
|
|
- `knowledge`
|
|||
|
|
- `learning_recommend`
|
|||
|
|
- `planning`
|
|||
|
|
- `preflight`
|
|||
|
|
- `execution`
|
|||
|
|
- `validator`
|
|||
|
|
- `diagnosis`
|
|||
|
|
- `result_parser`
|
|||
|
|
- `discovery`
|
|||
|
|
- `learning`
|
|||
|
|
|
|||
|
|
主要流程:
|
|||
|
|
|
|||
|
|
- FAQ/咨询/解读/可行性/报告增强:走 Knowledge。
|
|||
|
|
- 分析任务:Router -> Intent -> Learning recommend -> Planning -> Preflight -> Execution。
|
|||
|
|
- 执行失败:Execution -> Diagnosis -> 可 retry/等待确认/skip/fail。
|
|||
|
|
- 结果解析后:ResultParser -> Validator -> Discovery -> Learning 或 Replan。
|
|||
|
|
- Discovery 可触发重新规划,最多有限次数。
|
|||
|
|
|
|||
|
|
注意:
|
|||
|
|
|
|||
|
|
- 代码注释说“9-Agent”,实际初始化后是合并后的 7 个核心 agent,并在图里拆出多个节点。
|
|||
|
|
- PlanningAgentV2 注释明确写了“已合并 PreFlight”,所以你的“多智能体有 preflight”这个判断是对的。
|
|||
|
|
|
|||
|
|
### 3.3 Router 与自然语言触发
|
|||
|
|
|
|||
|
|
核心文件:`gfa_core/mas/agents/router.py`
|
|||
|
|
|
|||
|
|
Router 使用规则 + LLM fallback:
|
|||
|
|
|
|||
|
|
- 执行动词包括“帮我、执行、运行、开始、启动”等。
|
|||
|
|
- 分析关键词包括“分析、鉴定、构建、计算、生成、提取、下载、ncbi”等。
|
|||
|
|
- 问询动词优先归为 FAQ,避免“有没有”触发执行。
|
|||
|
|
- 低置信度时调用 LLM 分类。
|
|||
|
|
|
|||
|
|
因此,“通过自然语言执行 RNA-seq 全流程”在架构上是可以触发的;关键取决于 IntentAgent 和 PlanningAgent 是否把“执行 rnaseq 分析”展开成 `rnaseq_qc -> rnaseq_align -> rnaseq_quant -> rnaseq_sample_qc -> rnaseq_de -> enrich/fgsea/candidate` 这种计划,以及前端是否要求用户确认必要参数。
|
|||
|
|
|
|||
|
|
### 3.4 PlanningAgentV2 的 preflight
|
|||
|
|
|
|||
|
|
核心文件:`gfa_core/mas/agents/planning_v2.py`
|
|||
|
|
|
|||
|
|
它做的 preflight 包括:
|
|||
|
|
|
|||
|
|
- 根据 intent stages 调用 `complete_dependencies()` 补齐依赖。
|
|||
|
|
- 检查 stage 是否已接入执行器。
|
|||
|
|
- 检查已有 manifest;成功或 partial_success 的阶段会标记可跳过。
|
|||
|
|
- 检查依赖阶段状态。
|
|||
|
|
- 检查输入文件。
|
|||
|
|
- 优先使用 `ProjectContextIndex + ArtifactResolver + stage_capabilities` 做语义输入解析。
|
|||
|
|
- 无上下文时回退到旧版 glob 文件检查。
|
|||
|
|
- 检查资源。
|
|||
|
|
|
|||
|
|
和“scoped”的关系:
|
|||
|
|
|
|||
|
|
- preflight 是执行前检查:确认输入、依赖、阶段状态、资源、是否需要用户确认。
|
|||
|
|
- scoped 是分析边界/物种/成员集上下文:例如 target species、reference species、member_set_id、scope_file。
|
|||
|
|
- scoped 不是 preflight 的替代品,它提供 preflight 和执行阶段需要理解的上下文。
|
|||
|
|
- 你的系统里二者是叠加关系:preflight 会读取 scope/context 来避免多物种任务中误选一个物种。
|
|||
|
|
|
|||
|
|
### 3.5 `/api/execute` 的语义 preflight
|
|||
|
|
|
|||
|
|
核心文件:`apps/web/vue3/main.py`
|
|||
|
|
|
|||
|
|
关键逻辑:
|
|||
|
|
|
|||
|
|
- 构建 `ProjectContextIndex`。
|
|||
|
|
- 用 `ArtifactResolver` 解析 stage capability 的 required inputs。
|
|||
|
|
- 如果缺 artifact,会返回 `preflight_failed`,附带 suggested upstream stages。
|
|||
|
|
- 如果存在多目标物种 identify 这类歧义,会返回 `needs_confirmation`。
|
|||
|
|
- 通过后把 `semanticPreflight` 和 `resolvedArtifacts` 写入任务参数,交给 Celery。
|
|||
|
|
|
|||
|
|
这和 PlanningAgentV2 的 preflight 有重叠,但入口不同:
|
|||
|
|
|
|||
|
|
- PlanningAgentV2 更偏“自然语言规划前的全流程检查”。
|
|||
|
|
- `/api/execute` 更偏“用户已经选择某个 stage 后的执行门控”。
|
|||
|
|
- Celery 里还会再跑 DiagnosisAgent 的 preflight gate,这是执行前最后一道保险。
|
|||
|
|
|
|||
|
|
### 3.6 DiagnosisAgent 的三段门控
|
|||
|
|
|
|||
|
|
核心文件:`gfa_core/mas/agents/diagnosis.py`
|
|||
|
|
|
|||
|
|
覆盖 RNA-seq 阶段:
|
|||
|
|
|
|||
|
|
- `rnaseq_qc`:samples.yaml、fastq pairs、clean fastq、qc metrics。
|
|||
|
|
- `rnaseq_align`:clean fastq、genome index、BAM 非空、alignment rate。
|
|||
|
|
- `rnaseq_quant`:BAM、GTF/GFF、featureCounts、count matrix、FPKM/TPM。
|
|||
|
|
- `rnaseq_de`:count matrix、samples.yaml、comparisons、DE results、significant gene counts。
|
|||
|
|
- `rnaseq_sample_qc`:count/VST matrix、sample table、PCA、correlation。
|
|||
|
|
- `rnaseq_go_enrich` / `rnaseq_kegg_enrich` / `rnaseq_enrich`:DE results、背景注释、ID overlap。
|
|||
|
|
- `rnaseq_fgsea`:DE ranks、gene2ko、rank-background overlap。
|
|||
|
|
- `rnaseq_wgcna`:expression/count matrix、sample table、module count、soft threshold。
|
|||
|
|
- `rnaseq_candidate_family`:DE results、annotation sources、candidate family ranking。
|
|||
|
|
|
|||
|
|
自动修复与策略:
|
|||
|
|
|
|||
|
|
- 有错误模式匹配,如 missing input、memory、dependency failed、tool not found、参数格式等。
|
|||
|
|
- 有 runtime repair codes,例如 manifest recovery、protein stop marker clean、Pfam fallback、GFF overlap report。
|
|||
|
|
- 对 RNA-seq 也有特定审计函数,例如 `_audit_rnaseq_quant`、`_audit_rnaseq_fgsea`、`_audit_rnaseq_wgcna`。
|
|||
|
|
|
|||
|
|
### 3.7 Stage capabilities 与 ArtifactResolver
|
|||
|
|
|
|||
|
|
核心文件:
|
|||
|
|
|
|||
|
|
- `gfa_core/mas/stage_capabilities.py`
|
|||
|
|
- `gfa_core/mas/artifact_resolver.py`
|
|||
|
|
|
|||
|
|
设计意义:
|
|||
|
|
|
|||
|
|
- 用机器可读方式描述每个 stage 消耗什么 artifact、产出什么 artifact、有哪些 preflight/postflight/repair。
|
|||
|
|
- ArtifactResolver 从 manifest、final 文件、input 文件、canonical 路径中找候选输入。
|
|||
|
|
- 每个候选有 kind、source、role、species、family、score、reason。
|
|||
|
|
- 解析结果不只是“找到了文件”,还会保留候选和决策轨迹,方便 UI 解释。
|
|||
|
|
|
|||
|
|
这是本项目比外部 pipeline 更复杂也更强的地方。外部 pipeline 是固定目录固定脚本;本项目要在自然语言、多物种、多阶段、历史 manifest、scope 上下文之间解析正确输入。
|
|||
|
|
|
|||
|
|
### 3.8 Celery 队列和资源调度
|
|||
|
|
|
|||
|
|
核心文件:
|
|||
|
|
|
|||
|
|
- `gfa_core/mas/stage_catalog.py`
|
|||
|
|
- `tasks.py`
|
|||
|
|
- `celery_app.py`
|
|||
|
|
- `start_celery_7880.sh`
|
|||
|
|
- `gfa_core/mas/resource_governor.py`
|
|||
|
|
|
|||
|
|
当前设计:
|
|||
|
|
|
|||
|
|
- 队列:`default`、`heavy`、`medium`、`light`、`rnaseq`。
|
|||
|
|
- RNA-seq 阶段统一进入 `rnaseq` 队列。
|
|||
|
|
- RNA-seq 默认 CPU:
|
|||
|
|
- `rnaseq_qc`:default 8,max 10。
|
|||
|
|
- `rnaseq_align`:default 8,max 10。
|
|||
|
|
- `rnaseq_quant`:default 6,max 8。
|
|||
|
|
- `rnaseq_sample_qc/de/wgcna/enrich/fgsea/candidate_family`:default 4,max 4。
|
|||
|
|
- `start_celery_7880.sh` 默认启动 `rnaseq` worker 并发 2。
|
|||
|
|
- ResourceGovernor 默认总 CPU token 20,最大 running tasks 11。
|
|||
|
|
- 任务执行前调用 `ResourceLease.wait()`,资源不足则进入 `WAITING_RESOURCE` 状态。
|
|||
|
|
|
|||
|
|
当前短板:
|
|||
|
|
|
|||
|
|
- 已有并行执行和 CPU 限流,但还不是按机器性能自动推导。
|
|||
|
|
- 资源模型主要是 CPU token 和最大任务数,没有显式 RAM token、磁盘 IO token、单样本线程 vs 样本并行的拆分策略。
|
|||
|
|
- 外部 pipeline 的 `ALIGN_PARALLEL_JOBS + HISAT2_THREADS_PER_SAMPLE` 这种二维线程模型值得吸收。
|
|||
|
|
|
|||
|
|
## 4. 与 BioScriptHub/RNAseq_pipeline 横向比较
|
|||
|
|
|
|||
|
|
### 4.1 总体定位
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | BioScriptHub/RNAseq_pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| 项目定位 | 多智能体基因家族分析系统,RNA-seq 是其中一条证据链 | 独立 RNA-seq 命令行流水线 | 本项目更大、更复杂;外部更聚焦 |
|
|||
|
|
| 使用入口 | 自然语言、前端 API、单 stage 执行、Celery | `run_all.sh` 和一组 shell/R 脚本 | 外部一键体验更清晰 |
|
|||
|
|
| 执行范式 | Agent 规划 + stage registry + manifest + diagnosis | 固定顺序 shell pipeline | 本项目灵活,外部稳定直观 |
|
|||
|
|
| 结果定位 | 面向基因家族研究和候选家族发现 | 面向标准 RNA-seq 报告 | 两者目标不同 |
|
|||
|
|
|
|||
|
|
### 4.2 输入与配置
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 可借鉴点 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| 样本输入 | `samples.yaml`,可手写,也可由自然语言/前端生成后确认 | `metadata.tsv`,也可从 FASTQ 名称自动生成 | 本项目不差;需要更低门槛的表格编辑 UI |
|
|||
|
|
| 对比输入 | YAML 内 groups/comparisons 或自动 pairwise | `contrasts.csv/tsv` | 可以在 UI 中提供“比较组表格”,生成 YAML |
|
|||
|
|
| 用户填写成本 | YAML 对机器友好,对普通用户不如表格直观 | TSV/CSV 对生信用户直观 | 本项目适合做弹窗表格 -> YAML/JSON 的转换 |
|
|||
|
|
| 自动推断 | 依赖 Intent/Planning/ArtifactResolver | 从 FASTQ 命名推断 sample/condition | 外部的 FASTQ 命名推断可作为一个辅助导入器 |
|
|||
|
|
|
|||
|
|
结论:你的 YAML 设计不是差,而是“适合系统内部和高级用户”。为了开源,应增加普通用户层:上传 FASTQ 后自动生成样本表,用户在弹窗表格里确认,后端再转成完整 YAML。
|
|||
|
|
|
|||
|
|
### 4.3 Preflight
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| 是否有 preflight | 有,而且不止一层 | 有 `00_preflight_check.sh` | 本项目不是缺 preflight |
|
|||
|
|
| 形式 | Agent 内部结构化结果/API 返回/Diagnosis gate | 独立脚本,输出 TSV handoff plan | 外部更显式、更容易开源用户理解 |
|
|||
|
|
| 检查内容 | stage 状态、manifest、依赖、输入解析、scope、资源、诊断 | config、metadata、contrasts、FASTQ、replicate、工具、reference | 两者侧重点不同 |
|
|||
|
|
| 产物 | API JSON、task meta、diagnosis report、manifest 依赖 | `logs/preflight_check.tsv`、`logs/pipeline_handoff_plan.tsv` | 本项目应补一个正式 `rnaseq_preflight` artifact/report |
|
|||
|
|
|
|||
|
|
建议:不是新增一个替代 scoped 的东西,而是把已有 preflight 固化成用户可见 artifact,例如:
|
|||
|
|
|
|||
|
|
- `{prefix}.rnaseq_preflight.manifest.json`
|
|||
|
|
- `{prefix}.rnaseq_preflight_report.md`
|
|||
|
|
- `{prefix}.rnaseq_preflight.inputs.tsv`
|
|||
|
|
- `{prefix}.rnaseq_preflight.plan.tsv`
|
|||
|
|
|
|||
|
|
### 4.4 QC
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| 原始质控 | FastQC | FastQC + MultiQC | 本项目缺 MultiQC 汇总 |
|
|||
|
|
| 过滤工具 | cutadapt | fastp | 两者都常规,fastp 报告集成更方便 |
|
|||
|
|
| 输出 | clean FASTQ、FastQC、cutadapt log、MD report、manifest | clean FASTQ、fastp report、FastQC、MultiQC | 可增加 MultiQC,不必改掉 cutadapt |
|
|||
|
|
| 并行 | 当前阶段内不突出样本并行 | 样本并行 + 单样本线程 | 外部并行拆分更直接 |
|
|||
|
|
|
|||
|
|
### 4.5 比对
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| index 选择 | 有物种锁定,防误用蛋白 index | config 指定/准备 reference | 本项目更安全 |
|
|||
|
|
| 中间文件 | SAM -> BAM -> sorted BAM | HISAT2 pipe 到 samtools sort | 外部更省磁盘 |
|
|||
|
|
| final BAM | sorted BAM | sorted BAM | 二者最终一致 |
|
|||
|
|
| strandness/splice | 当前不显式暴露 | config 中有 HISAT2 RNA strandness、splice mode、intron length | 外部参数更完整 |
|
|||
|
|
| BAM QC | 解析 HISAT2 log | samtools flagstat/stats + MultiQC | 本项目可补 |
|
|||
|
|
|
|||
|
|
### 4.6 定量
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| 定量工具 | StringTie + featureCounts | featureCounts | 本项目输出更丰富 |
|
|||
|
|
| GFF3 处理 | gffread + Python fallback 转 GTF | featureCounts attribute auto | 本项目对格式转换更主动;外部对属性选择更稳 |
|
|||
|
|
| feature type | 固定 exon | `FEATURE_TYPE` 可设,支持 auto 思路 | 本项目应显式化 |
|
|||
|
|
| group attribute | 固定 gene_id | `GROUP_ATTRIBUTE=auto` 尝试 gene_id/gene/locus_tag/Parent/ID | 外部对 NCBI GFF3 更鲁棒 |
|
|||
|
|
| downstream 稳定性 | count matrix 标准化输出 | count matrix 标准化输出 | 只要最终 gene_id 固定,auto 不会破坏后续 |
|
|||
|
|
|
|||
|
|
### 4.7 样本 QC 与 DE
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| PCA | 有,在 `rnaseq_sample_qc` | 有,在 DESeq2 脚本/报告中 | 本项目不是没有,而是拆分阶段 |
|
|||
|
|
| 样本相关性 | 有 | 有 | 二者都有 |
|
|||
|
|
| VST matrix | 有,在 sample_qc | 有,在 DESeq2 输出 | 本项目应在总报告中串起来 |
|
|||
|
|
| replicate policy | 支持记录 violations,可放宽 | 外部要求条件至少 2 重复 | 外部更严格;本项目更宽容但要报告风险 |
|
|||
|
|
| DE 输出 | per comparison DE_results/DE_genes/MA/volcano,支持 family foreground | all/sig/up/down、MA/volcano、summary | 外部标准化报告更整齐 |
|
|||
|
|
| UpSet | 当前未固化为标准 artifact | 有 | 可借鉴 |
|
|||
|
|
| candidate gene ranking | 当前未固化 | 有基础 score | 可借鉴但扩展 |
|
|||
|
|
|
|||
|
|
### 4.8 富集、fgsea、WGCNA、候选
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| GO/KEGG ORA | 强,支持 gene2go/gene2ko/OrgDb/植物 KEGG/pathview | 有基础 enrichment | 本项目更适合非模式植物 |
|
|||
|
|
| fgsea | 有 | 无 | 本项目优势 |
|
|||
|
|
| WGCNA | 有 | 无 | 本项目优势 |
|
|||
|
|
| candidate genes | 尚未作为 DE 标准产物 | 有 `candidate_genes` | 外部值得吸收 |
|
|||
|
|
| candidate family/domain | 有 `rnaseq_candidate_family` | 无 | 本项目特色 |
|
|||
|
|
|
|||
|
|
### 4.9 报告
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| stage 报告 | 每阶段 Markdown + manifest | 各脚本输出 + HTML 总报告 | 本项目可追溯性强 |
|
|||
|
|
| MultiQC | 暂无标准集成 | 有 `03_multiqc` | 本项目应补 |
|
|||
|
|
| 项目级 HTML | 目前缺 RNA-seq 总报告收口 | `14_report/RNAseq_analysis_report.html` | 外部值得借鉴,但不要照搬结构和命名 |
|
|||
|
|
| 报告目标 | 支持后续解读,但分散 | 一眼看完整 RNA-seq | 本项目需要项目级 report assembler |
|
|||
|
|
|
|||
|
|
建议本项目报告命名:
|
|||
|
|
|
|||
|
|
- `{prefix}.rnaseq_project_report.html`
|
|||
|
|
- `{prefix}.rnaseq_project_report.md`
|
|||
|
|
- `{prefix}.rnaseq_project_report.manifest.json`
|
|||
|
|
- `{prefix}.rnaseq_multiqc_raw.html`
|
|||
|
|
- `{prefix}.rnaseq_multiqc_clean.html`
|
|||
|
|
- `{prefix}.rnaseq_multiqc_bam.html`
|
|||
|
|
|
|||
|
|
不要使用外部的 `14_report/RNAseq_analysis_report.html` 目录和命名。
|
|||
|
|
|
|||
|
|
### 4.10 Resume/断点续跑
|
|||
|
|
|
|||
|
|
| 维度 | 本项目 | 外部 pipeline | 判断 |
|
|||
|
|
|---|---|---|---|
|
|||
|
|
| 规划层跳过 | PlanningAgentV2 检查 manifest,已完成阶段可跳过 | `RESUME_MODE` 下脚本跳过已有输出 | 本项目已有高层断点逻辑 |
|
|||
|
|
| 执行层跳过 | 部分阶段会找已有 final/manifest,但并非统一 resume API | 每个 shell 脚本有 resume skip | 外部 stage 内 resume 更直接 |
|
|||
|
|
| 诊断 | DiagnosisAgent 可判断 manifest 缺失/失败/partial | preflight/check logs | 本项目诊断更强 |
|
|||
|
|
| 建议 | 固化统一 `--resume/--force/--from-stage` 语义 | 已有 | 本项目需要统一口径 |
|
|||
|
|
|
|||
|
|
断点续跑不是外部 pipeline 的“稀奇点”;你的规划智能体确实已经承担了高层断点。但开源用户也需要命令行可理解的低层 resume 语义。建议两层都保留:
|
|||
|
|
|
|||
|
|
- 高层:Agent 根据 manifest 和依赖自动跳过。
|
|||
|
|
- 低层:每个 `run_rnaseq_*.py` 接受 `--resume/--force`,判断关键输出是否完整。
|
|||
|
|
|
|||
|
|
## 5. 关于用户前面关心的具体问题归纳
|
|||
|
|
|
|||
|
|
### 5.1 “RNA-seq 总控入口”
|
|||
|
|
|
|||
|
|
架构上已经能通过自然语言触发完整流程,但需要确认两点:
|
|||
|
|
|
|||
|
|
- IntentAgent 是否把“执行 RNA-seq 分析”稳定识别为完整 RNA-seq pipeline,而不是单个 `rnaseq_qc`。
|
|||
|
|
- PlanningAgent 是否根据已有输入和用户目标自动补 `rnaseq_qc -> align -> quant -> sample_qc -> de -> enrich/fgsea/candidate`。
|
|||
|
|
|
|||
|
|
建议增加一个显式虚拟 stage:`rnaseq_pipeline`。它不直接执行脚本,只展开计划,并生成总 manifest/report。这样既保留自然语言入口,也给开源用户一个明确入口。
|
|||
|
|
|
|||
|
|
### 5.2 “preflight 和 scoped 的区别”
|
|||
|
|
|
|||
|
|
- preflight:执行前检查,回答“能不能跑、缺什么、会不会误选、是否需要确认”。
|
|||
|
|
- scoped:分析范围,回答“跑哪几个物种、哪个家族、哪个成员集、target/reference/comparative 怎么定义”。
|
|||
|
|
- scoped 不是替代 preflight;它是 preflight 判断输入和歧义时的重要上下文。
|
|||
|
|
|
|||
|
|
### 5.3 “降低用户填表成本”
|
|||
|
|
|
|||
|
|
当前 YAML 的优势:
|
|||
|
|
|
|||
|
|
- 结构清晰,适合系统内部传参。
|
|||
|
|
- 可手写,适合高级用户。
|
|||
|
|
- 可表达复杂字段,如 group、condition、comparison、batch、time、replicate policy。
|
|||
|
|
|
|||
|
|
当前 YAML 的复杂点:
|
|||
|
|
|
|||
|
|
- 普通用户不直观看出样本表缺了哪列。
|
|||
|
|
- 文件路径、样本名、condition、comparison 混在一个嵌套结构里。
|
|||
|
|
- 出错时用户需要理解 YAML 缩进和 schema。
|
|||
|
|
|
|||
|
|
建议 UI:
|
|||
|
|
|
|||
|
|
- FASTQ 上传后自动识别 R1/R2。
|
|||
|
|
- 弹窗表格列:sample_id、condition、replicate、fastq_1、fastq_2、batch、time。
|
|||
|
|
- 对比组表格列:comparison、numerator、denominator。
|
|||
|
|
- 用户确认后保存两份:
|
|||
|
|
- 人可读:`samples.user.tsv`、`contrasts.user.tsv`
|
|||
|
|
- 系统读:`samples.yaml`
|
|||
|
|
|
|||
|
|
这样不是否定 YAML,而是把 YAML 作为编译产物。
|
|||
|
|
|
|||
|
|
### 5.4 “MultiQC 和项目级 HTML 总报告”
|
|||
|
|
|
|||
|
|
应该做。目标不是复制外部仓库,而是符合常规 RNA-seq 习惯:
|
|||
|
|
|
|||
|
|
- MultiQC 汇总 raw/clean FastQC、cutadapt/fastp、HISAT2、samtools、featureCounts。
|
|||
|
|
- 项目级 HTML 汇总:
|
|||
|
|
- 项目与样本信息;
|
|||
|
|
- 运行参数和环境;
|
|||
|
|
- QC 概览;
|
|||
|
|
- 比对率和 BAM QC;
|
|||
|
|
- featureCounts assigned 率;
|
|||
|
|
- PCA/样本相关性;
|
|||
|
|
- DE summary;
|
|||
|
|
- enrichment/fgsea;
|
|||
|
|
- WGCNA;
|
|||
|
|
- Top Candidate Genes;
|
|||
|
|
- Top Candidate Families/Domains;
|
|||
|
|
- artifacts index。
|
|||
|
|
|
|||
|
|
建议实现为本项目自己的 `run_rnaseq_report.py`,读取各阶段 manifest 和 final artifacts,而不是按外部目录硬编码。
|
|||
|
|
|
|||
|
|
### 5.5 “样本并行数 + 单样本线程数”
|
|||
|
|
|
|||
|
|
本项目已有 Celery 队列和 ResourceGovernor,并不是没有并行。但它解决的是“多个任务/阶段之间如何并发”,外部 pipeline 的参数解决的是“一个 RNA-seq stage 内多个样本如何并发、每个样本分配几个线程”。
|
|||
|
|
|
|||
|
|
建议补一个资源策略函数:
|
|||
|
|
|
|||
|
|
- 读取 `lscpu`、内存、磁盘空间。
|
|||
|
|
- 估算 total threads。
|
|||
|
|
- 按 stage 类型分配:
|
|||
|
|
- QC:多样本并行高,单样本线程低。
|
|||
|
|
- align:样本并行中等,单样本 HISAT2 线程中等。
|
|||
|
|
- sort:考虑 samtools sort 内存。
|
|||
|
|
- quant:featureCounts 通常一个全局线程参数。
|
|||
|
|
- R 阶段:CPU 不宜太高,内存更关键。
|
|||
|
|
- 输出到 manifest:`requested_cpu`、`effective_cpu`、`sample_parallel_jobs`、`threads_per_sample`、`memory_policy`。
|
|||
|
|
|
|||
|
|
### 5.6 “featureCounts auto 会不会打乱后续分析”
|
|||
|
|
|
|||
|
|
不会必然打乱,但必须做成“试探阶段内部逻辑”,不能让后续看到多个版本的 count matrix。
|
|||
|
|
|
|||
|
|
安全实现:
|
|||
|
|
|
|||
|
|
1. 默认先试 `-t exon -g gene_id`。
|
|||
|
|
2. 如果 featureCounts 失败或 Assigned 率低于阈值,再尝试候选:
|
|||
|
|
- feature type:`exon/CDS/gene`
|
|||
|
|
- group attribute:`gene_id/gene/locus_tag/Parent/ID`
|
|||
|
|
3. 选择 Assigned 率最高且 gene 数合理的组合作为正式输出。
|
|||
|
|
4. 只生成一个标准 `{prefix}.count_matrix.txt`。
|
|||
|
|
5. manifest 记录全部尝试和最终选择。
|
|||
|
|
6. `rnaseq_de/enrich/candidate` 只消费正式 count matrix。
|
|||
|
|
|
|||
|
|
### 5.7 “PCA 你是不是看漏了”
|
|||
|
|
|
|||
|
|
是的,PCA 在 `rnaseq_sample_qc`,并且相关图、VST、样本相关性热图都有。更准确的修订不是“新增 PCA”,而是“总报告收口 PCA/相关性,并让 DE 报告引用 sample_qc artifacts”。
|
|||
|
|
|
|||
|
|
### 5.8 “strandness、splice_mode、max_intronlen、feature_type”
|
|||
|
|
|
|||
|
|
当前本项目:
|
|||
|
|
|
|||
|
|
- `rnaseq_align` 没有显式暴露 HISAT2 RNA strandness、known splice site、min/max intron length。
|
|||
|
|
- `rnaseq_quant` 固定 `featureCounts -t exon -g gene_id`,没有显式 `feature_type/group_attribute/strandness`。
|
|||
|
|
|
|||
|
|
这些参数意义:
|
|||
|
|
|
|||
|
|
- `strandness`:文库链特异性。错设会显著影响 featureCounts assigned reads,甚至方向相反。
|
|||
|
|
- `splice_mode`:是否使用注释中的 splice sites 指导 HISAT2。对真核 RNA-seq 比对质量有影响。
|
|||
|
|
- `max_intronlen`:最大内含子长度。物种差异很大,植物/动物/真菌可能不同,影响跨剪接比对。
|
|||
|
|
- `feature_type`:计数哪些 feature,常见 exon/CDS/gene。GFF3 结构不同会影响 assigned rate。
|
|||
|
|
- `group_attribute`:按哪个属性归并 reads 到基因。NCBI GFF3 不一定有标准 `gene_id`。
|
|||
|
|
|
|||
|
|
建议:这些参数不要强迫普通用户都填。UI 用高级参数区,默认 auto;manifest 必须记录最终值。
|
|||
|
|
|
|||
|
|
### 5.9 “候选基因排序要不要做”
|
|||
|
|
|
|||
|
|
建议做,而且分两层。
|
|||
|
|
|
|||
|
|
第一层:gene-level candidate ranking,放进 `rnaseq_de` 或新增轻量后处理:
|
|||
|
|
|
|||
|
|
- `{comparison}.candidate_genes_ranked.tsv`
|
|||
|
|
- `{comparison}.top50_candidate_genes.tsv`
|
|||
|
|
|
|||
|
|
建议字段:
|
|||
|
|
|
|||
|
|
- `gene_id`
|
|||
|
|
- `comparison`
|
|||
|
|
- `regulation`
|
|||
|
|
- `baseMean`
|
|||
|
|
- `log2FoldChange`
|
|||
|
|
- `padj`
|
|||
|
|
- `candidate_score`
|
|||
|
|
- `normalized_mean`
|
|||
|
|
- `multi_comparison_hits`
|
|||
|
|
- `family_member`
|
|||
|
|
- `go_terms`
|
|||
|
|
- `kegg_terms`
|
|||
|
|
- `annotation`
|
|||
|
|
|
|||
|
|
基础分数:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
candidate_score =
|
|||
|
|
abs(log2FC) * -log10(padj)
|
|||
|
|
+ multi_comparison_bonus
|
|||
|
|
+ family_member_bonus
|
|||
|
|
+ enrichment_hit_bonus
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
注意:报告中必须写清楚 candidate score 是优先级排序,不是新的统计显著性。
|
|||
|
|
|
|||
|
|
第二层:family/domain-level candidate ranking,继续使用并强化 `rnaseq_candidate_family`。
|
|||
|
|
|
|||
|
|
总报告中增加:
|
|||
|
|
|
|||
|
|
- `Top Candidate Genes`
|
|||
|
|
- `Top Candidate Families/Domains`
|
|||
|
|
|
|||
|
|
这会形成闭环:DE 强度用于挑单基因,结构域/家族排序用于决定下一步跑哪个基因家族 identify、phylogeny、motif、domain、expression。
|
|||
|
|
|
|||
|
|
## 6. 建议的开源化修订优先级
|
|||
|
|
|
|||
|
|
### P0:报告和用户可见收口
|
|||
|
|
|
|||
|
|
1. 新增 `run_rnaseq_report.py`。
|
|||
|
|
2. 汇总各阶段 manifest,生成 `{prefix}.rnaseq_project_report.html/md/manifest.json`。
|
|||
|
|
3. 接入 MultiQC,至少 raw/clean FastQC、HISAT2、samtools、featureCounts。
|
|||
|
|
4. 在报告中明确链接各阶段 artifacts。
|
|||
|
|
|
|||
|
|
### P1:配置和 preflight 产品化
|
|||
|
|
|
|||
|
|
1. 增加 `rnaseq_pipeline` 虚拟总控 stage。
|
|||
|
|
2. 把现有 preflight 固化为 `rnaseq_preflight` artifact。
|
|||
|
|
3. 增加样本表 UI:表格确认后生成 YAML。
|
|||
|
|
4. 导出 `samples.user.tsv` 和 `contrasts.user.tsv` 方便开源用户理解。
|
|||
|
|
|
|||
|
|
### P2:资源调度升级
|
|||
|
|
|
|||
|
|
1. 在 ResourceGovernor 保持现有 CPU token 基础上,增加机器探测。
|
|||
|
|
2. RNA-seq stage 内增加 `sample_parallel_jobs` 和 `threads_per_sample`。
|
|||
|
|
3. 增加内存/磁盘空间检查,尤其 HISAT2/samtools sort/WGCNA。
|
|||
|
|
4. manifest 写入资源分配决策。
|
|||
|
|
|
|||
|
|
### P3:定量鲁棒性
|
|||
|
|
|
|||
|
|
1. featureCounts 支持 `--feature-type auto/exon/CDS/gene`。
|
|||
|
|
2. 支持 `--group-attribute auto/gene_id/gene/locus_tag/Parent/ID`。
|
|||
|
|
3. 以 Assigned 率和 gene 数选择最终 count matrix。
|
|||
|
|
4. 把 featureCounts summary 标准化进入 manifest 和项目报告。
|
|||
|
|
|
|||
|
|
### P4:磁盘与 resume
|
|||
|
|
|
|||
|
|
1. HISAT2 直接 pipe 到 samtools sort,减少 SAM/BAM 中间文件。
|
|||
|
|
2. 每个 RNA-seq stage 统一 `--resume/--force`。
|
|||
|
|
3. 高层 Agent 继续基于 manifest 跳过,低层脚本基于关键输出完整性跳过。
|
|||
|
|
|
|||
|
|
### P5:候选模块闭环
|
|||
|
|
|
|||
|
|
1. `rnaseq_de` 增加 candidate gene ranking。
|
|||
|
|
2. `rnaseq_candidate_family` 继续负责 family/domain ranking。
|
|||
|
|
3. 项目 HTML 报告并列展示 Top Candidate Genes 和 Top Candidate Families/Domains。
|
|||
|
|
4. 后续可让 DiscoveryAgent 根据候选家族自动建议 `identify -> phylogeny -> motif/domain -> expression`。
|
|||
|
|
|
|||
|
|
## 7. 本次比较的核心判断
|
|||
|
|
|
|||
|
|
BioScriptHub/RNAseq_pipeline 对本项目最有启发的不是“分析能力更强”,而是“RNA-seq 工程体验更完整”:
|
|||
|
|
|
|||
|
|
- 更像开源用户熟悉的一键 RNA-seq pipeline;
|
|||
|
|
- 报告更集中;
|
|||
|
|
- MultiQC 更符合常规;
|
|||
|
|
- preflight 是显式产物;
|
|||
|
|
- resume 和并行参数更直观;
|
|||
|
|
- featureCounts 对 GFF3 的容错更务实。
|
|||
|
|
|
|||
|
|
本项目的优势则在:
|
|||
|
|
|
|||
|
|
- 多智能体自然语言入口;
|
|||
|
|
- manifest 与 artifact resolver;
|
|||
|
|
- scope-aware 多物种/基因家族上下文;
|
|||
|
|
- 诊断和自动修复;
|
|||
|
|
- Celery 资源队列;
|
|||
|
|
- 植物/非模式物种 enrichment;
|
|||
|
|
- fgsea、WGCNA;
|
|||
|
|
- 候选家族/结构域排序。
|
|||
|
|
|
|||
|
|
因此后续修订方向不是复制外部 pipeline,而是把它的“RNA-seq 工程收口经验”吸收到本项目现有多智能体和基因家族框架里。
|