Boucle de preuves CF
Un chercheur ne commence pas par une réponse. Il parcourt un ensemble fixe de questions face aux archives publiques : ce qui a été publié, si quelque chose a été rétracté, ce qui est en essai, ce qui est approuvé et pour qui, combien de personnes cela concerne, ce que le domaine recommande, et ce que le domaine se dit à lui-même dans les subventions et les prépublications. Cette compétence donne à un agent cette boucle sous forme de ligne de commande, avec une règle : rien ne revient sans sa source, sa date, et ce qu'il n'établit pas.
Recherche, pas avis médical. Les enregistrements que cet outil renvoie décrivent des documents publics. Ils n'interprètent rien pour une personne, et le texte d'indication d'une étiquette n'est pas l'éligibilité d'un individu.
1. Ce que fait cette compétence
| Question | Commande | Source |
|---|---|---|
| Qu'est-ce qui a été publié sur ce sujet ? | pubmed "<terme>" [--sort pub_date] | PubMed via les E-utilities du NCBI |
| Que disent les revues systématiques et Cochrane ? | reviews "<terme>" | Sous-ensemble des revues systématiques de PubMed plus la revue Cochrane |
| Rechercher avec des métadonnées d'accès libre et de citations | epmc '<requête Europe PMC>' | Europe PMC |
| À quelle fréquence ce DOI est-il cité et est-il en accès libre ? | cited <DOI> | Europe PMC |
| Cet article a-t-il été rétracté ou corrigé ? | retractions <DOI> [<DOI> ...] | Crossref, données de Retraction Watch |
| Qu'est-ce que ce DOI ? | doi <DOI> | Crossref |
| Quand la FDA a-t-elle approuvé ce médicament pour la première fois ? | approval <MARQUE> | openFDA Drugs@FDA |
| Que dit l'étiquette américaine actuelle ? | label <MARQUE> [--sections ...] | Étiquette openFDA |
| Quand l'EMA a-t-elle autorisé ce médicament dans l'UE ? | ema <MÉDICAMENT> [--file CHEMIN] | Agence européenne des médicaments (rapport JSON téléchargé hors ligne) |
| Quels essais listent cette condition ? | trials "<condition>" [--term X] [--status RECRUTEMENT] | ClinicalTrials.gov v2 |
| Que contient le registre pour cet essai ? | trial <NCTId> | ClinicalTrials.gov v2 |
| Qu'est-ce que cette prépublication ? | `preprint <biorxiv | medrxiv> ` |
| Quelles prépublications sur la mucoviscidose sont apparues dans une fenêtre donnée ? | preprints <serveur> <AAAA-MM-JJ> <AAAA-MM-JJ> [--pattern] | bioRxiv / medRxiv |
| Comment ce variant est-il classifié ? | variants "<requête ClinVar>" | ClinVar via les E-utilities du NCBI |
| Qui le NIH finance-t-il sur ce sujet ? | grants "<texte>" [--fy 2025] | NIH RePORTER |
| Qui l'UKRI finance-t-il sur ce sujet ? | ukri "<requête>" [--limit 25] | UKRI Gateway to Research (alias : gtr) |
| Quel est le dénominateur de population pour une région ? | population <entité> [--variable Count_Person] [--année AAAA] | Google Data Commons |
| Annoter un variant avec CADD, ClinVar, SnpEff, fréquence gnomAD | myvariant "<requête variant>" [--limit 5] | MyVariant.info |
| Interroger les fréquences alléliques agrégées de gnomAD (refusé par conception) | gnomad <chrom-pos-ref-alt> | gnomAD (accès manuel uniquement ; toujours refusé par la politique du catalogue) |
| Que détient OpenAlex pour ce travail (citations, rétractation, OA) ? | `openalex <DOI | ID>` |
| Rechercher des travaux OpenAlex | openalex-search "<requête>" [--limit 10] | OpenAlex via OurResearch (clé requise) |
| Quels lieux d'accès libre et métadonnées de licence Unpaywall indexe-t-il ? | unpaywall <DOI> | Unpaywall via OurResearch |
| Quel graphe de citations et métadonnées d'article Semantic Scholar détient-il ? | s2 <DOI> | Semantic Scholar via Ai2 (alias : semantic-scholar) |
| Résoudre la piste complète de l'article (Crossref, OA Unpaywall, citations Semantic Scholar) | paper-trail <DOI> | Crossref, Unpaywall, Semantic Scholar (alias : paper) |
| Quelles métadonnées de composé, phase clinique et codes ATC ChEMBL détient-il ? | `chembl <CHEMBL_ID | nom> [--limit 5]` |
| Quels dosages de bioactivité quantitative (EC50, IC50, Ki, Kd) ChEMBL détient-il ? | `chembl-activity <CHEMBL_ID | nom> [--cible CHEMBL4051]` |
| Quels scores de tractabilité cible, de sécurité, de maladie, ou statistiques FAERS Open Targets détient-il ? | `opentargets <ID | requête> [--limit 5]` |
| Quels décomptes de citations de soutien, de contraste et de mention Scite détient-il pour ce DOI ? | scite <DOI> [--rest] | Scite Pro MCP (scite-mcp) ou REST public sans quota (--rest, scite-api) |
| Examiner jusqu'à 500 DOI par demande pour les décomptes de Smart Citations, rétractations et répartition par section, sans coût de quota | scite-batch <DOI...> [--papers] [--sections] | REST public Scite (POST /tallies, POST /papers, POST /tallies/cited-by-sections ; 0 coût de quota) |
| Comment les citations de ce DOI sont-elles réparties entre les sections Introduction, Méthodes, Résultats et Discussion ? | scite-sections <DOI> | REST public Scite (GET /tallies/cited-by-sections/{doi} + /tallies/{doi} ; 0 coût de quota) |
| Lire textuellement des extraits de texte intégral et des extraits de Smart Citation à l'intérieur d'un article spécifique | scite-excerpts <DOI> "<requête>" [--limit 5] | Scite Pro MCP Mode C (scite-mcp, mis en quarantaine dans <untrusted_data>) |
| Quels articles connexes Scite recommande-t-il à partir d'un DOI source ? | scite-recommend <DOI> [--limit 5] | REST partenaire Scite (GET /api_partner/recommend-papers/{doi}, limité par un bouclier REST de 650/mois) |
| Rechercher dans la littérature avec les décomptes de Smart Citations de Scite | scite-search "<requête>" [--limit 5] | Scite Pro MCP (scite-mcp, OAuth/clé requis) |
| Résoudre un PMID PubMed en DOI sans coût de quota | scite-pmid <PMID> | REST public Scite (GET /papers/resolve-pmid/{pmid}, 0 coût de quota) |
| Agréger les décomptes de Smart Citations sur jusqu'à 100 DOI, sans coût de quota | scite-aggregate <DOI...> | REST public Scite (POST /tallies/aggregate, 0 coût de quota) |
| Lister les publications citantes et les décomptes de citations rétractées pour un DOI cible, sans coût de quota | scite-sources <DOI> [--limit 5] | REST public Scite (GET /papers/sources/{target_doi}, 0 coût de quota) |
| Explorer le réseau de citations à 1 saut avec classification d'intention et extraits mis en quarantaine | scite-graph <DOI> [--direction both] [--limit 5] | Scite Pro MCP (citation_graph, mis en quarantaine dans <untrusted_data>) |
| Lire le texte intégral paginé par DOI ou PMID | `scite-fulltext <DOI | PMID> [--offset 0] [--length 8000]` |
| Rechercher dans les ensembles de données Scite Evidence (MHRA Royaume-Uni, Brevets, 510(k), MAUDE, FAERS, Subventions, Médicaments, Essais) | scite-evidence <dataset> "<requête>" [--filter F] [--page 1] | Scite Pro MCP (search_mhra, search_patents, search_510k_summaries, etc., mis en quarantaine dans <untrusted_data>) |
| Normaliser les coordonnées de variant HGVS ou SPDI | `ncbi-variation <HGVS | SPDI>` |
| Consulter la séquence protéique, les limites des domaines et les variants naturels d'UniProtKB | `uniprot <ACCESSION | requête> [--limit 5]` |
| Consulter les coordonnées génomiques, transcrits canoniques ou conséquences rsID d'Ensembl | `ensembl <rsID | ENSG |
| Rechercher dans les étiquettes de produits structurés (SPL) de NLM DailyMed par nom de médicament | dailymed <MÉDICAMENT> [--limit 5] | Services web RESTful DailyMed v2 (dailymed-web-services) |
| Lire les conditions d'utilisation ou la page juridique avant une entrée de catalogue | read-page <HTTPS_URL> [--out FICHIER] [--max-chars N] | Lecture, initiée par un humain, de pages de conditions/politiques ou de PDF sous les règles de conduite du labo |
| Consulter de manière déterministe l'exon CFTR RefSeq NM_000492.4 et le contexte du domaine Uniprot P13569 | `cftr-context <variant | codon>` |
| Consulter de manière déterministe la marque de modulateur CFTR, l'API, le code moléculaire, la NDA et le contexte de sécurité de l'avertissement encadré de l'étiquette SPL openFDA | `cftr-modulator <marque | code |
| Consulter de manière déterministe les métadonnées de la structure de coordonnées Cryo-EM de CFTR | cftr-structure <pdb_id> [--list] | Résolution structurelle Cryo-EM CFTR déterministe sans réseau, ligands, conformation et référence (alias : cftr-pdb) |
| Que cet outil peut-il atteindre ? | sources | le catalogue |
| Que disent plusieurs sources à propos d'un médicament, d'un variant ou d'un essai ? | brief drug <MARQUE>, brief variant "<requête ClinVar>", brief trial <NCTId> | les sources ci-dessus, recoupées (voir Briefs) |
| Est-ce que chaque DOI, PMID et id d'essai de cette note existe ? | cite-check <FICHIER> [--max-ids 30] [--scite-bulk] | Crossref, PubMed, ClinicalTrials.gov, plus pré-vérification en volume Scite facultative sans quota (voir Cite-check) |
Ce que le code client refuse de faire : atteindre un hôte non autorisé dans catalog.yaml (une redirection n'est jamais suivie dans les requêtes de données API) ; se présenter comme un navigateur ; ignorer les vérifications de certificat ; réessayer après un refus. Pour la lecture des conditions pré-catalogue, read-page applique la conduite réseau stricte du labo : HTTPS uniquement, robots.txt d'abord via robots_allows, délai d'exploration respecté, refus/robots illisible annule la récupération, redirections HTTPS vers le même site revérifiées par rapport aux robots, vérification de certificat activée, limite de 5 Mo de corps, requête unique. Il n'a pas besoin d'entrée de catalogue car il existe spécifiquement pour une lecture initiée par un humain de pages de conditions avant qu'une entrée de catalogue n'existe, et non pour l'extraction de données. Le package n'appelle jamais non plus de modèle de langage et n'interroge aucune source contenant des données individuelles.
2. Lancer
pip install -r scripts/requirements.txt
python scripts/evidence_cli.py retractions 10.1038/ng.2745
python scripts/evidence_cli.py approu TF TRIKAFTA
python scripts/evidence_cli.py variants "CFTR[gene] AND F508del" --limit 5
python scripts/evidence_cli.py population country/USA
python scripts/evidence_cli.py cftr-context "F508del"
python scripts/evidence_cli.py cftr-context "621+1G->T" --json
python scripts/evidence_cli.py cftr-context "711+1G->T"
python scripts/evidence_cli.py cftr-modulator "Trikafta"
python scripts/evidence_cli.py cftr-modulator "VX-121" --json
python scripts/evidence_cli.py cftr-structure "8EIQ"
python scripts/evidence_cli.py cftr-structure "8EIZ"
python scripts/evidence_cli.py cftr-structure "7SV7"
python scripts/evidence_cli.py cftr-structure "7SVR"
python scripts/evidence_cli.py cftr-structure "6O2P"
python scripts/evidence_cli.py cftr-pdb --list
Indicateurs sur chaque commande : --json pour un objet JSON par enregistrement, --ledger CHEMIN pour ajouter des enregistrements à un registre de preuves JSONL. Code de sortie 0 quand chaque enregistrement est found ou not_found ; 3 quand l'un d'eux est blocked, rate_limited ou error.
Briefs
Un brief pose une question à plusieurs sources via le même client, de sorte que la porte du catalogue, le rythme, le budget et le coupe-circuit s'appliquent toujours. Il imprime chaque enregistrement que chaque source a renvoyé, le statut de chaque source, les champs qu'il a comparés, et un court bloc de recoupements.
| Recette | Exécute | Recoupements |
|---|---|---|
brief drug TRIKAFTA | approval, label, trials par terme (5), pubmed pour la marque (5) | statut de chaque source ; que l'année de la date d'effet de l'étiquette n'est pas antérieure à l'année de la première approbation Drugs@FDA ; analyse de la littérature et des rétractations OpenAlex ; limite de sécurité du modulateur CFTR (AH-4) et recoupement PDB primaire |
brief variant "CFTR[gene] AND F508del" | variants, pubmed pour le même terme (5) | statut de chaque source ; combien d'enregistrements ClinVar correspondent, avec classification et statut de révision pour chacun |
brief trial NCT05033080 | trial, pubmed pour l'identifiant NCT (5) | statut de chaque source ; l'identifiant de l'enregistrement du registre ; quels articles renvoyés nomment l'essai dans leur titre |
Comment lire les recoupements :
PASS: les valeurs concordent, ou la source a répondu. Ce n'est pas une conclusion sur le médicament, le variant ou l'essai.CHECK: une personne devrait regarder. Une source n'a pas répondu ; plusieurs enregistrements ClinVar correspondent (tous sont listés, aucun n'est choisi) ; ou la date d'effet de l'étiquette est antérieure à la première approbation du médicament, ce qui ne peut pas être correct, donc l'un des deux enregistrements est incohérent. La date d'effet d'une étiquette est sa révision la plus récente, donc une année d'étiquette égale ou postérieure à l'année d'approbation est attendue et estPASS.NOT STATED: une source n'a pas donné la valeur, donc rien n'a été comparé. Les enregistrements PubMed ne contiennent ni résumé ni texte intégral, donc un article qui ne nomme pas l'essai dans son titre estNOT STATED, pas "ne le mentionne pas".
Ce qu'un brief ne fait pas : il n'ajoute aucun fait de son cru. Chaque valeur qu'il imprime est copiée d'un champ d'enregistrement ou est un décompte étiqueté ou un écart d'année, et une valeur manquante s'imprime comme not stated. Une source bloquée, limitée en débit ou en échec n'arrête pas les autres sources ; elle est listée avec son statut et le code de sortie est 3. Avec --json, les enregistrements viennent d'abord et un dernier objet, {"brief": ...}, contient les sources, les champs, les recoupements et le pied de page ; --ledger stocke uniquement les enregistrements. Chaque brief se termine par : Recherche, pas avis médical. Un brief liste des documents publics ; il n'interprète rien pour une personne.
Vérification des citations (Cite-check)
Chaque citation passe par l'enregistrement de preuve, et une citation qui ne peut pas être résolue est supprimée ou corrigée à partir d'une source, jamais réparée de mémoire. cite-check FICHIER l'applique à une note entière. Il trouve chaque DOI, chaque identifiant PubMed écrit comme PMID 123, PMID: 123 ou une URL pubmed/123, et chaque identifiant NCT, supprime les doublons (en gardant la ligne de la première occurrence), et recherche chacun avec le code de recherche unique : doi pour un DOI, une recherche PubMed sur le champ [pmid] pour un PMID (deux requêtes), trial pour un identifiant NCT. Le client habituel s'applique : porte du catalogue, rythme, budget, coupe-circuit, comptabilité.
| Ligne | Signification |
|---|---|
PASS | La source a renvoyé un enregistrement ; son titre et son année ou ses dates sont imprimés, not stated quand absents |
NOT FOUND | La source a répondu qu'il n'y a pas d'identifiant de ce type. Supprimez-le ou corrigez-le à partir d'une source ; ne devinez jamais |
UNRESOLVED | La recherche a été bloquée, limitée en débit ou a échoué. Non résolu n'est pas la même chose qu'inexistant |
TITLE PASS / TITLE CHECK | Une phrase entre guillemets ou en italique de quatre mots ou plus sur la même ligne partage au moins 0,6 (ou moins) des mots du côté le plus court avec le titre de l'enregistrement, sans tenir compte de la casse, de la punc… |
…[tronqué pour la traduction]