Files
PlantAI-rag/docs/GeneFamily-RAG_Spec_FINAL.md
2026-07-10 17:59:59 +08:00

470 lines
17 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# GeneFamily-RAG 落地规范 vFINAL
> 面向"基因家族研究"场景的 Graph-first + Evidence-second RAG 总体设计与数据规范
> 整合版本:基于 gpt_rag.md (工程规范) + rag_gpt5.2.md (需求分析)
> 生成日期:2026-03-27
---
## 目录
1. [背景与目标](#1-背景与目标)
2. [总体架构](#2-总体架构)
3. [数据分层设计](#3-数据分层设计)
4. [实体与关系规范](#4-实体与关系规范)
5. [证据与溯源标准](#5-证据与溯源标准)
6. [数据资产规划](#6-数据资产规划)
7. [实施路线图](#7-实施路线图)
8. [多智能体输出规范](#8-多智能体输出规范)
9. [附录:校验规则与迁移指南](#9-附录校验规则与迁移指南)
---
## 1. 背景与目标
### 1.1 为什么要单独做"基因家族版"RAG
基因家族论文/报告的问答,和"通用植物知识图谱问答"最大的差异在于:
1. **结构化优先**:家族成员、系统发育分组、结构域/基序、复制事件、共线性、同源/旁系/直系同源等是主干信息;文本证据是支撑层。
2. **强规范化需求**:同一基因会以多种形式出现(symbol / locus / protein / accession / 旧ID / 物种前缀);不做 alias-first,召回会不稳定。
3. **可追溯是硬门槛**:科研写作/审稿需要能落到"哪篇文献/哪一段/哪张图/哪张补表/哪条数据行"。
### 1.2 科研人员的核心痛点
#### A. 把"分散的证据"变成"可检索的结论 + 依据"
科研做基因家族最常卡在:信息散在 TAIR/Ensembl/UniProt/InterPro/文章/补充材料里,结论不好复用。
RAG应该做到:
- 给出**结论**(家族定义、关键结构域、分类标准、命名惯例、已知功能)
- 同时给出**依据**(来自哪些数据库条目/哪篇文献/哪张图表/哪条实验事实)
#### B. 让"分析结果解释"不再靠记忆与经验
分析模块会吐出很多结果:树、motif、Ka/Ks、表达热图、共线性等。RAG要帮你把这些结果放进"研究共同体的语境"里:
- 某类拓扑在该家族里是否常见?是否对应已知亚家族?
- 某个结构域组合是否提示新功能/新亚型?
- 某个表达模式在文献中常见于什么胁迫/组织?
#### C. 跨物种/跨版本/跨命名的对齐与消歧
植物基因家族最痛:同源基因多个命名体系、基因组版本更新、同名不同物种。
RAG要提供:
- **实体消歧**(gene_id / transcript / protein / locus / synonyms)
- **版本追踪**(基因组版本、注释版本)
- **同源/旁系/直系**关系的证据汇总(不是只给一个结论)
#### D. 把"下一步该怎么做"变成可复用 SOP
科研人员常问的不是"是什么",而是"我下一步该做什么、怎么做最靠谱"。
RAG要能回答:
- 推荐哪些验证实验(qPCR、亚细胞定位、转录激活、突变体、互作等)
- 常用参数区间/工具选择/常见坑(例如HMM阈值、树构建模型、去冗余策略)
### 1.3 RAG应该能回答的科研问题
#### Ⅰ. 家族定义与边界(最常问)
- "XX家族在植物里**标准定义**是什么?必须包含哪些结构域/保守位点?"
- "我鉴定到的候选基因里,哪些是**真成员**,哪些可能是**假阳性/相近家族串门**?"
- "亚家族怎么划分更符合前人?有哪些主流分类体系?"
#### Ⅱ. 命名、同源与进化(写文章必用)
- "拟南芥/水稻/玉米里该家族的**命名规则**与历史沿革?"
- "某基因在不同物种的**直系同源**是谁?证据是什么(树/共线性/域架构)?"
- "家族扩张主要由**串联重复**还是**片段复制/WGD**驱动?已有研究怎么看?"
#### Ⅲ. 功能假设与优先级排序(指导实验)
- "哪些成员与**抗逆/激素/发育阶段**相关证据最强?"
- "如果我要挑3个基因做功能验证,按证据(文献+表达+保守性)怎么排序?"
- "这个motif/结构域组合在文献里通常对应什么功能模块?"
#### Ⅳ. 表达与调控(组学解释)
- "该家族在不同组织/胁迫下的典型表达模式是什么?关键条件有哪些?"
- "哪些转录因子/顺式元件经常调控该家族?有无已验证案例?"
- "是否存在典型共表达模块/通路关联(如ABA、SA、JA等)?"
#### Ⅴ. 方法学与参数(减少踩坑)
- "家族鉴定用BLAST vs HMMER怎么选?阈值怎么设更合理?"
- "树构建、比对裁剪、模型选择在该家族里常见做法是什么?"
- "Ka/Ks、共线性、结构域注释的常见误区是什么?如何自检?"
---
## 2. 总体架构
### 2.1 Graph-first + Evidence-second(强推荐作为默认路由)
#### 两级检索(默认路由)
1) **Graph-first(结构化召回)**:
- 先在图谱/关系表里召回候选实体/边/路径(尤其:member_of / classified_into / has_domain / orthologous_to / syntenic_with / duplicated_to / expressed_in / upregulated_in)。
2) **Evidence-second(证据回填)**:
- 用每条候选边的 `provenance` 去取到证据 chunk(本地 chunk 库优先;没有则在线拉取并缓存)。
3) **Cite Gate(引用门控)**:
- 置信度 ≥ medium 的结论必须能回填证据,否则回答自动降级为"可能/提示/需要进一步核查"。
### 2.2 参考 PlantConnectome 的"可借鉴点"与"必须补强点"
#### 可直接借鉴的工程思想
- **边表(Edges)**:一行一条关系,包含 `source/type/relationship/target/type + pubmedID + p_source + basis`,并额外保存 `resolved` 版本与 alias 字段。
- **Resolve 是独立阶段**:同时保存"原始抽取"和"归一化后"字段,便于调试与回溯。
- **关系同义词归并**:把大量自然语言关系词归并到少量类别/枚举(例如 activation/induction 类)。
#### 必须补强的关键缺口
- `p_source` 的格式是 `{pmid}_{section}`(如 `23031218_abstract`),但 **当前数据库无法用 `p_source` 直接取到原文 chunk**;需要从 `p_source` 提取 PMID,再通过 PubMed API 在线获取摘要/原文。
- 这意味着:**你的系统必须补一层"文献证据库(pmid → chunks)"**,否则只能做"弱可追溯"(指到 PMID+section,但没有可复核原句)。
---
## 3. 数据分层设计
### 3.1 需要的最小 6 个数据域(强推荐)
1) **Edges(关系边表)**:核心事实/关系。
2) **Entities(实体表)**:规范化实体(含 type、species、primary_id)。
3) **Alias(别名表)**:alias-first 的基础。
4) **Documents(文献元数据)**:PMID/DOI ↔ title/year/journal。
5) **Chunks(证据库)**:pmid → section → chunk_id → text + locator。
6) **FamilyLayer(家族专用层)**:家族成员、分组、结构域架构、复制/共线、orthogroup 等。
### 3.2 统一 JSON Schema(项目的"最终输出格式")
#### 顶层
```json
{"entities":[...], "relations":[...]}
```
#### Entity 通用字段
```json
{
"id": "唯一ID(内部稳定)",
"name": "展示名",
"type": "gene|protein|gene_family|protein_domain|treatment|phenotype|...(枚举)",
"species": "物种(对 gene/protein 强制)",
"primary_id": "稳定外部ID(AGI/Ensembl/UniProt/NCBI等)",
"attributes": {},
"description": "可选",
"provenance": [ ... ]
}
```
#### Relation 通用字段(核心)
```json
{
"id": "关系ID",
"source": "源实体ID",
"target": "目标实体ID",
"type": "关系枚举(canonical)",
"confidence": "high|medium|low",
"qualifiers": {},
"provenance": [ ... ],
"description": "可选"
}
```
---
## 4. 实体与关系规范
### 4.1 分阶段实施策略
```
阶段1(现在,1篇文章)
- 实体:25种(核心)
- 关系:35种(核心)
阶段2(100篇文章)
- 实体:40种(扩展)
- 关系:60种(扩展)
阶段3(几千到几万篇文章)
- 实体:80-100种(按需从190种中选择)
- 关系:150-200种(按需从788种中选择)
阶段4(可选,扩展到其他植物生物学领域)
- 实体:190种(全部)
- 关系:788种(全部)
```
### 4.2 阶段1核心实体类型(25种)
#### 核心生物实体
- `gene`, `protein`, `gene_family`, `protein_domain`, `motif`
#### 物种/组织/表型
- `organism`, `cultivar`, `tissue`, `cell_type`, `developmental_stage`
- `treatment`, `hormone`, `environmental_factor`
- `phenotype`, `trait`
#### 过程/分子
- `biological_process`, `signaling_pathway`
- `metabolite`, `mirna`, `transcription_factor`, `promoter`
#### 数据/证据
- `dataset`, `publication`, `method`, `assay`
### 4.3 基因家族通用实体类型(推荐最小全集)
- **Core**:`gene`, `protein`, `gene_family`, `gene_subfamily/phylo_clade`
- **家族鉴定**:`family_definition`, `hmm_model`, `protein_domain`, `motif`, `domain_architecture`
- **演化**:`orthogroup`, `duplication_event`, `syntenic_block`, `genomic_region`, `genome_build`
- **表达与表型**:`tissue`, `developmental_stage`, `treatment`, `phenotype`, `trait`
- **证据**:`publication`, `doc_chunk`, `figure`, `table`, `dataset`, `database`, `assay`, `method`
### 4.4 阶段1核心关系类型(35种)
#### 调控关系
- `activates`, `inhibits`, `regulates`
#### 表达关系
- `expressed_in`, `upregulated_in`, `downregulated_in`, `induced_by`, `repressed_by`
#### 功能关系
- `involved_in`, `controls`, `affects`, `promotes`, `mediates`
#### 进化关系
- `homologous_to`, `orthologous_to`, `paralogous_to`, `syntenic_with`
#### 层级关系
- `member_of`, `contains`, `part_of`, `belongs_to`
#### 互作关系
- `binds_to`, `interacts_with`, `targets`
#### 数据关系
- `annotated_in`, `stored_in`, `originated_from`
### 4.5 基因家族通用关系类型(Canonical Enum)
#### 家族
- `member_of`, `classified_into`, `defined_by`, `uses_model`, `has_domain`, `has_motif`, `has_architecture`
#### 演化
- `homologous_to`, `orthologous_to`, `paralogous_to`, `belongs_to_orthogroup`, `syntenic_with`, `duplicated_to`, `duplicated_from`
#### 表达
- `expressed_in`, `upregulated_in`, `downregulated_in`, `induced_by`, `repressed_by`, `temporally_expressed`
#### 功能/表型
- `involved_in`, `affects`, `controls`, `associated_with`
#### 互作/调控(可选)
- `regulates`, `activates`, `inhibits`, `binds_to`, `interacts_with`, `targets`
### 4.6 Domain/Range 约束示例
```yaml
expressed_in:
direction: "source->target"
domain: ["gene","transcript","protein"]
range: ["tissue","cell_type","developmental_stage"]
orthologous_to:
direction: "bidirectional"
domain: ["gene"]
range: ["gene"]
constraints:
- "species(source) != species(target)"
```
---
## 5. 证据与溯源标准
### 5.1 Provenance(证据指针)标准
```json
{
"source_type": "publication|dataset|database",
"source_id": "pmid:23031218|doi:...|GSE...|UniProt:...",
"p_source": "23031218_abstract",
"doc_chunk_id": "pmid23031218_abs_c03",
"locator": {
"section": "abstract|results|figure_legend|table|supp",
"page_start": null,
"page_end": null,
"figure": null,
"table": null
},
"snippet": "可复核原句(尽量原文)",
"evidence_level": "experiment|omics|prediction|curation",
"method": "RNA-seq|qRT-PCR|HMMER|MCScanX|..."
}
```
### 5.2 证据强度分层
- **Level 1:实验验证**(遗传学/生化/互作)
- **Level 2:组学支持**(转录组/蛋白组/表观组)
- **Level 3:计算预测**(结构域/定位/共表达/同源推断)
### 5.3 强规则
- `confidence = high/medium` ⇒ 必须有 `provenance[]`,且每条至少含 `source_id + doc_chunk_id + locator.page + snippet`
- `confidence = low` ⇒ 可无 provenance(但下游回答要降级措辞)
### 5.4 Qualifiers(上下文限定)统一格式
统一放在 relation 的 `qualifiers`,建议支持这些常用键:
- **表达类**:`tissue, stage, treatment, time_point, assay, log2fc, p_adj`
- **结构域类**:`start, end, evalue, db`
- **系统树/分组**:`tree_method, alignment_method, bootstrap, scheme`
- **共线性/复制**:`dup_type, ks, ka_ks, block_id, score`
---
## 6. 数据资产规划
### 6.1 必备(MVP就要有)
#### 1) 基因组与注释
- genome build、GFF3/GTF、CDS/protein序列、转录本结构、基因ID映射与别名表
#### 2) 结构域与功能注释
- InterPro/Pfam/SMART/CDD结果、GO、关键词、亚细胞定位预测(可作为"计算证据"层)
#### 3) 家族定义资产
- 该家族的**HMM profile**(或域组合规则)、保守motif、关键位点描述、已知亚家族规则
#### 4) 核心文献库(强建议做"精读级"结构化)
- 综述 + 领域标杆文章:把"家族分类、关键基因、实验结论、图表信息"抽成结构化卡片
### 6.2 推荐(让RAG真正"懂科研")
#### 5) 同源与进化证据集
- OrthoGroup、系统树(或树的关键分叉解释)、共线性块、复制类型标签(tandem/WGD/segmental)
#### 6) 转录组表达与差异表达
- RNA-seq/微阵列:组织、时期、胁迫、品种;DEG结果;共表达模块(WGCNA等)
#### 7) 蛋白互作/修饰/定位证据
- Y2H/BiFC/CoIP-MS、磷酸化/泛素化、定位实验图、结构预测摘要(可当"功能支持")
#### 8) 表型与遗传证据
- 突变体/过表达/CRISPR表型、QTL/GWAS关联、遗传互作
### 6.3 进阶(让RAG变成"领域专家")
#### 9) 通路与网络
- KEGG/Reactome/MapMan、调控网络、TF-靶基因证据、cis元件富集结果
#### 10) 实验SOP与"隐性知识"
- 你们实验室做家族项目的模板:从鉴定到文章写作的流程、参数默认值、审稿人常问点
---
## 7. 实施路线图
### Phase 1:可用(1个家族 → 1套可追溯答案)
- 把"家族定义 + 20–50篇关键文献 + 1–3个模式物种的注释/结构域/同源"做成高质量KB
- 重点:**实体消歧 + 证据片段引用**(没有引用的回答一律降级为"推测")
### Phase 2:好用(跨物种扩展 + 研究问题模板化)
- 加入表达数据、共线性、复制类型标签
- 建一套"问题模板 → 检索策略 → 输出格式"的库(让多智能体稳定产出)
### Phase 3:专家(自动更新 + 证据冲突处理)
- 定期增量抓取新文献/新版本注释
- 做"证据冲突"机制:不同论文结论不一致时,列出分歧点与证据等级,而不是强行给唯一答案
---
## 8. 多智能体输出规范
### 8.1 让RAG输出"可计算的中间结构"
不要只让RAG吐一段文字。更强的做法是让RAG同时输出:
#### 结论摘要(人读)
- 自然语言回答核心问题
#### 证据清单(可追溯)
- 来源ID、片段、证据等级、适用物种
#### 实体与关系(给分析代理)
- 候选基因列表、同源对、亚家族标签、条件/组织标签
#### 不确定性声明
- 哪些是推断,哪些是实验
### 8.2 输出格式示例
```json
{
"answer": {
"summary": "FtSPL1属于SPL基因家族,包含SBP结构域(PF03110)...",
"confidence": "high"
},
"evidence": [
{
"source_id": "pmid:31196111",
"snippet": "FtSPL1 contains the SBP domain (PF03110)...",
"evidence_level": "experiment",
"locator": {"figure": "Fig.1", "table": null}
}
],
"entities": [
{"id": "FtSPL1", "type": "gene", "species": "Fagopyrum tataricum"},
{"id": "SPL", "type": "gene_family"},
{"id": "PF03110", "type": "protein_domain"}
],
"relations": [
{"source": "FtSPL1", "target": "SPL", "type": "member_of", "confidence": "high"},
{"source": "FtSPL1", "target": "PF03110", "type": "has_domain", "confidence": "high"}
],
"uncertainty": [
"亚家族分类存在分歧:文献A分为3组,文献B分为5组"
]
}
```
---
## 9. 附录:校验规则与迁移指南
### 9.1 实体校验
- id 唯一
- type 在枚举中
- gene/protein/transcript 必须有 species
- protein_domain 必须有 pfam_id 或 interpro_id
### 9.2 关系校验
- source/target 必须存在
- type 在枚举中
- 满足 domain/range 约束(例如 expressed_in 不允许 gene → treatment)
- confidence≥medium ⇒ provenance 强制存在且字段完整
### 9.3 Resolve(归一化)流水线(必须独立)
- **Entity resolve(alias-first)**:优先稳定 ID(AGI/Ensembl/UniProt)> locus > symbol > name
- **Relationship resolve(同义词归并)**:把自然语言关系统一到 canonical enum,方向固定
- **Type resolve**:把 `gene identifier / gene(s) / protein(s)` 等不稳定类型统一到枚举
### 9.4 最小实现顺序(最优计划)
1) 导入边表到 `Edges`(保留 raw/resolved + pmid/p_source/basis)
2) alias-first:建 `Alias` + 统一 `entity_id/primary_id/species`
3) relationship resolve + domain/range 校验
4) 在线证据回填缓存:pmid → abstract chunks(先把"可追溯"做起来)
5) 家族专用层:member/clade/domain/duplication/synteny(来自你自己的分析)
6) Cite Gate:高置信必须能回填 snippet,否则降级措辞
### 9.5 PlantConnectome 边表字段 → 你的 v2 映射
- `pubmedID` → provenance.source_id = `pmid:{pubmedID}`
- `p_source` → provenance.p_source
- `basis` → provenance.snippet(短期可用;长期建议用原句替换)
- `* resolved` → 你的 canonical entity/type/relation
- `* gene alias` → Alias 表的候选 ID 列表
---
## 附录:建议补充的 2 个高频关系
- `localized_to`:`protein → subcellular_compartment`
- `essential_for`:`gene/protein → process/metabolite/phenotype`(或归并到 involved_in + qualifiers.role=essential)
---
*文档版本:FINAL*
*整合日期:2026-03-27*
*状态:可直接执行*