关于 tooluniverse-biomedical-fact-lookup
tooluniverse-biomedical-fact-lookup 是一项面向生物医学事实问答的技能,指导 Agent 查询权威数据库工具,而非凭记忆回答。它涵盖多类基因、疾病、蛋白质和变异查询,并提示常见的数据解读陷阱。
主要功能
- 01按问题类型路由至查询工具
- 02查询数据库核实事实
- 03检查选项与结果是否匹配
- 04提示数据库注释解读陷阱
- 05覆盖基因、疾病及蛋白质信息
适用场景
- 01核对基因集成员或疾病关联
- 02查询蛋白质功能与定位
- 03比较变异、调控元件或脑区注释
- 04回答指定数据库来源的选择题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mims-harvard/ tooluniverse --skill tooluniverse-biomedical-fact-lookup安装后在 Claude Code 中输入/tooluniverse-biomedical-fact-lookup确认已加载。
附带文件test_snippets.py
详细介绍
生物医学事实查询(基于工具作答)
生物医学事实问题——例如“集合 X 中有哪些基因”“根据 DisGeNet,哪些基因与疾病 Y 相关”“根据 GTRD,哪些基因具有转录因子结合位点”——在公共数据库中都有权威答案。凭记忆猜测并不可靠(对于冷门注释,猜对的概率约等于碰运气);对应的 ToolUniverse 工具可以返回真实结果。
六个会导致答案看似确定、实则错误的陷阱
每种情况都曾在真实问题中导致错误答案。请在作答前检查;各项的详细说明见下文。
-
GWAS 中的“最高 p 值”意味着显著性最低——也就是数值最小。 按字面意思理解,会选出研究中最弱的结果(
rs2476491的 p 值为 1e-06,而非rs7775055-G的 3e-174)。 -
“TSS 上游 N bp 加下游 M bp”的窗口跨度为 N+M+1 个碱基——锚点也计入其中。TSS 两侧各 100 bp,共 201 nt,而非 200。请将得到的长度与所需长度核对。
-
HPA 的亚细胞定位会汇总抗体测试过的所有细胞系。 请报告
main_locations和additional_locations,但如果问题指定了某个细胞系,就应将它们视为候选项,并排除属于其他细胞系的注释——把五个都列出来和只列一个一样是错误的。 -
Allen Brain:回答叶级结构,而非其上级结构。 图谱会为具体结构和上级结构标注不同颜色,因此,在
Lateral preoptic area(#F2483B)才是正确答案时,回答“Hypothalamus”就是错误的。AllenBrain_search_structures会返回color_hex_triplet。 -
SCREEN 的
is_proximal不可靠;请根据element_type筛选——PLS和pELS位于 TSS 附近,dELS则位于远端。 -
衍生评分与发布版本绑定。 对 APOC2,gnomAD pLI 在 r4 中为 0.047,在 r2.1 中为 0.402——同一基因的数值相差 8.5 倍。请使用问题指定的发布版本,并说明所用版本。
规则零:查询数据,绝不猜测
如果问题提到了数据库、基因集或数据库中包含的任何注释,就必须先查询工具。如果凭记忆回答“根据 <数据库>”的问题,就会出错——这些注释(预测的 miRNA 靶标、ChIP-seq 结合、整理好的基因集、疾病关联)正是模型容易产生幻觉的内容。经过工具核验的答案胜过任何回忆出来的事实。
选择题流程
这些问题大多是选择题,其中有一个“信息不足,无法回答”选项。请按以下步骤作答:
- 解析问题,找出:指定的数据库/集合、锚定实体(基因集、疾病、miRNA、TF、基因座……)以及候选选项。
- 确定锚定实体对应的工具和标识符(见路由表)。
- 查询工具一次,获取权威的成员列表/关联集合。
- 核对每个选项与查询结果。应当恰好有一个选项得到支持。
- 作答,给出该选项的字母。只有当工具对有效查询确实没有返回任何结果时,才选择“信息不足”(不能因为跳过查询而选择)。
路由表——问题模式 → 工具
| 问题提及…… | 工具(已验证) | 方法 |
|---|---|---|
一个具名的 基因集 / 致癌特征(MSigDB C6,例如 ATM_DN.V1_DN) | MSigDB_get_gene_set_members | 列出成员,检查其中是否包含某个选项 |
| “根据 miRDB”给出的 miRNA 靶标(例如 MIR186-3p) | MSigDB_get_gene_set_members(集合 C3:MIR:MIRDB) | 集合名称 = MIR<number>_<3P|5P>,例如 MIR186_3P |
| “根据 GTRD”给出的 TF 结合位点 / 靶标(例如 PGM3) | MSigDB_check_gene_in_set(集合 C3:TFT:GTRD) | 集合名称 = <TF>_TARGET_GENES,例如 PGM3_TARGET_GENES;针对每个选项传入 gene |
| 通路 / 标志成员资格 | MSigDB_get_hallmark_geneset、MSigDB_get_geneset | HALLMARK_<NAME> 或精确的集合名称 |
| 基因 ↔ 疾病关联(DisGeNet、OpenTargets、OMIM) | umls_search_concepts → DisGeNET_get_disease_genes/DisGeNET_get_gda;OpenTargets_*、MyDisease_get_disease、OMIM_search;文本挖掘备用方案: PubTator3_LiteratureSearch / PubTator3_GetEntityRelations(e1=@GENE_<sym>)、EPMC_get_text_mined_annotations | DisGeNET 需要 UMLS CUI(通过 umls_search_concepts 解析 → C0152200,然后设置 disease=C0152200)以及 DISGENET_API_KEY。参见下方“在 X 中但不在 Y 中”操作方案 |
| 小鼠表型基因集(MP / MGI,例如“黑色素瘤发病率升高”) | MSigDB_check_gene_in_set(小鼠 M5,集合 MP_<PHENOTYPE>)——备用方案:MGI_search_genes → MGI_get_phenotypes | 对照 MP_* 集合每个选项调用一次(例如 MP_INCREASED_MELANOMA_INCIDENCE);成员即为答案。仅当集合名称无法解析时,才使用下方的 MGI 逐基因方案 |
| 基因基因组位置(Ensembl 带区,例如 chr7q34) | Ensembl_* / NCBIDatasets_get_gene_by_symbol | 解析每个选项并比较细胞遗传学带区 / 坐标 |
| 变异 / 序列致病性(“根据 ClinVar,哪个变异 / 序列具有致病性 或 良性”) | (仅在确实无法确定时)annotate_variant_multi_source、VEP_predict_pathogenicity、UniProt_get_disease_variants_by_accession | 提高效率——不要查询每个选项(这会导致超时)。 先确定蛋白质,再找出每个选项对应的单个氨基酸替换,并直接根据具体残基变化进行判断;对于已充分研究的 ClinVar 变异,基础模型通常很可靠。最多进行一次有针对性的工具调用,以解决真正不确定的变异。注意问题的判断方向(良性还是致病):对于“最可能为良性”,常见 / 与参考序列一致的变异就是答案;对于“最可能具有致病性”,罕见且有害的变异才是答案。 |
| 药物 / 化合物靶标、作用机制、审批状态 | ChEMBL_*、OpenFDA_*、GtoPdb_*(需要 GTOPDB_API_KEY)、PubChem_* | 解析药物并查询相关关系 |
| 适合该患者的药物(临床病例中提到了修饰因素) | FDA_*_by_drug_name——根据修饰因素选择章节 | 参见下方“为描述的患者选择药物” |
| 蛋白质功能 / 结构域 / 序列 | UniProt_* | 解析登录号并阅读注释 |
| 蛋白质定位 / 表达(“根据 Human Protein Atlas”) | HPA_get_subcellular_location、HPA_get_rna_expression_by_source、HPA_get_comprehensive_gene_details_by_ensembl_id | 传入基因符号——抗体 ID(例如 HPA073143)也可使用,并会解析到其靶基因。报告主要和其他定位——参见下文 |
| Allen 小鼠/人脑图谱中的脑区 | AllenBrain_search_structures(name 或 acronym)、AllenBrain_get_structure | 参考图谱中的区域按颜色编码:结果包含 color_hex_triplet,因此可以回答“图中红色的区域是什么”——见下文 |
| 基因附近的调控元件 / cCRE(ENCODE SCREEN) | SCREEN_search_cCREs_by_region | 按 element_type 筛选(PLS 和 pELS 靠近 TSS,dELS 位于远端),并查看 dnase_zscore |
| ClinVar 中位于 / 与某基因组区域重叠的变异 | ClinVar_search_by_region | 不要使用 ClinVar_search_variants——Entrez 匹配的是变异的起点,因此窄窗口会漏掉跨越该区域、但起点在上游数百万碱基处的 CNV。此工具返回真正重叠的变异,并按跨度从小到大排序 |
| ReMap 中某 TF 实验的峰数量 / 数据集 | ReMap_list_datasets_for_target | 一个 GEO 系列可以包含多个数据集(GSE23852/FOXA1 = 2 个,分别有 60,158 和 67,736 个峰)——除非问题要求总数,否则应分别报告;使用 count_peaks: true 获取数量 |
| STRING 中的蛋白质互作伙伴 | STRING_get_protein_interactions | 查看 partner 字段,而非 preferredName_B:边按内部 ID 排列为 A/B,因此被查询的蛋白质大约一半时间位于 A 列 |
不确定哪个工具封装了某个数据库时,请按关系(例如“基因-疾病关联”“基因集成员”)搜索目录,而不是按品牌名称搜索——ToolUniverse 通常已经提供了相应工具。
Allen Brain Atlas——回答具体结构,而非其父级结构
参考图谱为每个结构指定颜色,而 AllenBrain_search_structures
会返回 color_hex_triplet。询问某种颜色(“冠状位 181 处标注为红色的是哪个区域”)的问题,问的是具有该颜色的叶级结构,例如 Lateral preoptic area = #F2483B。
回答其所属区域(“Hypothalamus”)是错误的,尽管它包含了正确的区域:图谱为具体结构着色,而父级结构有自己的不同颜色。按名称或缩写搜索,比较
color_hex_triplet,并给出颜色相符的结构。请注意,同一个缩写可能返回多行(半球特异性条目和本体版本条目),且颜色不同——优先选择 name 与问题措辞相符的那一行。
Human Protein Atlas——报告两个定位字段
HPA_get_subcellular_location 将结果拆分为两部分,而且这种拆分并非按显著性排序:
main_locations : ['Nucleoplasm']
additional_locations : ['Primary cilium', ..., 'Cytosol']
询问“这种抗体显示出什么定位”的问题,需要的是 HPA 报告的所有位置,也就是两个列表——只根据 main_locations 作答会漏掉真实的定位,这是只答对一部分的常见原因(例如,HPA 报告“Nucleoplasm, Cytosol”,却只回答“Nucleoplasm”)。请使用已经合并两者的 location_summary,或查看这两个字段。
另外还需注意两点:
- 定位信息按细胞系汇总。 HPA 会汇总某个抗体在所有受测细胞系中的免疫荧光结果。如果问题指定了某个细胞系(HEK293、U-2 OS),应将列表视为候选集合,并说明报告的是哪个细胞系,而不要暗示汇总结果仅适用于该细胞系。
- 仅公开富集细胞类型的 RNA 值。 HPA 的机器可读字段会提供基因富集细胞类型的特异性以及 nTPM/nCPM;不会公开任意细胞类型的数值。如果问题询问的细胞类型没有相应数值,请如实说明,而不要用最接近的可用数值替代——两者可能相差一个数量级。
MSigDB 集合名称规范(LAB-Bench 中最常见的模式)
ToolUniverse 的 MSigDB_* 工具涵盖了 LAB-Bench 问题所基于的多个集合。请准确填写集合名称:
- C6 致癌特征 — 使用问题中引用的确切集合名称(例如
ATM_DN.V1_DN、KRAS.600_UP.V1_UP)。 - C3:MIR:MIRDB(miRDB v6.0 预测的 miRNA 靶标)—
MIR<number>_<3P|5P>(例如MIR186_3P、MIR675_3P)。这就是 miRDB;不要说“无法访问 miRDB”。 - C3:TFT:GTRD(GTRD TF 靶基因)—
<TF>_TARGET_GENES(例如PGM3_TARGET_GENES)。这就是 GTRD。 - Hallmark —
HALLMARK_<NAME>。 - Mouse M5(MGI 哺乳动物表型) —
MP_<PHENOTYPE_IN_CAPS>(例如,“increased melanoma incidence” →MP_INCREASED_MELANOMA_INCIDENCE)。这些是小鼠集合:工具会先尝试人类集合,再自动尝试小鼠集合;也可以传入species: "mouse"跳过人类集合的查询。相比逐一查询每个基因的完整 MGI 表型列表,优先使用此方法。
MSigDB_get_gene_set_members(操作 get_gene_set)返回 {genes:[...]};MSigDB_check_gene_in_set(操作 check_gene_in_set,参数 gene)返回 {is_member: bool}。两者都会报告匹配的 species 集合。
每个集合只获取一次,不要为每个选项都获取一次。 多项选择题会询问一个集合中的 3-5 个候选项,因此调用一次 MSigDB_get_gene_set_members 就能回答所有候选项——你可以自行将选项与返回的列表进行比对。仅在问题只涉及一个基因,或集合过大、不便完整返回时,才使用 MSigDB_check_gene_in_set。
“在数据库 X 中有关联,但在数据库 Y 中没有”基因-疾病查询方法
这类问题(例如“根据 DisGeNet,哪个基因与疾病 D 有关联,但与 OMIM 无关?”)需要进行差异查询,而不是单次查询:
- 将 D 解析为 UMLS CUI(
umls_search_concepts)。 - OMIM 侧: 使用
OMIM_search/OMIM_get_gene_map查询 D → 获取 OMIM 致病基因集合。 - DisGeNet 侧: 使用
DisGeNET_get_disease_genes(disease=CUI)(人工整理)。请注意,学术版 API key 仅能访问人工整理的数据;DisGeNet 还包含一个文本挖掘层,而该 key 无法访问。 - 文本挖掘回退方案(当人工整理的数据为空时,用于覆盖 DisGeNet 的文本挖掘层):使用
PubTator3_LiteratureSearch("<GENE> <disease>")或PubTator3_GetEntityRelations(e1="@GENE_<sym>", type="associate")——与 D 存在文献共现、但不在 OMIM-for-D 中的基因,就是“在 DisGeNet 中有记录,但不在 OMIM 中”的答案。 - 排除法: 排除对 D 属于 OMIM 致病基因的选项;在其余选项中,选择与 DisGeNet/文本挖掘关联的基因。如果恰好只有一个选项不属于 OMIM 致病基因,且存在任何关联信号,那就是答案。
- 仅当所有来源都没有任何选项存在关联时,才回答“信息不足”。如果标准答案中的基因既不在人工整理的 DisGeNet 数据、OMIM 中,也没有出现在 PubTator 文献中,它可能依赖学术版 API 无法访问的 DisGeNet 内部文本挖掘信号——请如实说明,不要猜测。
为病例描述的患者选择药物(临床病例题)
“以下哪种方案最适合这位患者?”题目会给出一个病例,并指出某种修饰因素——肝功能或肾功能损害、Child-Pugh 分级、合并使用强效 CYP3A4 抑制剂、妊娠、过敏或禁忌证——以及若干候选药物。这类题目看起来是在考临床判断,但真正起决定作用的是修饰因素,而答案就在每种候选药物的 FDA 标签中。依靠记忆作答正是容易出错的地方:选项通常都是治疗该病的合理药物,只有标签能将它们区分开来。
1. 先将每个选项的商品名对应到通用名。
对每个选项调用 FDA_get_active_ingredient_info_by_drug_name。务必先做这一步,再开始推理,原因有二:标签查询以活性成分为依据,而且有时两个选项其实是同一种药物,只是分别使用了商品名和通用名。若出现这种情况,两者都不可能是预期答案——它们无法区分——因此应同时排除,往往就能直接解出题目。明确指出重复选项;这也值得报告为基准测试缺陷。
2. 只查询修饰因素所涉及的章节。 每个候选药物进行一次有针对性的调用,比调取完整标签更有效:
| 病例描述…… | 查看此章节 |
|---|---|
| 肝功能损害、Child-Pugh A/B/C 级、肝硬化 | 调用 FDA_get_pharmacokinetics_by_drug_name(肝功能损害小节),然后调用 FDA_get_dosage_and_storage_information_by_drug_name 查询剂量调整。Child-Pugh 分级可能出现在其中任一章节,也可能出现在禁忌证中;有些标签描述了肝功能损害,却完全不使用这一术语——某个章节中没有相关信息,不代表标签中没有 |
| 肾功能损害、CrCl/eGFR、透析 | 同样查询这两个章节——先查药代动力学,再查剂量 |
| “正在使用强效 CYP3A4 抑制剂/诱导剂”,或指定了任何合并用药 | 调用 FDA_get_drug_interactions_by_drug_name;若标签写明的是代谢途径而非特定药物组合,则调用 FDA_get_clinical_pharmacology_by_drug_name |
| 妊娠、哺乳、“计划怀孕” | 调用 FDA_get_pregnancy_or_breastfeeding_info_by_drug_name(若问题专门询问胎儿伤害,则调用 FDA_get_teratogenic_effects_by_drug_name) |
| 过敏,或会排除某药的合并症 | 调用 FDA_get_contraindications_by_drug_name,然后调用 FDA_get_boxed_warning_info_by_drug_name |
| 老年患者/儿科患者 | 调用 FDA_get_geriatric_use_info_by_drug_name/FDA_get_pediatric_use_info_by_drug_name |
| 该药可能无法治疗所述疾病 | 调用 FDA_get_indications_by_drug_name |
命名规则一致——FDA_get_<section>_by_drug_name——因此,如果这里未列出所需章节,可在目录中按章节名称搜索,而不是猜测工具名称。
3. 通过排除法作出判断,并说明每个选项为何被排除。 通常,预期答案是唯一不受该修饰因素排除的候选药物:因肝功能损害而禁用、需要无法实现的剂量减量、与所述合并用药发生相互作用,或未获批用于治疗该疾病。引用标签中排除各选项的原文——没有引用标签原句的病例题答案,只是披着引文外衣的猜测。
不要过度查询。 先确认活性成分(每个选项调用一次),再为每个剩余候选药物查阅一个章节。如果所有选项的标签都没有说明该修饰因素,就如实指出,并根据适应证作答——不要继续查询其他章节,寄望找到区分依据。
小鼠表型匹配(MGI)——仅作备用
先尝试使用 MP_<PHENOTYPE> MSigDB 集合(见上文):每个选项只需一次调用,而且使用的是相同的 MGI 注释。仅当集合名称无法解析时,才使用这种逐基因查询方式。
MGI_get_phenotypes 会为每个基因返回一个 phenotype_statement 字符串列表,并且采用分页——某个基因匹配的陈述往往在后续页面中,因此单页内容不能证明该基因没有匹配项。要回答“哪个基因被注释为具有表型 P”,请查询每个候选基因,并选择陈述中包含与 P 匹配短语的基因(陈述是便于人阅读的内容,例如“癌发生率增加”“肿瘤”)。应匹配表型概念,而非完全相同的 MP ID 字符串。如果有多个匹配项,优先选择最具体的陈述。
计算步骤(答案需要计算,而非查找时)
GWAS 中的“最高 p 值”指最显著
在 GWAS 文献中,“最高 p 值”“首要关联位点”和“最强关联”都指最显著的结果,也就是数值最小的 p 值。按字面理解,“最高”会选出研究中最弱的关联,这几乎从来不是原意。
对于 GCST005528,按字面理解会得到 rs2476491-?,p = 1e-06;预期答案是 rs7775055-G,p = 3e-174。
按 p 值升序排序并报告该位点。如果措辞确实可能有两种理解,就给出最显著的位点,并用一句话说明数值最大的 p 值对应另一个 SNP——不要默默按字面意思选择。
基因组窗口——计入锚点碱基
描述为“X 上游 N bp 加下游 M bp”的窗口,跨度为 N + M + 1 个碱基,因为锚点 X 本身也包含在内。若要求 TSS 上游 100 bp、下游 100 bp,则长度是 201 nt,而不是 200。差一位是序列答案看起来正确却实际错误的最常见原因。
无论调用哪种工具,也要注意其坐标约定:
| 约定 | start..end 的跨度 | 使用场景 |
|---|---|---|
| 1 基闭区间 | end - start + 1 | Ensembl region、UCSC 浏览器文本、IGV、samtools |
| 0 基半开区间 | end - start | UCSC REST API、BED |
UCSC_get_sequence 可通过 region 接收以文本形式给出的位点(1 基闭区间),也可通过带有 coordinate_system 的显式 chrom/start/end 参数接收位点;它会回显 region_1based 和 requested_length,以便核对跨度。回答前务必检查返回长度是否符合问题要求——即使保留的每个碱基都正确,长度不对的序列仍然是错误的。
任何具有唯一确定的数值/组合答案的问题都必须通过运行代码得出,绝不能估算或心算。这适用于序列问题(ORF 数量、限制性酶切片段/大小、GC 含量、翻译),也适用于其他所有可精确计算的问题,例如遗传分离/孟德尔或多倍体配子比例、组合概率、化学计量、剂量/药代动力学运算、计数问题。对这类问题进行心算是最常见且可避免的错误来源:模型很容易数错或乘错。如果问题可以归结为“枚举情形/相乘概率/计数对象”,就编写一段简短的 Python 代码,运行后准确报告返回结果——即使题目看起来像生物学“推理”问题,只要答案是确定的数字,就应计算,而不是凭推理得出。按照问题的措辞采用相应约定(使用哪条链;线性还是环状;采用哪种杂交/分离模型),并说明所用约定,以便核查。
最终答案规范(避免“计算正确,答案错误”)。 代码返回结果后,请仔细、明确地将结果对应到选项字母:先引用计算出的值,再找出与之完全匹配的选项(对于片段大小集合,要匹配完整的多重集;对于计数,要匹配整数)。很多答错的情况都是计算正确,却选错了字母——务必避免这种情况;提交 [ANSWER] 前,请重新逐一核对每个选项与计算结果。
流程:“有多少 ORF 编码的蛋白质长度大于 N 个氨基酸?”
按字面理解题意。“DNA 序列 <X> 中有多少个 ORF”问的是给定的那条单链——只计数该链(3 个阅读框),而不是两条链。不要因为 DNA 是双链的就“热心地”加上反向互补链:题目给出的是一个序列字符串,并询问其中有什么,因此除非题目明确写了“两条链”“双链”“任一条链”或“反向互补链”,否则反向链不在范围内。默认加入反向链是这类题目答错最常见的原因——请务必避免。计入每个能到达同阅读框终止密码子的不同起始位点(ATG);重叠或嵌套的 ORF 都要计数(同一阅读框中,一个终止密码子前有两个 ATG,就算两个 ORF)。长度规则是严格大于:蛋白质长度(aa)=(终止密码子索引 − 起始密码子索引);对于“长度大于 N”,只保留 aa_len > N 的结果。报告代码针对给定链返回的数量——即使也计算了双链的结果,也不要用它替代题目所问的单链答案。
from Bio.Seq import Seq
def count_orfs(dna, min_aa, both_strands=False):
"""Count ORFs (ATG..in-frame-stop) encoding a protein STRICTLY longer than min_aa.
Counts every qualifying ATG, including nested/overlapping ORFs. Forward strand
by default; set both_strands=True only if the question asks for both strands."""
dna = "".join(dna.split()).upper()
strands = [Seq(dna)]
if both_strands:
strands.append(Seq(dna).reverse_complement())
n = 0
for s in strands:
for off in range(3): # three reading frames per strand
trimmed = s[off: len(s) - (len(s) - off) % 3]
prot = str(trimmed.translate()) # '*' marks stop codons
i = 0
while i < len(prot):
if prot[i] == "M": # ATG
stop = prot.find("*", i)
if stop != -1 and (stop - i) > min_aa:
n += 1 # count this ATG; do NOT jump past stop
i += 1
return n
# e.g. count_orfs(seq, 12) -> integer; report exactly that number.
流程:限制性酶切片段计数/大小
# Count fragments after digesting with named enzyme(s).
# LINEAR DNA is the default (a plain sequence string): fragments = cuts + 1.
# Only use circular=True if the question says plasmid/circular.
from Bio.Seq import Seq
from Bio.Restriction import RestrictionBatch
def digest(dna, enzymes, circular=False):
dna = "".join(dna.split()).upper()
rb = RestrictionBatch(enzymes) # e.g. ["EcoRI","BamHI"] or ["AluBI","MalI"]
cut_positions = sorted(p for sites in rb.search(Seq(dna), linear=not circular).values() for p in sites)
if not cut_positions:
return 1, [] # uncut: one fragment (linear or circular)
n_frag = len(cut_positions) if circular else len(cut_positions) + 1
return n_frag, cut_positions
如果 RestrictionBatch 因酶名报错(同裂酶/罕见供应商名称),请通过 DNA 酶切工具(该工具带有 Biopython 回退方案)解析,或将其映射到识别位点后重新运行——不要退而猜测。
流程:遗传分离/配子与子代比例(枚举,而非凭记忆)
涉及比例的遗传学问题——配子频率、子代基因型比例、多倍体分离——都可以通过枚举等可能的等位基因组合精确计算。不要凭记忆套用比例;要推导出来。对于某位点携带一组等位基因的亲本,在染色体随机分离的情况下,配子中的等位基因组合,是从亲本的等位基因中选取配子所含数量的所有等可能组合;用 Counter 和 combinations 统计基因型类别。
from itertools import combinations
from collections import Counter
def gamete_ratio(alleles, gamete_size):
"""Genotype distribution of gametes under random segregation.
e.g. tetraploid AAaa -> gametes carry 2 alleles: gamete_ratio(['A','A','a','a'], 2)."""
classes = Counter("".join(sorted(c)) for c in combinations(alleles, gamete_size))
return dict(classes) # e.g. {'AA':1, 'Aa':4, 'aa':1}
def progeny_fraction(parent_alleles, gamete_size, target_gamete, selfing=True):
"""Fraction of progeny that are homozygous target (e.g. 'aa' gamete x 'aa' gamete -> aaaa)."""
g = gamete_ratio(parent_alleles, gamete_size); tot = sum(g.values())
p = g.get(target_gamete, 0) / tot
return p * p if selfing else p # selfing/self-cross: square the gamete frequency
# tetraploid AAaa: gamete_ratio(['A','A','a','a'],2) = {'AA':1,'Aa':4,'aa':1};
# recessive 'aa' gamete freq = 1/6, so aaaa progeny under selfing = (1/6)^2 = 1/36.
将枚举得到的比例与选项对照(例如,若某情形得到 AA:Aa:aa 配子比例 1:4:1,则 aa 配子数量最多,因此 aaaa 子代比例也最高)。报告计算出的分数/比例,并选择与之匹配的选项。
解读:报告代码实际返回的精确值(ORF 数量;完整多重集形式的片段数量/大小;最长 ORF 的 nt 或 aa 长度;配子比例/子代分数——严格按题目所问)。务必说明采用的约定(正向链还是双链;线性还是环状;分离模型),以便核查。如果存在两种合理解读,请分别计算,并选择符合题目字面表述的一种。然后明确将计算结果与选项对应起来再作答(参见上文最终答案规范)。
解读
- 列出锚点成员/关联项的工具结果具有权威性——选择其中列出的选项。
- 如果工具因某个名称报错(例如未找到集合),请先根据上述约定重新推导名称,再判断是否“信息不足”。
- 只有在针对格式正确的查询,权威工具返回空结果时,“信息不足”才是正确答案——如果根本没有尝试查询,就不能这样回答。
局限性(如实说明)
-
需要密钥的来源:
DisGeNET_*和 OMIM 工具需要DISGENET_API_KEY/ OMIM 密钥。没有密钥时,请改用无需密钥的OpenTargets_*/MyDisease_*,并说明所用来源。如果没有无需密钥的来源能够回答问题,且问题指定了数据库,则确实属于“信息不足”的情况——请如实说明。 -
版本不匹配:工具所用的数据库快照可能与问题指定的确切版本不同;对于某些数值,差异可能并不小。不同版本间会重新计算衍生评分,因此同一个基因的评分可能相差一个数量级。通过
gnomad_get_constraint获取的 gnomAD pLI:基因 gnomAD r4 gnomAD r2.1 APOC2 0.046875 0.401638 APOC1 0.086323 0.216848 如果工具提供
dataset/版本参数,请将其设为问题指定的版本,并说明所用版本。如果工具无法提供问题指定的版本,请报告实际使用的版本,不要把数值说成与版本无关——在这里,单独给出 pLI 值会产生最高 8 倍的歧义。 -
此技能用于查询事实。若要对用户的数据文件进行计算,请改用数据分析路由技能。