tooluniverse-cancer-variant-interpretation

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Cancer Variant Interpretation for Precision Oncology

精准肿瘤学的癌症变异解读

Comprehensive clinical interpretation of somatic mutations in cancer. Transforms a gene + variant input into an actionable precision oncology report covering clinical evidence, therapeutic options, resistance mechanisms, clinical trials, and prognostic implications.
KEY PRINCIPLES:
  1. Report-first approach - Create report file FIRST, then populate progressively
  2. Evidence-graded - Every recommendation has an evidence tier (T1-T4)
  3. Actionable output - Prioritized treatment options, not data dumps
  4. Clinical focus - Answer "what should we treat with?" not "what databases exist?"
  5. Resistance-aware - Always check for known resistance mechanisms
  6. Cancer-type specific - Tailor all recommendations to the patient's cancer type when provided
  7. Source-referenced - Every statement must cite the tool/database source
  8. English-first queries - Always use English terms in tool calls (gene names, drug names, cancer types), even if the user writes in another language. Respond in the user's language

提供癌症体细胞突变的全面临床解读。将基因+变异输入转换为可行的精准肿瘤学报告,涵盖临床证据、治疗方案、耐药机制、临床试验及预后意义。
核心原则:
  1. 报告优先原则 - 先创建报告文件,再逐步填充内容
  2. 证据分级 - 每项建议均对应证据等级(T1-T4)
  3. 可行输出 - 优先推荐治疗方案,而非数据堆砌
  4. 临床聚焦 - 回答“应采用何种治疗?”而非“有哪些数据库?”
  5. 耐药性关注 - 始终检查已知耐药机制
  6. 癌症类型特异性 - 若提供癌症类型,所有建议均需适配患者的癌症类型
  7. 来源引用 - 所有陈述必须标注工具/数据库来源
  8. 英文优先查询 - 工具调用时始终使用英文术语(基因名、药物名、癌症类型),即使用户使用其他语言提问,仍需以用户使用的语言回复

When to Use

使用场景

Apply when user asks:
  • "What treatments exist for EGFR L858R in lung cancer?"
  • "Patient has BRAF V600E melanoma - what are the options?"
  • "Is KRAS G12C targetable?"
  • "Patient progressed on osimertinib - what's next?"
  • "What clinical trials are available for PIK3CA E545K?"
  • "Interpret this somatic mutation: TP53 R273H"
  • "Molecular tumor board: EGFR exon 19 deletion, NSCLC"

适用于用户询问以下问题时:
  • "肺癌中EGFR L858R的可用治疗方案有哪些?"
  • "患者患有BRAF V600E黑色素瘤,有哪些治疗选择?"
  • "KRAS G12C是否可作为治疗靶点?"
  • "患者使用奥希替尼后进展,下一步该如何处理?"
  • "PIK3CA E545K有哪些可用的临床试验?"
  • "解读该体细胞突变:TP53 R273H"
  • "分子肿瘤委员会讨论:EGFR 19号外显子缺失,非小细胞肺癌"

Input Parsing

输入解析

Required: Gene symbol + variant notation Optional: Cancer type (improves specificity)
必填项: 基因符号 + 变异表示法 可选项: 癌症类型(提升结果特异性)

Accepted Input Formats

支持的输入格式

FormatExampleHow to Parse
Gene + amino acid changeEGFR L858Rgene=EGFR, variant=L858R
Gene + HGVS proteinBRAF p.V600Egene=BRAF, variant=V600E
Gene + exon notationEGFR exon 19 deletiongene=EGFR, variant=exon 19 deletion
Gene + fusionEML4-ALK fusiongene=ALK, variant=EML4-ALK
Gene + amplificationHER2 amplificationgene=ERBB2, variant=amplification
Full query with cancer"EGFR L858R in lung adenocarcinoma"gene=EGFR, variant=L858R, cancer=lung adenocarcinoma
格式示例解析方式
基因+氨基酸改变EGFR L858Rgene=EGFR, variant=L858R
基因+HGVS蛋白表示BRAF p.V600Egene=BRAF, variant=V600E
基因+外显子表示EGFR exon 19 deletiongene=EGFR, variant=exon 19 deletion
基因+融合突变EML4-ALK fusiongene=ALK, variant=EML4-ALK
基因+扩增HER2 amplificationgene=ERBB2, variant=amplification
包含癌症类型的完整查询"EGFR L858R in lung adenocarcinoma"gene=EGFR, variant=L858R, cancer=肺腺癌

Gene Symbol Normalization

基因符号标准化

Common aliases to resolve:
  • HER2 -> ERBB2
  • ALK -> ALK (but EML4-ALK is a fusion)
  • PD-L1 -> CD274
  • VEGF -> VEGFA

需解析的常见别名:
  • HER2 -> ERBB2
  • ALK -> ALK(但EML4-ALK为融合突变)
  • PD-L1 -> CD274
  • VEGF -> VEGFA

Phase 0: Tool Parameter Verification (CRITICAL)

阶段0:工具参数验证(至关重要)

BEFORE calling ANY tool for the first time, verify its parameters.
首次调用任何工具之前,务必验证其参数。

Known Parameter Corrections

已知参数修正

ToolWRONG ParameterCORRECT Parameter
OpenTargets_get_associated_drugs_by_target_ensemblID
ensemblID
ensemblId
(camelCase)
OpenTargets_get_drug_chembId_by_generic_name
genericName
drugName
OpenTargets_target_disease_evidence
ensemblID
ensemblId
+
efoId
MyGene_query_genes
q
query
search_clinical_trials
disease
,
biomarker
condition
,
query_term
(required)
civic_get_variants_by_gene
gene_symbol
gene_id
(CIViC numeric ID)
drugbank_*
any 3 paramsALL 4 required:
query
,
case_sensitive
,
exact_match
,
limit
ChEMBL_get_drug_mechanisms
chembl_id
drug_chembl_id__exact
ensembl_lookup_gene
no species
species='homo_sapiens'
is REQUIRED for Ensembl IDs

工具错误参数正确参数
OpenTargets_get_associated_drugs_by_target_ensemblID
ensemblID
ensemblId
(小驼峰命名)
OpenTargets_get_drug_chembId_by_generic_name
genericName
drugName
OpenTargets_target_disease_evidence
ensemblID
ensemblId
+
efoId
MyGene_query_genes
q
query
search_clinical_trials
disease
,
biomarker
condition
,
query_term
(必填)
civic_get_variants_by_gene
gene_symbol
gene_id
(CIViC数值ID)
drugbank_*
任意3个参数全部4个必填:
query
,
case_sensitive
,
exact_match
,
limit
ChEMBL_get_drug_mechanisms
chembl_id
drug_chembl_id__exact
ensembl_lookup_gene
无物种参数
species='homo_sapiens'
为获取Ensembl ID的必填项

Workflow Overview

工作流概述

Input: Gene symbol + Variant notation + Optional cancer type

Phase 1: Gene Disambiguation & ID Resolution
  - Resolve gene to Ensembl ID, UniProt accession, Entrez ID
  - Get gene function, pathways, protein domains
  - Identify cancer type EFO ID (if cancer type provided)

Phase 2: Clinical Variant Evidence (CIViC)
  - Find gene in CIViC (via Entrez ID matching)
  - Get all variants for the gene
  - Match specific variant
  - Retrieve evidence items (predictive, prognostic, diagnostic)
  - Get CIViC assertions

Phase 3: Mutation Prevalence (cBioPortal)
  - Frequency across cancer studies
  - Co-occurring mutations
  - Cancer type distribution

Phase 4: Therapeutic Associations (OpenTargets + ChEMBL + FDA + DrugBank)
  - FDA-approved targeted therapies
  - Clinical trial drugs (phase 2-3)
  - Drug mechanisms of action
  - Drug label information
  - Combination therapies

Phase 5: Resistance Mechanisms
  - Known resistance variants (CIViC, literature)
  - Bypass pathway analysis (Reactome)
  - Secondary mutations

Phase 6: Clinical Trials
  - Active trials recruiting for this mutation
  - Trial phase and status
  - Eligibility criteria

Phase 7: Prognostic Impact & Pathway Context
  - Survival associations (literature)
  - Pathway context (Reactome)
  - Expression data (GTEx)
  - Literature evidence (PubMed)

Phase 8: Report Synthesis
  - Executive summary
  - Clinical actionability score
  - Treatment recommendations (prioritized)
  - Completeness checklist

Input: Gene symbol + Variant notation + Optional cancer type

Phase 1: Gene Disambiguation & ID Resolution
  - Resolve gene to Ensembl ID, UniProt accession, Entrez ID
  - Get gene function, pathways, protein domains
  - Identify cancer type EFO ID (if cancer type provided)

Phase 2: Clinical Variant Evidence (CIViC)
  - Find gene in CIViC (via Entrez ID matching)
  - Get all variants for the gene
  - Match specific variant
  - Retrieve evidence items (predictive, prognostic, diagnostic)
  - Get CIViC assertions

Phase 3: Mutation Prevalence (cBioPortal)
  - Frequency across cancer studies
  - Co-occurring mutations
  - Cancer type distribution

Phase 4: Therapeutic Associations (OpenTargets + ChEMBL + FDA + DrugBank)
  - FDA-approved targeted therapies
  - Clinical trial drugs (phase 2-3)
  - Drug mechanisms of action
  - Drug label information
  - Combination therapies

Phase 5: Resistance Mechanisms
  - Known resistance variants (CIViC, literature)
  - Bypass pathway analysis (Reactome)
  - Secondary mutations

Phase 6: Clinical Trials
  - Active trials recruiting for this mutation
  - Trial phase and status
  - Eligibility criteria

Phase 7: Prognostic Impact & Pathway Context
  - Survival associations (literature)
  - Pathway context (Reactome)
  - Expression data (GTEx)
  - Literature evidence (PubMed)

Phase 8: Report Synthesis
  - Executive summary
  - Clinical actionability score
  - Treatment recommendations (prioritized)
  - Completeness checklist

Phase 1: Gene Disambiguation & ID Resolution

阶段1:基因消歧与ID解析

Goal: Resolve gene symbol to all cross-database identifiers needed for downstream queries.
目标: 将基因符号解析为下游查询所需的跨数据库标识符。

1.1 MyGene ID Resolution (PRIMARY)

1.1 MyGene ID解析(主要方式)

python
def resolve_gene_ids(tu, gene_symbol):
    """Resolve gene symbol to Ensembl, Entrez, UniProt IDs."""
    result = tu.tools.MyGene_query_genes(query=gene_symbol, species='human')

    hits = result.get('hits', [])
    # Take the top hit where symbol matches exactly
    gene_hit = None
    for hit in hits:
        if hit.get('symbol', '').upper() == gene_symbol.upper():
            gene_hit = hit
            break
    if not gene_hit and hits:
        gene_hit = hits[0]

    ids = {
        'symbol': gene_hit.get('symbol'),
        'entrez_id': gene_hit.get('entrezgene'),
        'ensembl_id': gene_hit.get('ensembl', {}).get('gene'),
        'name': gene_hit.get('name'),
    }
    return ids
Response structure:
{took, total, max_score, hits: [{_id, _score, ensembl: {gene}, entrezgene, name, symbol}]}
python
def resolve_gene_ids(tu, gene_symbol):
    """Resolve gene symbol to Ensembl, Entrez, UniProt IDs."""
    result = tu.tools.MyGene_query_genes(query=gene_symbol, species='human')

    hits = result.get('hits', [])
    # Take the top hit where symbol matches exactly
    gene_hit = None
    for hit in hits:
        if hit.get('symbol', '').upper() == gene_symbol.upper():
            gene_hit = hit
            break
    if not gene_hit and hits:
        gene_hit = hits[0]

    ids = {
        'symbol': gene_hit.get('symbol'),
        'entrez_id': gene_hit.get('entrezgene'),
        'ensembl_id': gene_hit.get('ensembl', {}).get('gene'),
        'name': gene_hit.get('name'),
    }
    return ids
响应结构:
{took, total, max_score, hits: [{_id, _score, ensembl: {gene}, entrezgene, name, symbol}]}

1.2 UniProt Accession

1.2 UniProt登录号

python
def get_uniprot_id(tu, gene_symbol):
    """Get UniProt accession for gene."""
    result = tu.tools.UniProt_search(query=f'gene:{gene_symbol}', organism='human', limit=3)
    # Response: {total_results, returned, results: [{accession, id, protein_name, gene_names, organism, length}]}
    results = result.get('results', [])
    if results:
        return results[0].get('accession')
    return None
python
def get_uniprot_id(tu, gene_symbol):
    """Get UniProt accession for gene."""
    result = tu.tools.UniProt_search(query=f'gene:{gene_symbol}', organism='human', limit=3)
    # Response: {total_results, returned, results: [{accession, id, protein_name, gene_names, organism, length}]}
    results = result.get('results', [])
    if results:
        return results[0].get('accession')
    return None

1.3 OpenTargets Target Resolution

1.3 OpenTargets靶点解析

python
def get_opentargets_info(tu, gene_symbol):
    """Resolve gene to OpenTargets ensemblId and description."""
    result = tu.tools.OpenTargets_get_target_id_description_by_name(targetName=gene_symbol)
    # Response: {data: {search: {hits: [{id (ensemblId), name, description}]}}}
    hits = result.get('data', {}).get('search', {}).get('hits', [])
    # Match exact gene symbol
    for hit in hits:
        if hit.get('name', '').upper() == gene_symbol.upper():
            return hit
    return hits[0] if hits else None
python
def get_opentargets_info(tu, gene_symbol):
    """Resolve gene to OpenTargets ensemblId and description."""
    result = tu.tools.OpenTargets_get_target_id_description_by_name(targetName=gene_symbol)
    # Response: {data: {search: {hits: [{id (ensemblId), name, description}]}}}
    hits = result.get('data', {}).get('search', {}).get('hits', [])
    # Match exact gene symbol
    for hit in hits:
        if hit.get('name', '').upper() == gene_symbol.upper():
            return hit
    return hits[0] if hits else None

1.4 Cancer Type EFO Resolution (if cancer type provided)

1.4 癌症类型EFO解析(若提供癌症类型)

python
def resolve_cancer_type(tu, cancer_type):
    """Resolve cancer type to EFO ID for OpenTargets queries."""
    result = tu.tools.OpenTargets_get_disease_id_description_by_name(diseaseName=cancer_type)
    # Response: {data: {search: {hits: [{id (efoId), name, description}]}}}
    hits = result.get('data', {}).get('search', {}).get('hits', [])
    return hits[0] if hits else None
python
def resolve_cancer_type(tu, cancer_type):
    """Resolve cancer type to EFO ID for OpenTargets queries."""
    result = tu.tools.OpenTargets_get_disease_id_description_by_name(diseaseName=cancer_type)
    # Response: {data: {search: {hits: [{id (efoId), name, description}]}}}
    hits = result.get('data', {}).get('search', {}).get('hits', [])
    return hits[0] if hits else None

1.5 Gene Function Context

1.5 基因功能背景

python
def get_gene_function(tu, uniprot_accession):
    """Get protein function from UniProt.
    NOTE: Returns a list of function description strings, NOT a dict.
    """
    result = tu.tools.UniProt_get_function_by_accession(accession=uniprot_accession)
    # Response type: list of strings
    # Example: ["Receptor tyrosine kinase binding ligands of the EGF family...", ...]
    return result
python
def get_gene_function(tu, uniprot_accession):
    """Get protein function from UniProt.
    NOTE: Returns a list of function description strings, NOT a dict.
    """
    result = tu.tools.UniProt_get_function_by_accession(accession=uniprot_accession)
    # Response type: list of strings
    # Example: ["Receptor tyrosine kinase binding ligands of the EGF family...", ...]
    return result

1.6 CIViC Gene ID Resolution

1.6 CIViC基因ID解析

IMPORTANT: The
civic_search_genes
tool does NOT support name filtering in its GraphQL query. To find a gene in CIViC, either:
  1. Paginate through results (inefficient, genes sorted alphabetically)
  2. Use the Entrez ID from MyGene to construct a CIViC gene lookup
Workaround: Use
civic_search_genes
with
limit=100
and search the results client-side. For genes beyond alphabetical position ~100 (like EGFR, KRAS, TP53), you may need to use the CIViC gene ID if known from prior queries or documentation.
Known CIViC Gene IDs (for common cancer genes):
GeneCIViC Gene IDEntrez ID
BRAF5673
ABL1425
ALK1238
For other genes, the skill should attempt to find the gene through pagination or use alternative evidence sources (OpenTargets, cBioPortal) if CIViC lookup fails.

重要提示:
civic_search_genes
工具的GraphQL查询不支持名称过滤。要在CIViC中找到某个基因,可选择:
  1. 分页遍历结果(效率较低,基因按字母顺序排序)
  2. 使用MyGene获取的Entrez ID构建CIViC基因查询
替代方案: 使用
civic_search_genes
并设置
limit=100
,然后在客户端侧搜索结果。对于字母顺序在~100之后的基因(如EGFR、KRAS、TP53),若之前查询或文档中已知CIViC基因ID,可直接使用该ID。
已知常见癌症基因的CIViC基因ID:
基因CIViC基因IDEntrez ID
BRAF5673
ABL1425
ALK1238
对于其他基因,若CIViC查询失败,技能应尝试分页查找或使用替代证据来源(OpenTargets、cBioPortal)。

Phase 2: Clinical Variant Evidence (CIViC)

阶段2:临床变异证据(CIViC)

Goal: Get clinical interpretations for the specific variant.
目标: 获取特定变异的临床解读。

2.1 Get Gene Variants from CIViC

2.1 从CIViC获取基因变异

python
def get_civic_variants(tu, civic_gene_id):
    """Get all variants for a gene in CIViC."""
    result = tu.tools.civic_get_variants_by_gene(gene_id=civic_gene_id, limit=200)
    # Response: {data: {gene: {variants: {nodes: [{id, name}]}}}}
    variants = result.get('data', {}).get('gene', {}).get('variants', {}).get('nodes', [])
    return variants
python
def get_civic_variants(tu, civic_gene_id):
    """Get all variants for a gene in CIViC."""
    result = tu.tools.civic_get_variants_by_gene(gene_id=civic_gene_id, limit=200)
    # Response: {data: {gene: {variants: {nodes: [{id, name}]}}}}
    variants = result.get('data', {}).get('gene', {}).get('variants', {}).get('nodes', [])
    return variants

2.2 Match Specific Variant

2.2 匹配特定变异

python
def find_variant_in_civic(variants, variant_name):
    """Find the specific variant in CIViC results."""
    # Normalize variant name (remove 'p.' prefix if present)
    normalized = variant_name.replace('p.', '').strip()

    for v in variants:
        if v.get('name', '').upper() == normalized.upper():
            return v

    # Partial match (e.g., "L858" matches "L858R")
    for v in variants:
        if normalized.upper() in v.get('name', '').upper():
            return v

    return None
python
def find_variant_in_civic(variants, variant_name):
    """Find the specific variant in CIViC results."""
    # Normalize variant name (remove 'p.' prefix if present)
    normalized = variant_name.replace('p.', '').strip()

    for v in variants:
        if v.get('name', '').upper() == normalized.upper():
            return v

    # Partial match (e.g., "L858" matches "L858R")
    for v in variants:
        if normalized.upper() in v.get('name', '').upper():
            return v

    return None

2.3 Get Variant Details

2.3 获取变异详情

python
def get_variant_details(tu, variant_id):
    """Get detailed variant information from CIViC."""
    result = tu.tools.civic_get_variant(variant_id=variant_id)
    # Response: {data: {variant: {id, name}}}
    return result.get('data', {}).get('variant', {})
python
def get_variant_details(tu, variant_id):
    """Get detailed variant information from CIViC."""
    result = tu.tools.civic_get_variant(variant_id=variant_id)
    # Response: {data: {variant: {id, name}}}
    return result.get('data', {}).get('variant', {})

2.4 Get Molecular Profile Evidence

2.4 获取分子谱证据

python
def get_molecular_profile(tu, molecular_profile_id):
    """Get molecular profile details (for evidence items)."""
    result = tu.tools.civic_get_molecular_profile(molecular_profile_id=molecular_profile_id)
    # Response: {data: {molecularProfile: {id, name}}}
    return result.get('data', {}).get('molecularProfile', {})
python
def get_molecular_profile(tu, molecular_profile_id):
    """Get molecular profile details (for evidence items)."""
    result = tu.tools.civic_get_molecular_profile(molecular_profile_id=molecular_profile_id)
    # Response: {data: {molecularProfile: {id, name}}}
    return result.get('data', {}).get('molecularProfile', {})

2.5 CIViC Evidence Limitations and Fallback

2.5 CIViC证据局限性与替代方案

The current CIViC tools return limited field sets from GraphQL. If CIViC data is sparse:
Fallback to literature: Use PubMed to search for "{gene} {variant} clinical significance cancer" Fallback to OpenTargets: Use
OpenTargets_target_disease_evidence
for target-disease evidence
当前CIViC工具从GraphQL返回的字段集有限。若CIViC数据稀疏:
替代方案1:文献检索 使用PubMed搜索"{gene} {variant} clinical significance cancer" 替代方案2:OpenTargets 使用
OpenTargets_target_disease_evidence
获取靶点-疾病证据

Evidence Level Mapping

证据等级映射

CIViC LevelTierMeaningClinical Action
AT1 (highest)FDA-approved, guidelineStandard of care
BT2Clinical evidenceStrong recommendation
CT2Case studyConsider with caution
DT3PreclinicalResearch context only
ET4InferentialComputational evidence

CIViC等级层级含义临床行动
AT1(最高)FDA批准、指南推荐标准治疗方案
BT2临床证据强烈推荐
CT2病例报告谨慎考虑
DT3临床前研究仅用于研究场景
ET4推断性证据计算生物学证据

Phase 3: Mutation Prevalence (cBioPortal)

阶段3:突变发生率(cBioPortal)

Goal: Determine how common this mutation is across cancer types and studies.
目标: 确定该突变在不同癌症类型和研究中的发生频率。

3.1 Find Relevant Studies

3.1 查找相关研究

python
def find_cancer_studies(tu, cancer_keyword=None):
    """Find relevant cBioPortal studies."""
    result = tu.tools.cBioPortal_get_cancer_studies(limit=50)
    # Response: array of [{studyId, name, description, cancerTypeId, ...}]
    studies = result if isinstance(result, list) else result.get('data', [])

    if cancer_keyword:
        # Filter by cancer type keyword
        filtered = [s for s in studies
                    if cancer_keyword.lower() in str(s.get('name', '')).lower()
                    or cancer_keyword.lower() in str(s.get('cancerTypeId', '')).lower()]
        return filtered
    return studies
python
def find_cancer_studies(tu, cancer_keyword=None):
    """Find relevant cBioPortal studies."""
    result = tu.tools.cBioPortal_get_cancer_studies(limit=50)
    # Response: array of [{studyId, name, description, cancerTypeId, ...}]
    studies = result if isinstance(result, list) else result.get('data', [])

    if cancer_keyword:
        # Filter by cancer type keyword
        filtered = [s for s in studies
                    if cancer_keyword.lower() in str(s.get('name', '')).lower()
                    or cancer_keyword.lower() in str(s.get('cancerTypeId', '')).lower()]
        return filtered
    return studies

3.2 Get Mutation Data

3.2 获取突变数据

python
def get_mutation_prevalence(tu, gene_symbol, study_id):
    """Get mutation data for a gene in a specific study."""
    result = tu.tools.cBioPortal_get_mutations(study_id=study_id, gene_list=gene_symbol)
    # Response: {status: 'success', data: [{proteinChange, mutationType, sampleId, ...}]}
    # OR sometimes a plain list. Handle both formats:
    if isinstance(result, list):
        mutations = result
    elif isinstance(result, dict):
        mutations = result.get('data', []) if result.get('status') == 'success' else []
    else:
        mutations = []
    return mutations
python
def get_mutation_prevalence(tu, gene_symbol, study_id):
    """Get mutation data for a gene in a specific study."""
    result = tu.tools.cBioPortal_get_mutations(study_id=study_id, gene_list=gene_symbol)
    # Response: {status: 'success', data: [{proteinChange, mutationType, sampleId, ...}]}
    # OR sometimes a plain list. Handle both formats:
    if isinstance(result, list):
        mutations = result
    elif isinstance(result, dict):
        mutations = result.get('data', []) if result.get('status') == 'success' else []
    else:
        mutations = []
    return mutations

3.3 Analyze Mutation Distribution

3.3 分析突变分布

python
def analyze_mutation_distribution(mutations, target_variant):
    """Count how many samples have the target variant vs. others."""
    from collections import Counter

    protein_changes = [m.get('proteinChange', '') for m in mutations]
    counts = Counter(protein_changes)

    total_mutated = len(mutations)
    target_count = sum(1 for m in mutations
                       if target_variant.upper() in str(m.get('proteinChange', '')).upper())

    return {
        'total_mutated_samples': total_mutated,
        'target_variant_count': target_count,
        'target_variant_frequency': target_count / total_mutated if total_mutated > 0 else 0,
        'top_variants': counts.most_common(10),
    }
python
def analyze_mutation_distribution(mutations, target_variant):
    """Count how many samples have the target variant vs. others."""
    from collections import Counter

    protein_changes = [m.get('proteinChange', '') for m in mutations]
    counts = Counter(protein_changes)

    total_mutated = len(mutations)
    target_count = sum(1 for m in mutations
                       if target_variant.upper() in str(m.get('proteinChange', '')).upper())

    return {
        'total_mutated_samples': total_mutated,
        'target_variant_count': target_count,
        'target_variant_frequency': target_count / total_mutated if total_mutated > 0 else 0,
        'top_variants': counts.most_common(10),
    }

3.4 Key cBioPortal Studies for Common Cancer Types

3.4 常见癌症类型的关键cBioPortal研究

Cancer TypeStudy IDDescription
Lung adenocarcinomaluad_tcgaTCGA Lung Adenocarcinoma
Breast cancerbrca_tcgaTCGA Breast Cancer
Colorectal cancercoadread_tcgaTCGA Colorectal
Melanomaskcm_tcgaTCGA Melanoma
Pancreatic cancerpaad_tcgaTCGA Pancreatic
Glioblastomagbm_tcgaTCGA Glioblastoma
Prostate cancerprad_tcgaTCGA Prostate
Ovarian cancerov_tcgaTCGA Ovarian

癌症类型研究ID描述
肺腺癌luad_tcgaTCGA肺腺癌研究
乳腺癌brca_tcgaTCGA乳腺癌研究
结直肠癌coadread_tcgaTCGA结直肠癌研究
黑色素瘤skcm_tcgaTCGA黑色素瘤研究
胰腺癌paad_tcgaTCGA胰腺癌研究
胶质母细胞瘤gbm_tcgaTCGA胶质母细胞瘤研究
前列腺癌prad_tcgaTCGA前列腺癌研究
卵巢癌ov_tcgaTCGA卵巢癌研究

Phase 4: Therapeutic Associations

阶段4:治疗关联分析

Goal: Identify all available therapies -- approved, in trials, and experimental.
目标: 识别所有可用治疗方案——已批准、临床试验中及实验性疗法。

4.1 OpenTargets Drug-Target Associations (PRIMARY)

4.1 OpenTargets药物-靶点关联(主要方式)

python
def get_target_drugs(tu, ensembl_id, size=50):
    """Get all drugs associated with a target from OpenTargets."""
    result = tu.tools.OpenTargets_get_associated_drugs_by_target_ensemblID(
        ensemblId=ensembl_id, size=size
    )
    # Response: {data: {target: {id, approvedSymbol, knownDrugs: {count, rows: [
    #   {drug: {id, name, tradeNames, maximumClinicalTrialPhase, isApproved, hasBeenWithdrawn},
    #    phase, mechanismOfAction, disease: {id, name}}
    # ]}}}}

    drugs = result.get('data', {}).get('target', {}).get('knownDrugs', {})
    rows = drugs.get('rows', [])

    # Categorize
    approved = [r for r in rows if r.get('drug', {}).get('isApproved')]
    phase3 = [r for r in rows if r.get('phase') == 3 and not r.get('drug', {}).get('isApproved')]
    phase2 = [r for r in rows if r.get('phase') == 2]

    return {
        'total': drugs.get('count', 0),
        'approved': approved,
        'phase3': phase3,
        'phase2': phase2,
        'all_rows': rows
    }
python
def get_target_drugs(tu, ensembl_id, size=50):
    """Get all drugs associated with a target from OpenTargets."""
    result = tu.tools.OpenTargets_get_associated_drugs_by_target_ensemblID(
        ensemblId=ensembl_id, size=size
    )
    # Response: {data: {target: {id, approvedSymbol, knownDrugs: {count, rows: [
    #   {drug: {id, name, tradeNames, maximumClinicalTrialPhase, isApproved, hasBeenWithdrawn},
    #    phase, mechanismOfAction, disease: {id, name}}
    # ]}}}}

    drugs = result.get('data', {}).get('target', {}).get('knownDrugs', {})
    rows = drugs.get('rows', [])

    # Categorize
    approved = [r for r in rows if r.get('drug', {}).get('isApproved')]
    phase3 = [r for r in rows if r.get('phase') == 3 and not r.get('drug', {}).get('isApproved')]
    phase2 = [r for r in rows if r.get('phase') == 2]

    return {
        'total': drugs.get('count', 0),
        'approved': approved,
        'phase3': phase3,
        'phase2': phase2,
        'all_rows': rows
    }

4.2 OpenTargets Drug Mechanisms

4.2 OpenTargets药物作用机制

python
def get_drug_mechanism(tu, chembl_id):
    """Get mechanism of action for a drug."""
    result = tu.tools.OpenTargets_get_drug_mechanisms_of_action_by_chemblId(chemblId=chembl_id)
    return result
python
def get_drug_mechanism(tu, chembl_id):
    """Get mechanism of action for a drug."""
    result = tu.tools.OpenTargets_get_drug_mechanisms_of_action_by_chemblId(chemblId=chembl_id)
    return result

4.3 FDA Label Information

4.3 FDA标签信息

python
def get_fda_label(tu, drug_name):
    """Get FDA-approved indications and label info."""
    indications = tu.tools.FDA_get_indications_by_drug_name(drug_name=drug_name, limit=3)
    # Response: {meta: {skip, limit, total}, results: [{openfda.brand_name, openfda.generic_name, indications_and_usage}]}

    warnings = tu.tools.FDA_get_boxed_warning_info_by_drug_name(drug_name=drug_name, limit=3)

    moa = tu.tools.FDA_get_mechanism_of_action_by_drug_name(drug_name=drug_name, limit=3)

    return {
        'indications': indications,
        'warnings': warnings,
        'mechanism': moa
    }
python
def get_fda_label(tu, drug_name):
    """Get FDA-approved indications and label info."""
    indications = tu.tools.FDA_get_indications_by_drug_name(drug_name=drug_name, limit=3)
    # Response: {meta: {skip, limit, total}, results: [{openfda.brand_name, openfda.generic_name, indications_and_usage}]}

    warnings = tu.tools.FDA_get_boxed_warning_info_by_drug_name(drug_name=drug_name, limit=3)

    moa = tu.tools.FDA_get_mechanism_of_action_by_drug_name(drug_name=drug_name, limit=3)

    return {
        'indications': indications,
        'warnings': warnings,
        'mechanism': moa
    }

4.4 DrugBank Drug Information

4.4 DrugBank药物信息

python
def get_drugbank_info(tu, drug_name):
    """Get drug information from DrugBank."""
    result = tu.tools.drugbank_get_drug_basic_info_by_drug_name_or_id(
        query=drug_name, case_sensitive=False, exact_match=False, limit=3
    )
    # Response: {query, total_matches, total_returned_results, results: [{drug_name, drugbank_id, description, ...}]}
    return result
python
def get_drugbank_info(tu, drug_name):
    """Get drug information from DrugBank."""
    result = tu.tools.drugbank_get_drug_basic_info_by_drug_name_or_id(
        query=drug_name, case_sensitive=False, exact_match=False, limit=3
    )
    # Response: {query, total_matches, total_returned_results, results: [{drug_name, drugbank_id, description, ...}]}
    return result

4.5 ChEMBL Drug Mechanism

4.5 ChEMBL药物作用机制

python
def get_chembl_mechanism(tu, chembl_drug_id):
    """Get drug mechanism from ChEMBL."""
    result = tu.tools.ChEMBL_get_drug_mechanisms(drug_chembl_id__exact=chembl_drug_id, limit=10)
    return result
python
def get_chembl_mechanism(tu, chembl_drug_id):
    """Get drug mechanism from ChEMBL."""
    result = tu.tools.ChEMBL_get_drug_mechanisms(drug_chembl_id__exact=chembl_drug_id, limit=10)
    return result

4.6 Disease-Specific Drug Filtering

4.6 疾病特异性药物过滤

When cancer type is provided, filter drugs by disease association:
python
def get_disease_specific_drugs(tu, efo_id, size=30):
    """Get drugs associated with a specific disease/cancer type."""
    result = tu.tools.OpenTargets_get_associated_drugs_by_disease_efoId(efoId=efo_id, size=size)
    return result
若提供癌症类型,按疾病关联过滤药物:
python
def get_disease_specific_drugs(tu, efo_id, size=30):
    """Get drugs associated with a specific disease/cancer type."""
    result = tu.tools.OpenTargets_get_associated_drugs_by_disease_efoId(efoId=efo_id, size=size)
    return result

4.7 Treatment Prioritization

4.7 治疗方案优先级

PriorityCriteriaTier
1st LineFDA-approved for exact indication + biomarkerT1
2nd LineFDA-approved for different indication, same biomarkerT1-T2
3rd LinePhase 3 clinical trial dataT2
4th LinePhase 1-2 data, off-label with evidenceT3
5th LinePreclinical or computational onlyT4

优先级标准层级
一线治疗FDA批准的精准适应症+生物标志物T1
二线治疗FDA批准的其他适应症、相同生物标志物T1-T2
三线治疗3期临床试验数据T2
四线治疗1-2期数据、有证据支持的超适应症使用T3
五线治疗仅存在临床前证据或基于通路的理论依据T4

Phase 5: Resistance Mechanisms

阶段5:耐药机制

Goal: Identify known resistance patterns and strategies to overcome them.
目标: 识别已知耐药模式及克服策略。

5.1 CIViC Resistance Evidence

5.1 CIViC耐药证据

Search CIViC for variants with resistance significance for the target gene. Get all variants and look for those with "Resistance" in the name or description.
在CIViC中搜索目标基因的耐药相关变异。获取所有变异并查找名称或描述中包含“Resistance”的变异。

5.2 Literature-Based Resistance Search

5.2 基于文献的耐药检索

python
def search_resistance_literature(tu, gene_symbol, drug_name):
    """Search PubMed for resistance mechanisms.
    NOTE: PubMed returns a plain list of article dicts, NOT {articles: [...]}.
    """
    result = tu.tools.PubMed_search_articles(
        query=f'"{gene_symbol}" AND "{drug_name}" AND resistance AND mechanism',
        limit=15,
        include_abstract=True
    )
    # Response: list of [{pmid, title, authors, journal, pub_date, doi, abstract, ...}]
    articles = result if isinstance(result, list) else result.get('articles', []) if isinstance(result, dict) else []
    return articles
python
def search_resistance_literature(tu, gene_symbol, drug_name):
    """Search PubMed for resistance mechanisms.
    NOTE: PubMed returns a plain list of article dicts, NOT {articles: [...]}.
    """
    result = tu.tools.PubMed_search_articles(
        query=f'"{gene_symbol}" AND "{drug_name}" AND resistance AND mechanism',
        limit=15,
        include_abstract=True
    )
    # Response: list of [{pmid, title, authors, journal, pub_date, doi, abstract, ...}]
    articles = result if isinstance(result, list) else result.get('articles', []) if isinstance(result, dict) else []
    return articles

5.3 Pathway-Based Bypass Resistance

5.3 基于通路的旁路耐药分析

python
def get_bypass_pathways(tu, uniprot_id):
    """Get pathways that could mediate bypass resistance."""
    result = tu.tools.Reactome_map_uniprot_to_pathways(id=uniprot_id)
    return result
python
def get_bypass_pathways(tu, uniprot_id):
    """Get pathways that could mediate bypass resistance."""
    result = tu.tools.Reactome_map_uniprot_to_pathways(id=uniprot_id)
    return result

5.4 Known Resistance Patterns (Reference)

5.4 已知耐药模式(参考)

Primary TargetPrimary DrugResistance MutationMechanismStrategy
EGFR L858RErlotinib/GefitinibT790MSteric hindranceOsimertinib (3rd-gen TKI)
EGFR T790MOsimertinibC797SCovalent bond loss4th-gen TKI trials
BRAF V600EVemurafenibSplice variantsParadoxical activationBRAF+MEK combination
ALK fusionCrizotinibL1196M, G1269AKinase domain mutationsAlectinib, Lorlatinib
KRAS G12CSotorasibY96D, R68SDrug binding lossKRAS G12C combo trials

主要靶点主要药物耐药突变机制应对策略
EGFR L858R厄洛替尼/吉非替尼T790M空间位阻奥希替尼(第三代TKI)
EGFR T790M奥希替尼C797S共价键丢失第四代TKI临床试验
BRAF V600E维莫非尼剪接变异体悖论性激活BRAF+MEK联合治疗
ALK融合克唑替尼L1196M, G1269A激酶域突变阿来替尼、劳拉替尼
KRAS G12C索托拉西布Y96D, R68S药物结合丢失KRAS G12C联合治疗临床试验

Phase 6: Clinical Trials

阶段6:临床试验

Goal: Find actively recruiting clinical trials relevant to this mutation.
目标: 找到与该突变相关的正在招募的临床试验。

6.1 Search Strategy

6.1 检索策略

python
def find_clinical_trials(tu, gene_symbol, variant_name, cancer_type=None):
    """Find clinical trials for this mutation."""
    # Search 1: Gene + variant specific
    query1 = f'{gene_symbol} {variant_name}'
    result1 = tu.tools.search_clinical_trials(
        query_term=query1,
        condition=cancer_type or 'cancer',
        pageSize=20
    )

    # Search 2: Gene + targeted therapy
    result2 = tu.tools.search_clinical_trials(
        query_term=f'{gene_symbol} mutation',
        condition=cancer_type or 'cancer',
        pageSize=20
    )

    return {
        'variant_specific': result1,
        'gene_level': result2
    }
Response structure:
{studies: [{NCT ID, brief_title, brief_summary, overall_status, condition, phase}], nextPageToken, total_count}
python
def find_clinical_trials(tu, gene_symbol, variant_name, cancer_type=None):
    """Find clinical trials for this mutation."""
    # Search 1: Gene + variant specific
    query1 = f'{gene_symbol} {variant_name}'
    result1 = tu.tools.search_clinical_trials(
        query_term=query1,
        condition=cancer_type or 'cancer',
        pageSize=20
    )

    # Search 2: Gene + targeted therapy
    result2 = tu.tools.search_clinical_trials(
        query_term=f'{gene_symbol} mutation',
        condition=cancer_type or 'cancer',
        pageSize=20
    )

    return {
        'variant_specific': result1,
        'gene_level': result2
    }
响应结构:
{studies: [{NCT ID, brief_title, brief_summary, overall_status, condition, phase}], nextPageToken, total_count}

6.2 Trial Filtering

6.2 临床试验过滤

Prioritize trials that:
  1. Are RECRUITING or NOT_YET_RECRUITING status
  2. Match the specific variant (not just gene)
  3. Are Phase 2 or 3 (closer to approval)
  4. Have the right cancer type
优先选择以下临床试验:
  1. 状态为RECRUITING(招募中)或NOT_YET_RECRUITING(尚未招募)
  2. 匹配特定变异(而非仅基因)
  3. 处于2期或3期(更接近获批)
  4. 符合癌症类型

6.3 Trial Output Format

6.3 临床试验输出格式

markdown
| NCT ID | Phase | Agent(s) | Status | Cancer Type | Biomarker |
|--------|-------|----------|--------|-------------|-----------|

markdown
| NCT ID | 阶段 | 治疗药物 | 状态 | 癌症类型 | 生物标志物 |
|--------|-------|----------|--------|-------------|-----------|

Phase 7: Prognostic Impact & Pathway Context

阶段7:预后影响与通路背景

Goal: Assess the variant's impact on prognosis and biological context.
目标: 评估变异对预后的影响及生物学背景。

7.1 Literature Evidence

7.1 文献证据

python
def get_prognostic_literature(tu, gene_symbol, variant_name, cancer_type=None):
    """Search for prognostic associations."""
    query = f'"{gene_symbol}" "{variant_name}" prognosis survival'
    if cancer_type:
        query += f' "{cancer_type}"'

    result = tu.tools.PubMed_search_articles(query=query, limit=10, include_abstract=True)
    return result
python
def get_prognostic_literature(tu, gene_symbol, variant_name, cancer_type=None):
    """Search for prognostic associations."""
    query = f'"{gene_symbol}" "{variant_name}" prognosis survival'
    if cancer_type:
        query += f' "{cancer_type}"'

    result = tu.tools.PubMed_search_articles(query=query, limit=10, include_abstract=True)
    return result

7.2 Pathway Context (Reactome)

7.2 通路背景(Reactome)

python
def get_pathway_context(tu, uniprot_id):
    """Get pathway context from Reactome."""
    result = tu.tools.Reactome_map_uniprot_to_pathways(id=uniprot_id)
    return result
python
def get_pathway_context(tu, uniprot_id):
    """Get pathway context from Reactome."""
    result = tu.tools.Reactome_map_uniprot_to_pathways(id=uniprot_id)
    return result

7.3 Gene Expression (GTEx)

7.3 基因表达(GTEx)

python
def get_expression_context(tu, ensembl_id):
    """Get tissue expression data from GTEx."""
    # GTEx needs versioned ID. IMPORTANT: ensembl_lookup_gene requires species parameter.
    gene_info = tu.tools.ensembl_lookup_gene(gene_id=ensembl_id, species='homo_sapiens')
    # Response: {status: 'success', data: {id, version, display_name, ...}}
    data = gene_info.get('data', gene_info) if isinstance(gene_info, dict) else {}
    version = data.get('version', 1)
    versioned_id = f"{ensembl_id}.{version}"

    result = tu.tools.GTEx_get_median_gene_expression(
        gencode_id=versioned_id, operation='median'
    )
    return result
python
def get_expression_context(tu, ensembl_id):
    """Get tissue expression data from GTEx."""
    # GTEx needs versioned ID. IMPORTANT: ensembl_lookup_gene requires species parameter.
    gene_info = tu.tools.ensembl_lookup_gene(gene_id=ensembl_id, species='homo_sapiens')
    # Response: {status: 'success', data: {id, version, display_name, ...}}
    data = gene_info.get('data', gene_info) if isinstance(gene_info, dict) else {}
    version = data.get('version', 1)
    versioned_id = f"{ensembl_id}.{version}"

    result = tu.tools.GTEx_get_median_gene_expression(
        gencode_id=versioned_id, operation='median'
    )
    return result

7.4 UniProt Disease Variants

7.4 UniProt疾病相关变异

python
def get_known_disease_variants(tu, uniprot_accession):
    """Get known disease-associated variants from UniProt."""
    result = tu.tools.UniProt_get_disease_variants_by_accession(accession=uniprot_accession)
    return result

python
def get_known_disease_variants(tu, uniprot_accession):
    """Get known disease-associated variants from UniProt."""
    result = tu.tools.UniProt_get_disease_variants_by_accession(accession=uniprot_accession)
    return result

Phase 8: Report Synthesis

阶段8:报告合成

8.1 Report File Naming

8.1 报告文件命名

{GENE}_{VARIANT}_cancer_variant_report.md

Examples:
EGFR_L858R_cancer_variant_report.md
BRAF_V600E_cancer_variant_report.md
KRAS_G12C_cancer_variant_report.md
{GENE}_{VARIANT}_cancer_variant_report.md

示例:
EGFR_L858R_cancer_variant_report.md
BRAF_V600E_cancer_variant_report.md
KRAS_G12C_cancer_variant_report.md

8.2 Report Template

8.2 报告模板

markdown
undefined
markdown
undefined

Cancer Variant Interpretation Report: {GENE} {VARIANT}

癌症变异解读报告: {GENE} {VARIANT}

Date: {date} Cancer Type: {cancer_type or "Not specified"}

日期: {date} 癌症类型: {cancer_type or "未指定"}

Executive Summary

执行摘要

{1-2 sentences summarizing the key finding and top recommendation}
Clinical Actionability: {Score: HIGH / MODERATE / LOW / UNKNOWN}

{1-2句话总结关键发现及首要推荐方案}
临床可操作性评分: {评分: HIGH / MODERATE / LOW / UNKNOWN}

1. Gene & Variant Overview

1. 基因与变异概述

FieldValue
Gene Symbol{symbol}
Full Name{name}
Ensembl ID{ensembl_id}
UniProt{uniprot_accession}
Entrez ID{entrez_id}
Variant{variant_notation}
Protein Function{function_summary}
字段数值
基因符号{symbol}
全称{name}
Ensembl ID{ensembl_id}
UniProt登录号{uniprot_accession}
Entrez ID{entrez_id}
变异{variant_notation}
蛋白功能{function_summary}

2. Clinical Variant Evidence

2. 临床变异证据

2.1 CIViC Clinical Interpretations

2.1 CIViC临床解读

Evidence TypeDescriptionLevelClinical Significance
............
证据类型描述等级临床意义
............

2.2 Evidence Summary

2.2 证据摘要

{Summary of clinical evidence from CIViC and other sources}
Source: CIViC via civic_get_variants_by_gene, civic_get_variant
{总结CIViC及其他来源的临床证据}
来源: CIViC via civic_get_variants_by_gene, civic_get_variant

3. Mutation Prevalence

3. 突变发生率

3.1 Frequency Across Cancer Types (cBioPortal)

3.1 不同癌症类型中的发生频率(cBioPortal)

StudyCancer TypeTotal MutatedThis VariantFrequency
...............
研究癌症类型总突变样本数该变异样本数频率
...............

3.2 Co-occurring Mutations

3.2 共突变情况

{Top co-occurring mutations from cBioPortal data}
Source: cBioPortal via cBioPortal_get_mutations
{cBioPortal数据中的主要共突变}
来源: cBioPortal via cBioPortal_get_mutations

4. Therapeutic Options

4. 治疗方案

4.1 FDA-Approved Therapies (T1 Evidence)

4.1 FDA批准疗法(T1证据)

DrugTrade NameIndicationMechanismPhase
...............
药物商品名适应症作用机制阶段
...............

4.2 Clinical Trial Drugs (T2-T3 Evidence)

4.2 临床试验药物(T2-T3证据)

DrugChEMBL IDPhaseMechanismDisease
...............
药物ChEMBL ID阶段作用机制疾病
...............

4.3 Drug Details

4.3 药物详情

{For each recommended drug: mechanism of action, FDA label info, dosing, warnings}
Sources: OpenTargets, FDA, DrugBank, ChEMBL
{针对每个推荐药物:作用机制、FDA标签信息、给药方案、警告}
来源: OpenTargets, FDA, DrugBank, ChEMBL

5. Resistance Mechanisms

5. 耐药机制

5.1 Known Resistance Patterns

5.1 已知耐药模式

Resistance MutationDrug AffectedMechanismStrategy to Overcome
............
耐药突变受影响药物机制应对策略
............

5.2 Bypass Pathways

5.2 旁路通路

{Pathway analysis showing potential bypass resistance routes}
Sources: CIViC, PubMed, Reactome
{通路分析显示的潜在旁路耐药途径}
来源: CIViC, PubMed, Reactome

6. Clinical Trials

6. 临床试验

6.1 Actively Recruiting Trials

6.1 正在招募的临床试验

NCT IDPhaseAgent(s)StatusBiomarker Required
...............
NCT ID阶段治疗药物状态所需生物标志物
...............

6.2 Trial Recommendations

6.2 临床试验推荐

{Specific trial recommendations based on patient's mutation and cancer type}
Source: ClinicalTrials.gov via search_clinical_trials
{基于患者突变及癌症类型的特定临床试验推荐}
来源: ClinicalTrials.gov via search_clinical_trials

7. Prognostic Impact

7. 预后影响

7.1 Survival Associations

7.1 生存关联

{Literature-based prognostic data}
{基于文献的预后数据}

7.2 Pathway Context

7.2 通路背景

{Pathway analysis and biological context}
{通路分析及生物学背景}

7.3 Expression Profile

7.3 表达谱

{Tissue expression data for the gene}
Sources: PubMed, Reactome, GTEx
{该基因的组织表达数据}
来源: PubMed, Reactome, GTEx

8. Evidence Grading Summary

8. 证据分级摘要

FindingEvidence TierSourceConfidence
...T1/T2/T3/T4...High/Moderate/Low

发现证据层级来源置信度
...T1/T2/T3/T4...High/Moderate/Low

Data Sources Queried

已查询的数据来源

SourceTool(s) UsedData Retrieved
MyGeneMyGene_query_genesGene IDs
UniProtUniProt_search, UniProt_get_function_by_accessionProtein function
OpenTargetsOpenTargets_get_associated_drugs_by_target_ensemblIDDrug associations
CIViCcivic_search_genes, civic_get_variants_by_geneClinical evidence
cBioPortalcBioPortal_get_mutationsMutation prevalence
FDAFDA_get_indications_by_drug_nameDrug labels
DrugBankdrugbank_get_drug_basic_info_by_drug_name_or_idDrug info
ChEMBLChEMBL_get_drug_mechanismsDrug mechanisms
ClinicalTrials.govsearch_clinical_trialsActive trials
PubMedPubMed_search_articlesLiterature evidence
ReactomeReactome_map_uniprot_to_pathwaysPathway context
GTExGTEx_get_median_gene_expressionExpression data

来源使用工具获取数据
MyGeneMyGene_query_genes基因ID
UniProtUniProt_search, UniProt_get_function_by_accession蛋白功能
OpenTargetsOpenTargets_get_associated_drugs_by_target_ensemblID药物关联
CIViCcivic_search_genes, civic_get_variants_by_gene临床证据
cBioPortalcBioPortal_get_mutations突变发生率
FDAFDA_get_indications_by_drug_name药物标签
DrugBankdrugbank_get_drug_basic_info_by_drug_name_or_id药物信息
ChEMBLChEMBL_get_drug_mechanisms药物作用机制
ClinicalTrials.govsearch_clinical_trials活跃临床试验
PubMedPubMed_search_articles文献证据
ReactomeReactome_map_uniprot_to_pathways通路背景
GTExGTEx_get_median_gene_expression表达数据

Completeness Checklist

完整性检查清单

  • Gene resolved to Ensembl, UniProt, and Entrez IDs
  • Clinical variant evidence queried (CIViC or alternative)
  • Mutation prevalence assessed (cBioPortal, at least 1 study)
  • At least 1 therapeutic option identified with evidence tier, OR documented as "no targeted therapy available"
  • FDA label information retrieved for recommended drugs
  • Resistance mechanisms assessed (known patterns + literature search)
  • At least 3 clinical trials listed, OR "no matching trials found"
  • Prognostic literature searched
  • Pathway context provided (Reactome)
  • Executive summary is actionable (says what to DO)
  • All recommendations have source citations
  • Evidence tiers assigned to all findings

---
  • 基因已解析为Ensembl、UniProt及Entrez ID
  • 已查询临床变异证据(CIViC或替代来源)
  • 已评估突变发生率(cBioPortal,至少1项研究)
  • 已识别至少1项带证据层级的治疗方案,或记录为“无靶向治疗可用”
  • 已获取推荐药物的FDA标签信息
  • 已评估耐药机制(已知模式+文献检索)
  • 已列出至少3项临床试验,或记录为“未找到匹配试验"
  • 已检索预后相关文献
  • 已提供通路背景(Reactome)
  • 执行摘要具备可操作性(明确说明应采取的行动)
  • 所有推荐方案均有来源引用
  • 所有发现均已分配证据层级

---

Evidence Grading System

证据分级系统

TierSymbolCriteriaExamples
T1[T1]FDA-approved therapy, Level A CIViC evidence, phase 3 trialOsimertinib for EGFR T790M
T2[T2]Phase 2/3 clinical data, Level B CIViC evidenceCombination trial data
T3[T3]Preclinical data, Level D CIViC, case reportsNovel mechanisms, in vitro
T4[T4]Computational prediction, pathway inferenceDocking, pathway analysis

层级符号标准示例
T1[T1]FDA批准疗法、CIViC A级证据、3期临床试验奥希替尼用于EGFR T790M
T2[T2]2/3期临床数据、CIViC B级证据联合治疗试验数据
T3[T3]临床前数据、CIViC D级证据、病例报告新型机制、体外研究
T4[T4]计算预测、通路推断分子对接、通路分析

Clinical Actionability Scoring

临床可操作性评分

ScoreCriteria
HIGHFDA-approved targeted therapy exists for this exact mutation + cancer type
MODERATEApproved therapy exists for different cancer type with same mutation, OR phase 2-3 trial data
LOWOnly preclinical evidence or pathway-based rationale
UNKNOWNInsufficient data to assess actionability

评分标准
HIGH针对该精确突变+癌症类型存在FDA批准的靶向治疗
MODERATE针对不同癌症类型但相同突变存在批准疗法,或有2-3期临床试验数据
LOW仅存在临床前证据或基于通路的理论依据
UNKNOWN数据不足,无法评估可操作性

Fallback Chains

替代方案链

Primary ToolFallbackUse When
CIViC variant lookupPubMed literature searchGene not found in CIViC (search doesn't filter)
OpenTargets drugsChEMBL drug searchNo OpenTargets drug hits
FDA indicationsDrugBank drug infoDrug not in FDA database
cBioPortal TCGA studycBioPortal pan-cancerSpecific cancer study not available
GTEx expressionEnsembl gene lookupGTEx returns empty
Reactome pathwaysUniProt functionPathway mapping fails

主要工具替代工具使用场景
CIViC变异查询PubMed文献检索CIViC中未找到该基因(检索无过滤功能)
OpenTargets药物查询ChEMBL药物检索OpenTargets无药物结果
FDA适应症查询DrugBank药物信息药物未收录于FDA数据库
cBioPortal TCGA研究cBioPortal泛癌研究特定癌症研究不可用
GTEx表达查询Ensembl基因查询GTEx返回空结果
Reactome通路查询UniProt功能查询通路映射失败

Tool Reference (Verified Parameters)

工具参考(已验证参数)

Gene Resolution

基因解析

ToolParametersResponse Key Fields
MyGene_query_genes
query
(required),
species
hits[].symbol
,
hits[].ensembl.gene
,
hits[].entrezgene
UniProt_search
query
(required),
organism
,
limit
results[].accession
,
results[].gene_names
OpenTargets_get_target_id_description_by_name
targetName
(required)
data.search.hits[].id
(ensemblId)
ensembl_lookup_gene
gene_id
(required),
species
(REQUIRED: 'homo_sapiens')
data.id
,
data.display_name
,
data.version
工具参数响应关键字段
MyGene_query_genes
query
(必填),
species
hits[].symbol
,
hits[].ensembl.gene
,
hits[].entrezgene
UniProt_search
query
(必填),
organism
,
limit
results[].accession
,
results[].gene_names
OpenTargets_get_target_id_description_by_name
targetName
(必填)
data.search.hits[].id
(ensemblId)
ensembl_lookup_gene
gene_id
(必填),
species
(必填: 'homo_sapiens')
data.id
,
data.display_name
,
data.version

Clinical Evidence

临床证据

ToolParametersResponse Key Fields
civic_search_genes
query
,
limit
data.genes.nodes[].id
,
.name
,
.entrezId
civic_get_variants_by_gene
gene_id
(required, CIViC numeric),
limit
data.gene.variants.nodes[].id
,
.name
civic_get_variant
variant_id
(required)
data.variant.id
,
.name
civic_get_molecular_profile
molecular_profile_id
(required)
data.molecularProfile.id
,
.name
工具参数响应关键字段
civic_search_genes
query
,
limit
data.genes.nodes[].id
,
.name
,
.entrezId
civic_get_variants_by_gene
gene_id
(必填,CIViC数值ID),
limit
data.gene.variants.nodes[].id
,
.name
civic_get_variant
variant_id
(必填)
data.variant.id
,
.name
civic_get_molecular_profile
molecular_profile_id
(必填)
data.molecularProfile.id
,
.name

Mutation Prevalence

突变发生率

ToolParametersResponse Key Fields
cBioPortal_get_mutations
study_id
,
gene_list
data[].proteinChange
,
.mutationType
,
.sampleId
(wrapped in
{status, data}
)
cBioPortal_get_cancer_studies
limit
[].studyId
,
.name
,
.cancerTypeId
cBioPortal_get_molecular_profiles
study_id
(required)
[].molecularProfileId
,
.molecularAlterationType
工具参数响应关键字段
cBioPortal_get_mutations
study_id
,
gene_list
data[].proteinChange
,
.mutationType
,
.sampleId
(包裹于
{status, data}
cBioPortal_get_cancer_studies
limit
[].studyId
,
.name
,
.cancerTypeId
cBioPortal_get_molecular_profiles
study_id
(必填)
[].molecularProfileId
,
.molecularAlterationType

Drug Information

药物信息

ToolParametersResponse Key Fields
OpenTargets_get_associated_drugs_by_target_ensemblID
ensemblId
(required),
size
data.target.knownDrugs.rows[].drug.name
,
.isApproved
,
.mechanismOfAction
OpenTargets_get_drug_chembId_by_generic_name
drugName
(required)
data.search.hits[].id
(ChEMBL ID),
.name
FDA_get_indications_by_drug_name
drug_name
,
limit
results[].indications_and_usage
,
.openfda.brand_name
FDA_get_mechanism_of_action_by_drug_name
drug_name
,
limit
results[].mechanism_of_action
FDA_get_boxed_warning_info_by_drug_name
drug_name
,
limit
results[].boxed_warning
drugbank_get_drug_basic_info_by_drug_name_or_id
query
,
case_sensitive
,
exact_match
,
limit
(ALL required)
results[].drug_name
,
.drugbank_id
,
.description
ChEMBL_get_drug_mechanisms
drug_chembl_id__exact
(required),
limit
data.mechanisms[]
drugbank_get_pharmacology_by_drug_name_or_drugbank_id
query
,
case_sensitive
,
exact_match
,
limit
(ALL required)
results[].pharmacology
工具参数响应关键字段
OpenTargets_get_associated_drugs_by_target_ensemblID
ensemblId
(必填),
size
data.target.knownDrugs.rows[].drug.name
,
.isApproved
,
.mechanismOfAction
OpenTargets_get_drug_chembId_by_generic_name
drugName
(必填)
data.search.hits[].id
(ChEMBL ID),
.name
FDA_get_indications_by_drug_name
drug_name
,
limit
results[].indications_and_usage
,
.openfda.brand_name
FDA_get_mechanism_of_action_by_drug_name
drug_name
,
limit
results[].mechanism_of_action
FDA_get_boxed_warning_info_by_drug_name
drug_name
,
limit
results[].boxed_warning
drugbank_get_drug_basic_info_by_drug_name_or_id
query
,
case_sensitive
,
exact_match
,
limit
(全部必填)
results[].drug_name
,
.drugbank_id
,
.description
ChEMBL_get_drug_mechanisms
drug_chembl_id__exact
(必填),
limit
data.mechanisms[]
drugbank_get_pharmacology_by_drug_name_or_drugbank_id
query
,
case_sensitive
,
exact_match
,
limit
(全部必填)
results[].pharmacology

Clinical Trials

临床试验

ToolParametersResponse Key Fields
search_clinical_trials
query_term
(required),
condition
,
intervention
,
pageSize
studies[].NCT ID
,
.brief_title
,
.overall_status
,
.phase
工具参数响应关键字段
search_clinical_trials
query_term
(必填),
condition
,
intervention
,
pageSize
studies[].NCT ID
,
.brief_title
,
.overall_status
,
.phase

Literature & Pathways

文献与通路

ToolParametersResponse Key Fields
PubMed_search_articles
query
(required),
limit
,
include_abstract
Returns list of
[{pmid, title, authors, journal, pub_date, doi, abstract}]
(NOT wrapped in dict)
Reactome_map_uniprot_to_pathways
id
(required, UniProt accession)
Pathway mappings
GTEx_get_median_gene_expression
gencode_id
(required),
operation="median"
Expression by tissue
UniProt_get_function_by_accession
accession
(required)
Protein function
UniProt_get_disease_variants_by_accession
accession
(required)
Disease variants

工具参数响应关键字段
PubMed_search_articles
query
(必填),
limit
,
include_abstract
返回列表格式的
[{pmid, title, authors, journal, pub_date, doi, abstract}]
(非字典包裹)
Reactome_map_uniprot_to_pathways
id
(必填,UniProt登录号)
通路映射结果
GTEx_get_median_gene_expression
gencode_id
(必填),
operation="median"
按组织分类的表达数据
UniProt_get_function_by_accession
accession
(必填)
蛋白功能
UniProt_get_disease_variants_by_accession
accession
(必填)
疾病相关变异

Common Use Cases

常见使用场景

Use Case 1: Oncologist Evaluating Treatment Options

使用场景1:肿瘤学家评估治疗方案

Input: "EGFR L858R in lung adenocarcinoma"
Expected Output: Report showing osimertinib as 1st-line [T1], with FDA label details, resistance pattern (T790M), clinical trials for combination therapies, and prognostic context.
输入: "EGFR L858R in lung adenocarcinoma"
预期输出: 报告显示奥希替尼为一线治疗[T1],包含FDA标签详情、耐药模式(T790M)、联合治疗临床试验及预后背景。

Use Case 2: Molecular Tumor Board Preparation

使用场景2:分子肿瘤委员会准备

Input: "BRAF V600E, colorectal cancer"
Expected Output: Report noting that BRAF V600E is actionable in melanoma but requires combination therapy in CRC (encorafenib + cetuximab), with different resistance patterns than melanoma.
输入: "BRAF V600E, colorectal cancer"
预期输出: 报告指出BRAF V600E在黑色素瘤中可作为治疗靶点,但在结直肠癌中需联合治疗(恩考芬尼+西妥昔单抗),且耐药模式与黑色素瘤不同。

Use Case 3: Clinical Trial Matching

使用场景3:临床试验匹配

Input: "KRAS G12C, any cancer type"
Expected Output: Report with sotorasib/adagrasib as approved options [T1], comprehensive trial listing for KRAS G12C inhibitors, resistance patterns (Y96D, etc.), and mutation prevalence across cancer types.
输入: "KRAS G12C, any cancer type"
预期输出: 报告显示索托拉西布/阿达格拉西布为已批准选项[T1],列出KRAS G12C抑制剂的全面临床试验、耐药模式(Y96D等)及不同癌症类型中的突变发生率。

Use Case 4: Resistance Mechanism Investigation

使用场景4:耐药机制调查

Input: "EGFR T790M after osimertinib failure"
Expected Output: Report focused on C797S resistance mutation, available 4th-generation TKI trials, amivantamab/lazertinib combinations, and bypass pathway mechanisms (MET amplification, HER2 activation).
输入: "EGFR T790M after osimertinib failure"
预期输出: 报告聚焦C797S耐药突变、可用的第四代TKI临床试验、阿米万他单抗/拉泽替尼联合疗法及旁路通路机制(MET扩增、HER2激活)。

Use Case 5: VUS Interpretation

使用场景5:意义未明变异(VUS)解读

Input: "PIK3CA E545K"
Expected Output: Report showing this is a known hotspot oncogenic mutation (not a VUS), with alpelisib as FDA-approved therapy for HR+/HER2- breast cancer, and prevalence data across cancer types.

输入: "PIK3CA E545K"
预期输出: 报告显示该变异为已知热点致癌突变(非VUS),阿培利西为HR+/HER2-乳腺癌的FDA批准疗法,及该变异在不同癌症类型中的发生率数据。

Quantified Minimums

最低要求量化

SectionRequirement
Gene IDsAt least Ensembl + UniProt resolved
Clinical evidenceCIViC queried + PubMed literature search
Mutation prevalenceAt least 1 cBioPortal study
Therapeutic optionsAll approved drugs listed (OpenTargets) + FDA label for top drugs
ResistanceLiterature search performed + known patterns documented
Clinical trialsAt least 1 search query executed
Prognostic impactPubMed literature search performed
Pathway contextReactome pathway mapping attempted

章节要求
基因ID至少解析出Ensembl + UniProt ID
临床证据已查询CIViC + PubMed文献检索
突变发生率至少查询1项cBioPortal研究
治疗方案列出所有已批准药物(OpenTargets) + 首要推荐药物的FDA标签
耐药性已执行文献检索 + 记录已知模式
临床试验已执行至少1项检索查询
预后影响已执行PubMed文献检索
通路背景已尝试Reactome通路映射

See Also

另请参阅

  • QUICK_START.md
    - Example usage and quick reference
  • TOOLS_REFERENCE.md
    - Detailed tool parameter reference
  • EXAMPLES.md
    - Complete example reports
  • QUICK_START.md
    - 示例用法及快速参考
  • TOOLS_REFERENCE.md
    - 详细工具参数参考
  • EXAMPLES.md
    - 完整示例报告