CF 증거 순환 고리 (Evidence Loop)
연구자는 답변으로 시작하지 않습니다. 그들은 공개 기록에 대해 정해진 질문들을 하나씩 확인합니다: 무엇이 출판되었는지, 그중 철회된 것은 없는지, 임상시험 중인 것은 무엇인지, 승인된 약물과 그 대상은 무엇인지, 그 질환이 얼마나 많은 사람과 관련 있는지, 학계가 무엇을 권장하는지, 그리고 보조금과 사전 인쇄본을 통해 학계가 스스로에게 무엇을 말하고 있는지. 이 스킬은 에이전트에게 이러한 순환 고리를 명령줄로 제공하며, 한 가지 규칙이 있습니다: 출처, 날짜, 그리고 확립되지 않은 사항 없이는 어떤 것도 반환되지 않습니다.
연구 지원이지 의학적 조언이 아닙니다. 이 도구가 반환하는 기록은 공개 문서를 설명합니다. 개인을 위해 어떤 것도 해석하지 않으며, 라벨의 적응증 텍스트는 개인의 자격을 나타내지 않습니다.
1. 이 스킬이 하는 일
| 질문 | 명령어 | 출처 |
|---|---|---|
| 이 주제에 대해 출판된 것은 무엇인가? | pubmed "<term>" [--sort pub_date] | NCBI E-utilities를 통한 PubMed |
| 체계적 리뷰와 Cochrane에서는 무엇을 말하는가? | reviews "<term>" | PubMed 체계적 리뷰 하위 집합 + Cochrane 저널 |
| 오픈 액세스 및 인용 메타데이터로 검색 | epmc '<Europe PMC query>' | Europe PMC |
| 이 DOI는 얼마나 인용되었으며 오픈 액세스인가? | cited <DOI> | Europe PMC |
| 이 논문이 철회 또는 수정되었는가? | retractions <DOI> [<DOI> ...] | Crossref, Retraction Watch 데이터 |
| 이 DOI는 무엇인가? | doi <DOI> | Crossref |
| FDA가 이 약을 처음 승인한 것은 언제인가? | approval <BRAND> | openFDA Drugs@FDA |
| 현재 미국 라벨에는 무엇이라고 명시되어 있는가? | label <BRAND> [--sections ...] | openFDA 라벨 |
| EMA가 이 의약품을 EU에서 승인한 것은 언제인가? | ema <DRUG> [--file PATH] | 유럽 의약품청 (오프라인 다운로드 JSON 보고서) |
| 이 질환을 포함하는 임상시험은 무엇인가? | trials "<condition>" [--term X] [--status RECRUITING] | ClinicalTrials.gov v2 |
| 등록소가 이 임상시험에 대해 보유한 정보는 무엇인가? | trial <NCTId> | ClinicalTrials.gov v2 |
| 이 사전 인쇄본은 무엇인가? | `preprint <biorxiv | medrxiv> ` |
| 특정 기간 내에 나타난 CF 사전 인쇄본은 무엇인가? | preprints <server> <YYYY-MM-DD> <YYYY-MM-DD> [--pattern] | bioRxiv / medRxiv |
| 이 변이는 어떻게 분류되는가? | variants "<ClinVar query>" | NCBI E-utilities를 통한 ClinVar |
| NIH는 이 주제에 누구에게 자금을 지원하는가? | grants "<text>" [--fy 2025] | NIH RePORTER |
| UKRI는 이 주제에 누구에게 자금을 지원하는가? | ukri "<query>" [--limit 25] | UKRI Gateway to Research (별칭: gtr) |
| 지역의 인구 분모는 얼마인가? | population <entity> [--variable Count_Person] [--year YYYY] | Google Data Commons |
| CADD, ClinVar, SnpEff, gnomAD 빈도로 변이 주석 달기 | myvariant "<variant query>" [--limit 5] | MyVariant.info |
| gnomAD 집단 대립유전자 빈도 질의 (설계상 거부됨) | gnomad <chrom-pos-ref-alt> | gnomAD (수동 접근만 가능; 카탈로그 정책에 의해 항상 거부됨) |
| OpenAlex가 이 작업에 대해 보유한 정보는 무엇인가 (인용, 철회, OA)? | `openalex <DOI | ID>` |
| OpenAlex 작품 검색 | openalex-search "<query>" [--limit 10] | OurResearch를 통한 OpenAlex (키 필요) |
| Unpaywall이 색인한 오픈 액세스 위치 및 라이선스 메타데이터는 무엇인가? | unpaywall <DOI> | OurResearch를 통한 Unpaywall |
| Semantic Scholar가 보유한 인용 그래프 및 논문 메타데이터는 무엇인가? | s2 <DOI> | Ai2를 통한 Semantic Scholar (별칭: semantic-scholar) |
| 전체 논문 추적 해결 (Crossref, Unpaywall OA, Semantic Scholar 인용) | paper-trail <DOI> | Crossref, Unpaywall, Semantic Scholar (별칭: paper) |
| ChEMBL이 보유한 화합물 메타데이터, 임상 단계 및 ATC 코드는 무엇인가? | `chembl <CHEMBL_ID | name> [--limit 5]` |
| ChEMBL이 보유한 정량적 생물활성 분석 (EC50, IC50, Ki, Kd)은 무엇인가? | `chembl-activity <CHEMBL_ID | name> [--target CHEMBL4051]` |
| Open Targets가 보유한 표적 추적 가능성, 안전성 부담, 질병 점수 또는 FAERS 통계는 무엇인가? | `opentargets <ID | query> [--limit 5]` |
| Scite가 이 DOI에 대해 보유한 지지, 대조 및 언급 인용 수는 무엇인가? | scite <DOI> [--rest] | Scite Pro MCP (scite-mcp) 또는 제로 할당량 공개 REST (--rest, scite-api) |
| 요청당 최대 500개 DOI에 대해 스마트 인용 수, 철회 및 섹션 분석을 제로 비용으로 스크리닝 | scite-batch <DOI...> [--papers] [--sections] | Scite 공개 REST (POST /tallies, POST /papers, POST /tallies/cited-by-sections; 제로 할당량 비용) |
| 이 DOI에 대한 인용이 서론, 방법, 결과 및 논의 섹션에 어떻게 분포되어 있는가? | scite-sections <DOI> | Scite 공개 REST (GET /tallies/cited-by-sections/{doi} + /tallies/{doi}; 제로 할당량 비용) |
| 특정 논문 내의 축어적 전문 발췌문과 스마트 인용 스니펫 읽기 | scite-excerpts <DOI> "<query>" [--limit 5] | Scite Pro MCP 모드 C (scite-mcp, <untrusted_data>에서 격리됨) |
| Scite가 시드 DOI에서 추천하는 관련 논문은 무엇인가? | scite-recommend <DOI> [--limit 5] | Scite Partner REST (GET /api_partner/recommend-papers/{doi}, 월 650회 REST 보호 게이트) |
| Scite 스마트 인용 수로 문헌 검색 | scite-search "<query>" [--limit 5] | Scite Pro MCP (scite-mcp, OAuth/키 필요) |
| PubMed ID를 제로 할당량 비용으로 DOI로 해결 | scite-pmid <PMID> | Scite 공개 REST (GET /papers/resolve-pmid/{pmid}, 제로 할당량 비용) |
| 최대 100개 DOI의 스마트 인용 수 집계, 제로 할당량 비용 | scite-aggregate <DOI...> | Scite 공개 REST (POST /tallies/aggregate, 제로 할당량 비용) |
| 대상 DOI에 대한 인용 출판물 및 철회된 인용 수 나열, 제로 할당량 비용 | scite-sources <DOI> [--limit 5] | Scite 공개 REST (GET /papers/sources/{target_doi}, 제로 할당량 비용) |
| 의도 분류 및 격리된 스니펫으로 1-홉 인용 네트워크 탐색 | scite-graph <DOI> [--direction both] [--limit 5] | Scite Pro MCP (citation_graph, <untrusted_data>에서 격리됨) |
| DOI 또는 PMID로 페이지 매김된 전문 본문 읽기 | `scite-fulltext <DOI | PMID> [--offset 0] [--length 8000]` |
| Scite 증거 데이터세트 검색 (영국 MHRA, 특허, 510(k), MAUDE, FAERS, 보조금, 의약품, 임상시험) | scite-evidence <dataset> "<query>" [--filter F] [--page 1] | Scite Pro MCP (search_mhra, search_patents, search_510k_summaries 등, <untrusted_data>에서 격리됨) |
| HGVS 또는 SPDI 변이 좌표 정규화 | `ncbi-variation <HGVS | SPDI>` |
| UniProtKB 단백질 서열, 도메인 경계 및 자연 변이 조회 | `uniprot <ACCESSION | query> [--limit 5]` |
| Ensembl 게놈 좌표, 표준 전사체 또는 rsID 결과 조회 | `ensembl <rsID | ENSG |
| NLM DailyMed 구조화된 제품 라벨(SPL)을 약물명으로 검색 | dailymed <DRUG> [--limit 5] | DailyMed RESTful 웹 서비스 v2 (dailymed-web-services) |
| 카탈로그 항목 입력 전 이용 약관 또는 법률 페이지 읽기 | read-page <HTTPS_URL> [--out FILE] [--max-chars N] | 실험실 행동 규칙에 따라 이용 약관/정책 페이지 또는 PDF를 사람이 읽도록 시작 |
| CFTR RefSeq NM_000492.4 엑손 및 UniProt P13569 도메인 컨텍스트 결정론적 조회 | `cftr-context <variant | codon>` |
| CFTR 조절제 브랜드, API, 분자 코드, NDA 및 openFDA SPL 박스 경고 안전성 컨텍스트 결정론적 조회 | `cftr-modulator <brand | code |
| CFTR Cryo-EM 좌표 구조 메타데이터 결정론적 조회 | cftr-structure <pdb_id> [--list] | 제로 네트워크 결정론적 CFTR Cryo-EM 구조 해상도, 리간드, 형태 및 참조 (별칭: cftr-pdb) |
| 이 도구가 전혀 도달할 수 있는 것은 무엇인가? | sources | 카탈로그 |
| 여러 출처가 하나의 약물, 변이 또는 임상시험에 대해 말하는 것은 무엇인가? | brief drug <BRAND>, brief variant "<ClinVar query>", brief trial <NCTId> | 위 출처들, 교차 확인됨 (Briefs 참조) |
| 이 노트의 모든 DOI, PMID 및 임상시험 ID가 존재하는가? | cite-check <FILE> [--max-ids 30] [--scite-bulk] | Crossref, PubMed, ClinicalTrials.gov, 선택적 제로 할당량 Scite 벌크 사전 점검 (Cite-check 참조) |
클라이언트 코드가 거부하는 작업: catalog.yaml에서 허용되지 않은 호스트에 도달 (API 데이터 쿼리에서 리디렉션을 따르지 않음); 브라우저로 가장; 인증서 확인 건너뛰기; 거부 후 재시도. 사전 카탈로그 약관 읽기의 경우, read-page는 실험실의 엄격한 네트워크 행동 강령을 적용합니다: HTTPS 전용, 먼저 robots_allows를 통한 robots.txt, Crawl-delay 준수, 거부/읽을 수 없는 robots는 가져오기 중단, 동일 사이트 HTTPS 리디렉션은 robots에 대해 다시 확인, 인증서 확인 활성화, 5 MB 본문 제한, 단일 요청. 이는 데이터 추출이 아닌 카탈로그 항목이 존재하기 전에 사람이 약관 페이지를 읽도록 시작하기 위해 특별히 존재하므로 카탈로그 항목이 필요하지 않습니다. 패키지는 또한 언어 모델을 호출하지 않으며 개인 수준 데이터를 보유한 출처를 질의하지 않습니다.
2. 실행
pip install -r scripts/requirements.txt
python scripts/evidence_cli.py retractions 10.1038/ng.2745
python scripts/evidence_cli.py approval 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
모든 명령에 대한 플래그: --json은 레코드당 하나의 JSON 객체, --ledger PATH는 레코드를 JSONL 증거 대장에 추가. 모든 레코드가 found 또는 not_found일 때 종료 코드 0; blocked, rate_limited 또는 error가 하나라도 있으면 3.
Briefs
brief는 동일한 클라이언트를 통해 여러 출처에 하나의 질문을 하므로, 카탈로그 게이트, 속도 조절, 예산 및 회로 차단기가 모두 여전히 적용됩니다. 각 출처가 반환한 모든 레코드, 각 출처의 상태, 비교한 필드 및 짧은 교차 확인 블록을 출력합니다.
| 레시피 | 실행 | 교차 확인 |
|---|---|---|
brief drug TRIKAFTA | approval, label, trials 조건별 (5), 브랜드에 대한 pubmed (5) | 각 출처의 상태; 라벨의 발효일 연도가 Drugs@FDA 최초 승인 연도보다 빠르지 않은지; OpenAlex 문헌 및 철회 검사; CFTR 조절제 안전성 경계(AH-4) 및 기본 PDB 교차 확인 |
brief variant "CFTR[gene] AND F508del" | variants, 동일한 조건에 대한 pubmed (5) | 각 출처의 상태; 일치하는 ClinVar 레코드 수와 각각의 분류 및 검토 상태 |
brief trial NCT05033080 | trial, NCT ID에 대한 pubmed (5) | 각 출처의 상태; 등록소 레코드 ID; 반환된 논문 중 제목에 임상시험을 명명한 것 |
교차 확인 읽는 방법:
PASS: 값이 일치하거나 출처가 응답함. 이는 약물, 변이 또는 임상시험에 대한 발견이 아님.CHECK: 사람이 확인해야 함. 출처가 응답하지 않음; 여러 ClinVar 레코드가 일치함 (모두 나열되며 선택되지 않음); 또는 라벨의 발효일이 약물의 최초 승인보다 빠름. 이는 올바를 수 없으므로 두 레코드 중 하나가 일관성이 없음. 라벨의 발효일은 최신 개정판이므로, 라벨 연도가 승인 연도와 같거나 늦으면 예상된 것이며PASS임.NOT STATED: 출처가 값을 제공하지 않아 비교할 수 없음. PubMed 레코드는 초록이나 전문을 포함하지 않으므로, 제목에 임상시험을 명명하지 않은 논문은NOT STATED이지 "언급하지 않음"이 아님.
brief가 하지 않는 일: 자체적인 사실을 추가하지 않습니다. 출력되는 모든 값은 레코드 필드에서 복사되거나 레이블이 지정된 개수 또는 연도 차이이며, 누락된 값은 not stated로 출력됩니다. 차단, 속도 제한 또는 실패한 출처는 다른 출처를 중단시키지 않으며, 상태와 함께 나열되고 종료 코드는 3입니다. --json을 사용하면 레코드가 먼저 오고 마지막 객체인 {"brief": ...}가 출처, 필드, 교차 확인 및 바닥글을 보유합니다. --ledger는 레코드만 저장합니다. 모든 brief는 다음으로 끝납니다: 연구 지원이지 의학적 조언이 아닙니다. brief는 공개 문서를 나열합니다. 개인을 위해 어떤 것도 해석하지 않습니다.
Cite-check
모든 인용은 증거 레코드를 거치며, 해결할 수 없는 인용은 출처에서 삭제하거나 수정하며, 기억에서 복구하지 않습니다. cite-check FILE은 전체 노트에 적용됩니다. 모든 DOI, PMID 123, PMID: 123 또는 pubmed/123 URL 형식의 PubMed ID, 모든 NCT ID를 찾아 중복을 제거하고(첫 번째 발생 라인 유지) 단일 조회 코드로 각각을 조회합니다: DOI는 doi, PMID는 PubMed 검색 ([pmid] 필드 사용, 두 번 요청), NCT ID는 trial. 일반 클라이언트가 적용됩니다: 카탈로그 게이트, 속도 조절, 예산, 회로 차단기, 회계.
| 라인 | 의미 |
|---|---|
PASS | 출처가 레코드를 반환함; 제목과 연도 또는 날짜가 출력되며, 없는 경우 not stated |
NOT FOUND | 출처가 해당 ID가 없다고 응답함. 출처에서 삭제하거나 수정하세요. 절대 추측하지 마십시오 |
UNRESOLVED | 조회가 차단, 속도 제한 또는 실패함. 해결되지 않음은 존재하지 않음과 동일하지 않음 |
TITLE PASS / TITLE CHECK | 같은 라인에 있는 4단어 이상의 인용 또는 강조된 구문이 레코드 제목과 단어의 최소 0.6(또는 그 미만)을 공유하는지 대소문자 구분 없이 확인 |