@wentorai/research-plugins 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -18
- package/curated/analysis/README.md +12 -1
- package/curated/domains/README.md +48 -1
- package/curated/literature/README.md +46 -1
- package/curated/research/README.md +16 -1
- package/curated/tools/README.md +20 -1
- package/curated/writing/README.md +13 -1
- package/mcp-configs/academic-db/alphafold-mcp.json +20 -0
- package/mcp-configs/academic-db/brightspace-mcp.json +21 -0
- package/mcp-configs/academic-db/climatiq-mcp.json +20 -0
- package/mcp-configs/academic-db/gibs-mcp.json +20 -0
- package/mcp-configs/academic-db/gis-mcp-server.json +22 -0
- package/mcp-configs/academic-db/google-earth-engine-mcp.json +21 -0
- package/mcp-configs/academic-db/m4-clinical-mcp.json +21 -0
- package/mcp-configs/academic-db/medical-mcp.json +21 -0
- package/mcp-configs/academic-db/nexonco-mcp.json +20 -0
- package/mcp-configs/academic-db/omop-mcp.json +20 -0
- package/mcp-configs/academic-db/onekgpd-mcp.json +20 -0
- package/mcp-configs/academic-db/openedu-mcp.json +20 -0
- package/mcp-configs/academic-db/opengenes-mcp.json +20 -0
- package/mcp-configs/academic-db/openstax-mcp.json +21 -0
- package/mcp-configs/academic-db/openstreetmap-mcp.json +21 -0
- package/mcp-configs/academic-db/opentargets-mcp.json +21 -0
- package/mcp-configs/academic-db/pdb-mcp.json +21 -0
- package/mcp-configs/academic-db/smithsonian-mcp.json +20 -0
- package/mcp-configs/ai-platform/magi-researchers.json +21 -0
- package/mcp-configs/ai-platform/mcp-academic-researcher.json +22 -0
- package/mcp-configs/ai-platform/open-paper-machine.json +21 -0
- package/mcp-configs/ai-platform/paper-intelligence.json +21 -0
- package/mcp-configs/ai-platform/paper-reader.json +21 -0
- package/mcp-configs/ai-platform/paperdebugger.json +21 -0
- package/mcp-configs/browser/exa-mcp.json +20 -0
- package/mcp-configs/browser/mcp-searxng.json +21 -0
- package/mcp-configs/browser/mcp-webresearch.json +20 -0
- package/mcp-configs/communication/discourse-mcp.json +21 -0
- package/mcp-configs/data-platform/automl-stat-mcp.json +21 -0
- package/mcp-configs/data-platform/jefferson-stats-mcp.json +22 -0
- package/mcp-configs/data-platform/mcp-excel-server.json +21 -0
- package/mcp-configs/data-platform/mcp-stata.json +21 -0
- package/mcp-configs/data-platform/mcpstack-jupyter.json +21 -0
- package/mcp-configs/data-platform/ml-mcp.json +21 -0
- package/mcp-configs/data-platform/nasdaq-data-link-mcp.json +20 -0
- package/mcp-configs/data-platform/numpy-mcp.json +21 -0
- package/mcp-configs/dev-platform/geogebra-mcp.json +21 -0
- package/mcp-configs/dev-platform/latex-mcp-server.json +21 -0
- package/mcp-configs/dev-platform/manim-mcp.json +20 -0
- package/mcp-configs/dev-platform/mcp-echarts.json +20 -0
- package/mcp-configs/dev-platform/panel-viz-mcp.json +20 -0
- package/mcp-configs/dev-platform/paperbanana.json +20 -0
- package/mcp-configs/dev-platform/texflow-mcp.json +20 -0
- package/mcp-configs/dev-platform/texmcp.json +20 -0
- package/mcp-configs/dev-platform/typst-mcp.json +21 -0
- package/mcp-configs/dev-platform/vizro-mcp.json +20 -0
- package/mcp-configs/note-knowledge/local-faiss-mcp.json +21 -0
- package/mcp-configs/note-knowledge/mcp-memory-service.json +21 -0
- package/mcp-configs/note-knowledge/mcp-obsidian.json +23 -0
- package/mcp-configs/note-knowledge/mcp-ragdocs.json +20 -0
- package/mcp-configs/note-knowledge/mcp-summarizer.json +21 -0
- package/mcp-configs/note-knowledge/mediawiki-mcp.json +21 -0
- package/mcp-configs/note-knowledge/openzim-mcp.json +20 -0
- package/mcp-configs/note-knowledge/zettelkasten-mcp.json +21 -0
- package/mcp-configs/reference-mgr/academic-paper-mcp-http.json +20 -0
- package/mcp-configs/reference-mgr/academix.json +20 -0
- package/mcp-configs/reference-mgr/arxiv-research-mcp.json +21 -0
- package/mcp-configs/reference-mgr/google-scholar-abstract-mcp.json +19 -0
- package/mcp-configs/reference-mgr/google-scholar-mcp.json +20 -0
- package/mcp-configs/reference-mgr/mcp-paperswithcode.json +21 -0
- package/mcp-configs/reference-mgr/mcp-scholarly.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-arxiv.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-pubmed.json +20 -0
- package/mcp-configs/reference-mgr/mcp-zotero.json +21 -0
- package/mcp-configs/reference-mgr/mendeley-mcp.json +20 -0
- package/mcp-configs/reference-mgr/ncbi-mcp-server.json +22 -0
- package/mcp-configs/reference-mgr/onecite.json +21 -0
- package/mcp-configs/reference-mgr/paper-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/pubmed-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-multi-mcp.json +21 -0
- package/mcp-configs/reference-mgr/seerai.json +21 -0
- package/mcp-configs/reference-mgr/semantic-scholar-fastmcp.json +21 -0
- package/mcp-configs/reference-mgr/sourcelibrary.json +20 -0
- package/openclaw.plugin.json +2 -2
- package/package.json +2 -2
- package/skills/analysis/dataviz/citation-map-guide/SKILL.md +184 -0
- package/skills/analysis/dataviz/data-visualization-principles/SKILL.md +171 -0
- package/skills/analysis/econometrics/econml-causal-guide/SKILL.md +2 -2
- package/skills/analysis/econometrics/empirical-paper-analysis/SKILL.md +192 -0
- package/skills/analysis/econometrics/mostly-harmless-guide/SKILL.md +2 -2
- package/skills/analysis/econometrics/panel-data-regression-workflow/SKILL.md +267 -0
- package/skills/analysis/econometrics/python-causality-guide/SKILL.md +2 -2
- package/skills/analysis/econometrics/stata-reference-guide/SKILL.md +293 -0
- package/skills/analysis/statistics/general-statistics-guide/SKILL.md +226 -0
- package/skills/analysis/statistics/infiagent-benchmark-guide/SKILL.md +106 -0
- package/skills/analysis/wrangling/claude-data-analysis-guide/SKILL.md +100 -0
- package/skills/analysis/wrangling/open-data-scientist-guide/SKILL.md +197 -0
- package/skills/analysis/wrangling/streamline-analyst-guide/SKILL.md +119 -0
- package/skills/domains/ai-ml/ai-agent-papers-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/anomaly-detection-papers-guide/SKILL.md +167 -0
- package/skills/domains/ai-ml/autonomous-agents-papers-guide/SKILL.md +178 -0
- package/skills/domains/ai-ml/domain-adaptation-papers-guide/SKILL.md +173 -0
- package/skills/domains/ai-ml/generative-ai-guide/SKILL.md +2 -2
- package/skills/domains/ai-ml/graph-learning-papers-guide/SKILL.md +125 -0
- package/skills/domains/ai-ml/kolmogorov-arnold-networks-guide/SKILL.md +185 -0
- package/skills/domains/ai-ml/npcpy-research-guide/SKILL.md +137 -0
- package/skills/domains/ai-ml/responsible-ai-guide/SKILL.md +126 -0
- package/skills/domains/ai-ml/vmas-simulator-guide/SKILL.md +129 -0
- package/skills/domains/biomedical/clawbio-guide/SKILL.md +167 -0
- package/skills/domains/biomedical/clinical-dialogue-agents-guide/SKILL.md +145 -0
- package/skills/domains/biomedical/ena-sequence-api/SKILL.md +175 -0
- package/skills/domains/biomedical/genomas-guide/SKILL.md +126 -0
- package/skills/domains/biomedical/genotex-benchmark-guide/SKILL.md +125 -0
- package/skills/domains/biomedical/med-researcher-guide/SKILL.md +161 -0
- package/skills/domains/biomedical/med-researcher-r1-guide/SKILL.md +146 -0
- package/skills/domains/biomedical/ncbi-blast-api/SKILL.md +195 -0
- package/skills/domains/biomedical/ncbi-datasets-api/SKILL.md +220 -0
- package/skills/domains/biomedical/quickgo-api/SKILL.md +181 -0
- package/skills/domains/business/xpert-bi-guide/SKILL.md +84 -0
- package/skills/domains/chemistry/cactus-cheminformatics-guide/SKILL.md +89 -0
- package/skills/domains/chemistry/chemeagle-guide/SKILL.md +147 -0
- package/skills/domains/chemistry/chemgraph-agent-guide/SKILL.md +120 -0
- package/skills/domains/cs/ai-security-papers-guide/SKILL.md +103 -0
- package/skills/domains/cs/code-llm-papers-guide/SKILL.md +131 -0
- package/skills/domains/cs/gaussian-splatting-papers-guide/SKILL.md +158 -0
- package/skills/domains/cs/llm-aiops-guide/SKILL.md +70 -0
- package/skills/domains/cs/software-heritage-api/SKILL.md +200 -0
- package/skills/domains/economics/nber-working-papers-api/SKILL.md +177 -0
- package/skills/domains/economics/repec-economics-api/SKILL.md +188 -0
- package/skills/domains/education/academic-study-methods/SKILL.md +228 -0
- package/skills/domains/education/edumcp-guide/SKILL.md +74 -0
- package/skills/domains/education/open-syllabus-api/SKILL.md +171 -0
- package/skills/domains/finance/akshare-finance-data/SKILL.md +207 -0
- package/skills/domains/finance/finsight-research-guide/SKILL.md +113 -0
- package/skills/domains/finance/options-analytics-agent-guide/SKILL.md +117 -0
- package/skills/domains/geoscience/pangaea-data-api/SKILL.md +197 -0
- package/skills/domains/humanities/digital-humanities-methods/SKILL.md +232 -0
- package/skills/domains/law/caselaw-access-api/SKILL.md +149 -0
- package/skills/domains/law/legal-agent-skills-guide/SKILL.md +132 -0
- package/skills/domains/law/legal-research-methods/SKILL.md +190 -0
- package/skills/domains/law/opencontracts-guide/SKILL.md +168 -0
- package/skills/domains/math/lean-theorem-proving-guide/SKILL.md +140 -0
- package/skills/domains/pharma/madd-drug-discovery-guide/SKILL.md +153 -0
- package/skills/domains/social-science/ipums-microdata-api/SKILL.md +211 -0
- package/skills/domains/social-science/sociology-research-methods/SKILL.md +181 -0
- package/skills/literature/discovery/arxiv-paper-monitoring/SKILL.md +233 -0
- package/skills/literature/discovery/papers-we-love-guide/SKILL.md +169 -0
- package/skills/literature/discovery/zotero-arxiv-daily-guide/SKILL.md +2 -2
- package/skills/literature/fulltext/bioc-pmc-api/SKILL.md +146 -0
- package/skills/literature/fulltext/dataverse-api/SKILL.md +215 -0
- package/skills/literature/fulltext/hal-archive-api/SKILL.md +218 -0
- package/skills/literature/fulltext/osf-api/SKILL.md +212 -0
- package/skills/literature/fulltext/pmc-ftp-bulk-download/SKILL.md +182 -0
- package/skills/literature/fulltext/zotero-ai-butler-guide/SKILL.md +166 -0
- package/skills/literature/fulltext/zotero-scihub-guide/SKILL.md +168 -0
- package/skills/literature/metadata/bibliometrix-guide/SKILL.md +164 -0
- package/skills/literature/metadata/crossref-event-data-api/SKILL.md +183 -0
- package/skills/literature/metadata/doi-content-negotiation/SKILL.md +202 -0
- package/skills/literature/metadata/orkg-api/SKILL.md +153 -0
- package/skills/literature/metadata/plumx-metrics-api/SKILL.md +188 -0
- package/skills/literature/metadata/ror-organization-api/SKILL.md +208 -0
- package/skills/literature/metadata/sophosia-reference-guide/SKILL.md +110 -0
- package/skills/literature/metadata/viaf-authority-api/SKILL.md +209 -0
- package/skills/literature/metadata/zoplicate-dedup-guide/SKILL.md +147 -0
- package/skills/literature/metadata/zotero-actions-tags-guide/SKILL.md +212 -0
- package/skills/literature/metadata/zotmoov-guide/SKILL.md +120 -0
- package/skills/literature/metadata/zutilo-guide/SKILL.md +140 -0
- package/skills/literature/search/arxiv-cli-tools/SKILL.md +172 -0
- package/skills/literature/search/arxiv-osiris/SKILL.md +199 -0
- package/skills/literature/search/base-academic-search/SKILL.md +196 -0
- package/skills/literature/search/chatpaper-guide/SKILL.md +2 -2
- package/skills/literature/search/citeseerx-api/SKILL.md +183 -0
- package/skills/literature/search/deepgit-search-guide/SKILL.md +2 -2
- package/skills/literature/search/eric-education-api/SKILL.md +199 -0
- package/skills/literature/search/findpapers-guide/SKILL.md +177 -0
- package/skills/literature/search/ieee-xplore-api/SKILL.md +177 -0
- package/skills/literature/search/lens-scholarly-api/SKILL.md +211 -0
- package/skills/literature/search/multi-database-literature-search/SKILL.md +198 -0
- package/skills/literature/search/open-library-api/SKILL.md +196 -0
- package/skills/literature/search/open-semantic-search-guide/SKILL.md +190 -0
- package/skills/literature/search/openaire-api/SKILL.md +141 -0
- package/skills/literature/search/paper-search-mcp-guide/SKILL.md +107 -0
- package/skills/literature/search/papers-chat-guide/SKILL.md +194 -0
- package/skills/literature/search/pasa-paper-search-guide/SKILL.md +2 -2
- package/skills/literature/search/plos-open-access-api/SKILL.md +203 -0
- package/skills/literature/search/scielo-api/SKILL.md +182 -0
- package/skills/literature/search/share-research-api/SKILL.md +129 -0
- package/skills/literature/search/worldcat-search-api/SKILL.md +224 -0
- package/skills/research/automation/aim-experiment-guide/SKILL.md +2 -2
- package/skills/research/automation/claude-academic-workflow-guide/SKILL.md +202 -0
- package/skills/research/automation/coexist-ai-guide/SKILL.md +149 -0
- package/skills/research/automation/datagen-research-guide/SKILL.md +2 -2
- package/skills/research/automation/foam-agent-guide/SKILL.md +203 -0
- package/skills/research/automation/kedro-pipeline-guide/SKILL.md +2 -2
- package/skills/research/automation/mle-agent-guide/SKILL.md +2 -2
- package/skills/research/automation/paper-to-agent-guide/SKILL.md +2 -2
- package/skills/research/deep-research/auto-deep-research-guide/SKILL.md +2 -2
- package/skills/research/deep-research/cognitive-kernel-guide/SKILL.md +200 -0
- package/skills/research/deep-research/corvus-research-guide/SKILL.md +132 -0
- package/skills/research/deep-research/in-depth-research-guide/SKILL.md +205 -0
- package/skills/research/deep-research/kosmos-scientist-guide/SKILL.md +185 -0
- package/skills/research/deep-research/llm-scientific-discovery-guide/SKILL.md +178 -0
- package/skills/research/deep-research/open-researcher-guide/SKILL.md +138 -0
- package/skills/research/methodology/claude-scientific-guide/SKILL.md +2 -2
- package/skills/research/methodology/parsifal-slr-guide/SKILL.md +154 -0
- package/skills/research/methodology/research-pipeline-units-guide/SKILL.md +169 -0
- package/skills/research/methodology/slr-automation-guide/SKILL.md +235 -0
- package/skills/research/paper-review/latte-review-guide/SKILL.md +175 -0
- package/skills/research/paper-review/paper-critique-framework/SKILL.md +181 -0
- package/skills/tools/code-exec/contextplus-mcp-guide/SKILL.md +110 -0
- package/skills/tools/diagram/clawphd-guide/SKILL.md +149 -0
- package/skills/tools/diagram/kroki-diagram-api/SKILL.md +198 -0
- package/skills/tools/diagram/scientific-graphical-abstract/SKILL.md +201 -0
- package/skills/tools/document/docsgpt-guide/SKILL.md +2 -2
- package/skills/tools/document/md2pdf-xelatex/SKILL.md +212 -0
- package/skills/tools/document/openpaper-guide/SKILL.md +232 -0
- package/skills/tools/document/weknora-guide/SKILL.md +216 -0
- package/skills/tools/document/zotero-addon-market-guide/SKILL.md +108 -0
- package/skills/tools/document/zotero-night-theme-guide/SKILL.md +142 -0
- package/skills/tools/document/zotero-style-guide/SKILL.md +217 -0
- package/skills/tools/knowledge-graph/graphiti-guide/SKILL.md +2 -2
- package/skills/tools/knowledge-graph/mimir-memory-guide/SKILL.md +135 -0
- package/skills/tools/knowledge-graph/notero-zotero-notion-guide/SKILL.md +187 -0
- package/skills/tools/knowledge-graph/open-webui-tools-guide/SKILL.md +156 -0
- package/skills/tools/knowledge-graph/openspg-guide/SKILL.md +210 -0
- package/skills/tools/knowledge-graph/paperpile-notion-guide/SKILL.md +84 -0
- package/skills/tools/knowledge-graph/zotero-markdb-connect-guide/SKILL.md +162 -0
- package/skills/tools/ocr-translate/latex-translation-guide/SKILL.md +176 -0
- package/skills/tools/ocr-translate/math-equation-renderer/SKILL.md +198 -0
- package/skills/tools/ocr-translate/pdf-math-translate-guide/SKILL.md +2 -2
- package/skills/tools/ocr-translate/zotero-pdf-translate-guide/SKILL.md +2 -2
- package/skills/tools/ocr-translate/zotero-pdf2zh-guide/SKILL.md +2 -2
- package/skills/writing/citation/academic-citation-manager-guide/SKILL.md +182 -0
- package/skills/writing/citation/citation-assistant-skill/SKILL.md +192 -0
- package/skills/writing/citation/jabref-reference-guide/SKILL.md +2 -2
- package/skills/writing/citation/jasminum-zotero-guide/SKILL.md +2 -2
- package/skills/writing/citation/mendeley-api/SKILL.md +231 -0
- package/skills/writing/citation/obsidian-citation-guide/SKILL.md +2 -2
- package/skills/writing/citation/obsidian-zotero-guide/SKILL.md +2 -2
- package/skills/writing/citation/onecite-reference-guide/SKILL.md +168 -0
- package/skills/writing/citation/papersgpt-zotero-guide/SKILL.md +2 -2
- package/skills/writing/citation/papis-cli-guide/SKILL.md +2 -2
- package/skills/writing/citation/zotero-better-bibtex-guide/SKILL.md +2 -2
- package/skills/writing/citation/zotero-better-notes-guide/SKILL.md +2 -2
- package/skills/writing/citation/zotero-gpt-guide/SKILL.md +2 -2
- package/skills/writing/citation/zotero-mcp-guide/SKILL.md +2 -2
- package/skills/writing/citation/zotero-mdnotes-guide/SKILL.md +2 -2
- package/skills/writing/citation/zotero-reference-guide/SKILL.md +2 -2
- package/skills/writing/citation/zotfile-attachment-guide/SKILL.md +2 -2
- package/skills/writing/composition/opendraft-thesis-guide/SKILL.md +200 -0
- package/skills/writing/composition/paper-debugger-guide/SKILL.md +2 -2
- package/skills/writing/composition/paperforge-guide/SKILL.md +205 -0
- package/skills/writing/composition/research-paper-writer/SKILL.md +226 -0
- package/skills/writing/composition/scientific-writing-resources/SKILL.md +2 -2
- package/skills/writing/latex/academic-writing-latex/SKILL.md +285 -0
- package/skills/writing/latex/latex-drawing-collection/SKILL.md +2 -2
- package/skills/writing/latex/latex-templates-collection/SKILL.md +2 -2
- package/skills/writing/polish/chinese-text-humanizer/SKILL.md +140 -0
- package/skills/writing/templates/arxiv-preprint-template/SKILL.md +184 -0
- package/skills/writing/templates/elegant-paper-template/SKILL.md +141 -0
- package/skills/writing/templates/novathesis-guide/SKILL.md +2 -2
- package/skills/writing/templates/sjtuthesis-guide/SKILL.md +2 -2
- package/skills/writing/templates/thuthesis-guide/SKILL.md +2 -2
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: genotex-benchmark-guide
|
|
3
|
+
description: "Benchmark for LLM agents on gene expression data analysis"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🧫"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "biomedical"
|
|
9
|
+
keywords: ["GenoTEX", "gene expression", "benchmark", "LLM agent", "bioinformatics", "GEO"]
|
|
10
|
+
source: "https://github.com/Liu-Hy/GenoTEX"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# GenoTEX Benchmark Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
GenoTEX is a benchmark for evaluating LLM-based agents on gene expression data analysis tasks. It provides curated datasets from GEO (Gene Expression Omnibus) with ground-truth analysis pipelines, testing agents on data preprocessing, differential expression, enrichment analysis, and biological interpretation. Published at MLCB 2025 as an oral presentation.
|
|
18
|
+
|
|
19
|
+
## Benchmark Structure
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
GenoTEX Benchmark
|
|
23
|
+
├── Data Collection
|
|
24
|
+
│ └── Curated GEO datasets with ground truth
|
|
25
|
+
├── Task Categories
|
|
26
|
+
│ ├── Data preprocessing (QC, normalization)
|
|
27
|
+
│ ├── Differential expression analysis
|
|
28
|
+
│ ├── Gene set enrichment analysis
|
|
29
|
+
│ ├── Clustering and classification
|
|
30
|
+
│ └── Biological interpretation
|
|
31
|
+
├── Evaluation
|
|
32
|
+
│ ├── Code correctness (executes without error)
|
|
33
|
+
│ ├── Statistical validity (appropriate tests)
|
|
34
|
+
│ ├── Result accuracy (vs ground truth)
|
|
35
|
+
│ └── Interpretation quality (biological insight)
|
|
36
|
+
└── Baselines
|
|
37
|
+
├── GPT-4 agent
|
|
38
|
+
├── Claude agent
|
|
39
|
+
└── Domain-specific fine-tuned models
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
```python
|
|
45
|
+
from genotex import GenoTEXBenchmark
|
|
46
|
+
|
|
47
|
+
bench = GenoTEXBenchmark()
|
|
48
|
+
|
|
49
|
+
# List available tasks
|
|
50
|
+
tasks = bench.list_tasks()
|
|
51
|
+
for task in tasks[:5]:
|
|
52
|
+
print(f"Task: {task.id}")
|
|
53
|
+
print(f" Dataset: {task.geo_accession}")
|
|
54
|
+
print(f" Category: {task.category}")
|
|
55
|
+
print(f" Difficulty: {task.difficulty}")
|
|
56
|
+
|
|
57
|
+
# Get a specific task
|
|
58
|
+
task = bench.get_task("GSE12345_DEG")
|
|
59
|
+
print(f"Description: {task.description}")
|
|
60
|
+
print(f"Input files: {task.input_files}")
|
|
61
|
+
print(f"Expected output: {task.expected_output_type}")
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Running Evaluations
|
|
65
|
+
|
|
66
|
+
```python
|
|
67
|
+
# Evaluate an agent on GenoTEX
|
|
68
|
+
from genotex import evaluate_agent
|
|
69
|
+
|
|
70
|
+
results = evaluate_agent(
|
|
71
|
+
agent_fn=my_agent_function,
|
|
72
|
+
tasks="all", # or specific task IDs
|
|
73
|
+
timeout_per_task=300, # seconds
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
print(f"Tasks completed: {results.completed}/{results.total}")
|
|
77
|
+
print(f"Code correctness: {results.code_correct_rate:.1%}")
|
|
78
|
+
print(f"Statistical validity: {results.stats_valid_rate:.1%}")
|
|
79
|
+
print(f"Result accuracy: {results.accuracy:.3f}")
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Task Examples
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
# Example: Differential Expression Analysis
|
|
86
|
+
task = {
|
|
87
|
+
"id": "GSE12345_DEG",
|
|
88
|
+
"description": "Identify differentially expressed genes "
|
|
89
|
+
"between treatment and control groups in "
|
|
90
|
+
"this RNA-seq dataset.",
|
|
91
|
+
"input": "GSE12345_counts.csv", # Raw count matrix
|
|
92
|
+
"metadata": "GSE12345_metadata.csv", # Sample info
|
|
93
|
+
"expected": {
|
|
94
|
+
"method": "DESeq2 or limma-voom",
|
|
95
|
+
"output": "DEG table with log2FC, p-value, adj.p",
|
|
96
|
+
"ground_truth": "GSE12345_deg_truth.csv",
|
|
97
|
+
},
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
# Example: Gene Set Enrichment
|
|
101
|
+
task = {
|
|
102
|
+
"id": "GSE12345_GSEA",
|
|
103
|
+
"description": "Perform gene set enrichment analysis on "
|
|
104
|
+
"the DEGs and identify enriched pathways.",
|
|
105
|
+
"input": "GSE12345_deg_results.csv",
|
|
106
|
+
"expected": {
|
|
107
|
+
"method": "fgsea, clusterProfiler, or enrichR",
|
|
108
|
+
"output": "Enriched pathways with NES and FDR",
|
|
109
|
+
},
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Use Cases
|
|
114
|
+
|
|
115
|
+
1. **Agent evaluation**: Test bioinformatics agents on real tasks
|
|
116
|
+
2. **Method comparison**: Compare LLM agents on genomics
|
|
117
|
+
3. **Benchmark development**: Extend with new GEO datasets
|
|
118
|
+
4. **Teaching**: Standard tasks for bioinformatics education
|
|
119
|
+
5. **Tool development**: Test new analysis pipelines
|
|
120
|
+
|
|
121
|
+
## References
|
|
122
|
+
|
|
123
|
+
- [GenoTEX GitHub](https://github.com/Liu-Hy/GenoTEX)
|
|
124
|
+
- [GEO Database](https://www.ncbi.nlm.nih.gov/geo/)
|
|
125
|
+
- [MLCB 2025](https://mlcb.github.io/)
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: med-researcher-guide
|
|
3
|
+
description: "Multi-agent system for biomedical literature review and synthesis"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🏥"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "biomedical"
|
|
9
|
+
keywords: ["medical research", "biomedical agent", "clinical literature", "PubMed agent", "medical AI", "evidence synthesis"]
|
|
10
|
+
source: "https://github.com/mao1207/Med-Researcher"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Med-Researcher Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
Med-Researcher is a multi-agent system designed specifically for biomedical literature review. It orchestrates specialized agents for searching PubMed and other medical databases, extracting structured evidence from clinical papers, and synthesizing findings into evidence-graded summaries. Particularly useful for clinical evidence reviews, drug interaction research, and systematic reviews in medicine.
|
|
18
|
+
|
|
19
|
+
## Architecture
|
|
20
|
+
|
|
21
|
+
### Agent Roles
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
Query → Planning Agent (decomposes clinical question)
|
|
25
|
+
↓
|
|
26
|
+
Search Agent (PubMed, PMC, clinical trials)
|
|
27
|
+
↓
|
|
28
|
+
Extraction Agent (PICO, outcomes, evidence grade)
|
|
29
|
+
↓
|
|
30
|
+
Synthesis Agent (evidence summary, contradictions)
|
|
31
|
+
↓
|
|
32
|
+
Report Agent (structured review output)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Agent Descriptions
|
|
36
|
+
|
|
37
|
+
| Agent | Role |
|
|
38
|
+
|-------|------|
|
|
39
|
+
| **Planner** | Converts clinical question to PICO format, generates sub-queries |
|
|
40
|
+
| **Searcher** | Queries PubMed, PMC, ClinicalTrials.gov |
|
|
41
|
+
| **Extractor** | Extracts structured data: population, intervention, outcomes |
|
|
42
|
+
| **Synthesizer** | Grades evidence, identifies consensus and contradictions |
|
|
43
|
+
| **Reporter** | Generates formatted review with citations |
|
|
44
|
+
|
|
45
|
+
## Usage
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
from med_researcher import MedResearcher
|
|
49
|
+
|
|
50
|
+
researcher = MedResearcher(
|
|
51
|
+
llm_provider="anthropic",
|
|
52
|
+
search_backends=["pubmed", "pmc", "clinical_trials"],
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
# Clinical question
|
|
56
|
+
result = researcher.review(
|
|
57
|
+
question="What is the comparative efficacy of SGLT2 inhibitors "
|
|
58
|
+
"versus GLP-1 receptor agonists for cardiovascular "
|
|
59
|
+
"outcomes in type 2 diabetes?",
|
|
60
|
+
max_papers=50,
|
|
61
|
+
evidence_grading=True,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
print(result.summary)
|
|
65
|
+
print(f"Papers analyzed: {len(result.papers)}")
|
|
66
|
+
print(f"Evidence grade: {result.overall_grade}")
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## PICO Framework Integration
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
# Automatic PICO extraction from clinical question
|
|
73
|
+
pico = researcher.extract_pico(
|
|
74
|
+
"Does metformin reduce cancer incidence in diabetic patients?"
|
|
75
|
+
)
|
|
76
|
+
# P: patients with diabetes
|
|
77
|
+
# I: metformin treatment
|
|
78
|
+
# C: no metformin / other antidiabetics
|
|
79
|
+
# O: cancer incidence
|
|
80
|
+
|
|
81
|
+
# Search with PICO components
|
|
82
|
+
result = researcher.review_pico(
|
|
83
|
+
population="type 2 diabetes patients",
|
|
84
|
+
intervention="metformin",
|
|
85
|
+
comparison="placebo or other antidiabetics",
|
|
86
|
+
outcome="cancer incidence",
|
|
87
|
+
)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Evidence Grading
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
# Evidence levels following GRADE methodology
|
|
94
|
+
for paper in result.papers:
|
|
95
|
+
print(f"{paper.title}")
|
|
96
|
+
print(f" Study type: {paper.study_type}") # RCT, cohort, case-control
|
|
97
|
+
print(f" Evidence level: {paper.evidence_level}") # High/Moderate/Low/Very Low
|
|
98
|
+
print(f" Risk of bias: {paper.bias_risk}")
|
|
99
|
+
print(f" Sample size: {paper.sample_size}")
|
|
100
|
+
|
|
101
|
+
# Aggregate evidence summary
|
|
102
|
+
print(f"\nOverall certainty: {result.certainty}")
|
|
103
|
+
print(f"Recommendation strength: {result.recommendation}")
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Search Configuration
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
researcher = MedResearcher(
|
|
110
|
+
search_config={
|
|
111
|
+
"pubmed": {
|
|
112
|
+
"max_results": 100,
|
|
113
|
+
"date_range": ("2020-01-01", "2025-12-31"),
|
|
114
|
+
"article_types": ["Clinical Trial", "Meta-Analysis",
|
|
115
|
+
"Randomized Controlled Trial"],
|
|
116
|
+
},
|
|
117
|
+
"clinical_trials": {
|
|
118
|
+
"status": ["Completed", "Active"],
|
|
119
|
+
"phase": ["Phase 3", "Phase 4"],
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
extraction_config={
|
|
123
|
+
"fields": ["population", "intervention", "comparator",
|
|
124
|
+
"primary_outcome", "secondary_outcomes",
|
|
125
|
+
"adverse_events", "sample_size", "follow_up"],
|
|
126
|
+
},
|
|
127
|
+
)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Output Formats
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
# Structured evidence table
|
|
134
|
+
result.export_evidence_table("evidence_table.csv")
|
|
135
|
+
|
|
136
|
+
# PRISMA flow diagram data
|
|
137
|
+
prisma = result.prisma_flow()
|
|
138
|
+
print(f"Identified: {prisma['identified']}")
|
|
139
|
+
print(f"Screened: {prisma['screened']}")
|
|
140
|
+
print(f"Included: {prisma['included']}")
|
|
141
|
+
|
|
142
|
+
# Bibliography
|
|
143
|
+
result.export_bibtex("references.bib")
|
|
144
|
+
|
|
145
|
+
# Full report
|
|
146
|
+
result.export_report("review.md", format="markdown")
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Clinical Use Cases
|
|
150
|
+
|
|
151
|
+
1. **Drug comparison reviews**: Head-to-head efficacy analysis
|
|
152
|
+
2. **Safety signal detection**: Adverse event pattern identification
|
|
153
|
+
3. **Guideline evidence**: Supporting clinical guideline development
|
|
154
|
+
4. **Grant proposals**: Rapid evidence landscape assessment
|
|
155
|
+
5. **Journal clubs**: Structured paper discussion preparation
|
|
156
|
+
|
|
157
|
+
## References
|
|
158
|
+
|
|
159
|
+
- [Med-Researcher GitHub](https://github.com/mao1207/Med-Researcher)
|
|
160
|
+
- [GRADE Handbook](https://gdt.gradepro.org/app/handbook/handbook.html)
|
|
161
|
+
- [PubMed API (E-utilities)](https://www.ncbi.nlm.nih.gov/books/NBK25501/)
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: med-researcher-r1-guide
|
|
3
|
+
description: "Medical deep research agent with reasoning chain analysis"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🩺"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "biomedical"
|
|
9
|
+
keywords: ["medical research", "deep research", "clinical reasoning", "PubMed", "medical agent", "evidence-based"]
|
|
10
|
+
source: "https://github.com/AQ-MedAI/MedResearcher-R1"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# MedResearcher-R1 Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
MedResearcher-R1 is a medical deep research agent that combines clinical reasoning chains with iterative literature search to answer complex medical questions. Unlike general research agents, it is specialized for medical evidence — understanding clinical trial designs, PICO frameworks, evidence hierarchies, and medical terminology. Uses reasoning chain analysis (R1) to decompose clinical questions and systematically gather evidence.
|
|
18
|
+
|
|
19
|
+
## Architecture
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
Clinical Question
|
|
23
|
+
↓
|
|
24
|
+
R1 Reasoning Chain (decompose into sub-questions)
|
|
25
|
+
↓
|
|
26
|
+
Medical Search Agent
|
|
27
|
+
├── PubMed (MeSH terms)
|
|
28
|
+
├── ClinicalTrials.gov
|
|
29
|
+
├── Cochrane Library
|
|
30
|
+
└── WHO ICTRP
|
|
31
|
+
↓
|
|
32
|
+
Evidence Extraction Agent
|
|
33
|
+
├── PICO extraction
|
|
34
|
+
├── Study design classification
|
|
35
|
+
├── Outcome extraction
|
|
36
|
+
└── Risk of bias assessment
|
|
37
|
+
↓
|
|
38
|
+
Synthesis Agent (evidence grading)
|
|
39
|
+
↓
|
|
40
|
+
Clinical Answer + Evidence Report
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
from med_researcher_r1 import MedResearcherR1
|
|
47
|
+
|
|
48
|
+
researcher = MedResearcherR1(
|
|
49
|
+
llm_provider="anthropic",
|
|
50
|
+
search_backends=["pubmed", "clinical_trials", "cochrane"],
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
# Complex clinical question
|
|
54
|
+
result = researcher.research(
|
|
55
|
+
question="In patients with treatment-resistant depression, "
|
|
56
|
+
"how does psilocybin-assisted therapy compare to "
|
|
57
|
+
"esketamine in terms of remission rates and "
|
|
58
|
+
"long-term outcomes?",
|
|
59
|
+
evidence_level="systematic", # systematic, rapid, scoping
|
|
60
|
+
max_papers=50,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
print(result.summary)
|
|
64
|
+
print(f"\nEvidence quality: {result.evidence_grade}")
|
|
65
|
+
print(f"Papers analyzed: {len(result.papers)}")
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Reasoning Chain
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
# Inspect the R1 reasoning chain
|
|
72
|
+
for step in result.reasoning_chain:
|
|
73
|
+
print(f"\nStep {step.number}: {step.type}")
|
|
74
|
+
print(f" Question: {step.question}")
|
|
75
|
+
print(f" Strategy: {step.search_strategy}")
|
|
76
|
+
print(f" Findings: {step.key_finding}")
|
|
77
|
+
print(f" Next: {step.next_action}")
|
|
78
|
+
|
|
79
|
+
# Example chain:
|
|
80
|
+
# Step 1: DECOMPOSE — Split into psilocybin efficacy,
|
|
81
|
+
# esketamine efficacy, head-to-head comparisons
|
|
82
|
+
# Step 2: SEARCH — PubMed: psilocybin depression RCT
|
|
83
|
+
# Step 3: EXTRACT — 3 RCTs found, extract PICO + outcomes
|
|
84
|
+
# Step 4: SEARCH — PubMed: esketamine depression outcomes
|
|
85
|
+
# Step 5: SYNTHESIZE — Compare evidence, note no direct
|
|
86
|
+
# head-to-head trials exist
|
|
87
|
+
# Step 6: CONCLUDE — Indirect comparison with caveats
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Evidence Grading
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
# GRADE methodology for evidence quality
|
|
94
|
+
for paper in result.papers[:5]:
|
|
95
|
+
print(f"\n{paper.title} ({paper.year})")
|
|
96
|
+
print(f" Design: {paper.study_design}")
|
|
97
|
+
print(f" Sample: {paper.sample_size}")
|
|
98
|
+
print(f" Grade: {paper.evidence_grade}")
|
|
99
|
+
print(f" Risk of bias: {paper.risk_of_bias}")
|
|
100
|
+
|
|
101
|
+
# Aggregate evidence
|
|
102
|
+
print(f"\nOverall certainty: {result.certainty}")
|
|
103
|
+
# HIGH / MODERATE / LOW / VERY LOW
|
|
104
|
+
print(f"Recommendation: {result.recommendation}")
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Medical Search Configuration
|
|
108
|
+
|
|
109
|
+
```python
|
|
110
|
+
researcher = MedResearcherR1(
|
|
111
|
+
search_config={
|
|
112
|
+
"pubmed": {
|
|
113
|
+
"use_mesh": True,
|
|
114
|
+
"date_range": "2019/01/01:2025/12/31",
|
|
115
|
+
"article_types": [
|
|
116
|
+
"Randomized Controlled Trial",
|
|
117
|
+
"Meta-Analysis",
|
|
118
|
+
"Systematic Review",
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
"clinical_trials": {
|
|
122
|
+
"status": ["Completed", "Active, not recruiting"],
|
|
123
|
+
"phase": ["Phase 3", "Phase 4"],
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
reasoning_config={
|
|
127
|
+
"max_chain_length": 10,
|
|
128
|
+
"reflection_enabled": True,
|
|
129
|
+
"uncertainty_explicit": True,
|
|
130
|
+
},
|
|
131
|
+
)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Clinical Use Cases
|
|
135
|
+
|
|
136
|
+
1. **Clinical queries**: Evidence-based answers to medical questions
|
|
137
|
+
2. **Drug comparison**: Indirect comparison when no head-to-head data
|
|
138
|
+
3. **Guideline review**: Check evidence supporting clinical guidelines
|
|
139
|
+
4. **Case analysis**: Literature context for unusual presentations
|
|
140
|
+
5. **Grant proposals**: Evidence landscape for research funding
|
|
141
|
+
|
|
142
|
+
## References
|
|
143
|
+
|
|
144
|
+
- [MedResearcher-R1 GitHub](https://github.com/AQ-MedAI/MedResearcher-R1)
|
|
145
|
+
- [PubMed E-utilities](https://www.ncbi.nlm.nih.gov/books/NBK25501/)
|
|
146
|
+
- [GRADE Handbook](https://gdt.gradepro.org/app/handbook/handbook.html)
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ncbi-blast-api
|
|
3
|
+
description: "Run sequence similarity searches via the NCBI BLAST REST API"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "🧪"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "biomedical"
|
|
9
|
+
keywords: ["BLAST", "sequence alignment", "NCBI", "homology search", "protein similarity", "nucleotide search"]
|
|
10
|
+
source: "https://blast.ncbi.nlm.nih.gov/"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# NCBI BLAST REST API
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
BLAST (Basic Local Alignment Search Tool) is the most widely used bioinformatics tool, comparing nucleotide or protein sequences against databases to find regions of similarity. The NCBI BLAST REST API enables programmatic submission of searches, status polling, and result retrieval. Free, no authentication required (but rate-limited).
|
|
18
|
+
|
|
19
|
+
## API Workflow
|
|
20
|
+
|
|
21
|
+
BLAST searches are asynchronous: submit → poll → retrieve.
|
|
22
|
+
|
|
23
|
+
### Step 1: Submit Search
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# Nucleotide BLAST (blastn)
|
|
27
|
+
curl -X POST "https://blast.ncbi.nlm.nih.gov/blast/Blast.cgi" \
|
|
28
|
+
-d "CMD=Put&PROGRAM=blastn&DATABASE=nt&QUERY=ATGCGATCGATCG..."
|
|
29
|
+
|
|
30
|
+
# Protein BLAST (blastp)
|
|
31
|
+
curl -X POST "https://blast.ncbi.nlm.nih.gov/blast/Blast.cgi" \
|
|
32
|
+
-d "CMD=Put&PROGRAM=blastp&DATABASE=nr&QUERY=MKTLLLTLVVVTIVCL..."
|
|
33
|
+
|
|
34
|
+
# BLAST with specific parameters
|
|
35
|
+
curl -X POST "https://blast.ncbi.nlm.nih.gov/blast/Blast.cgi" \
|
|
36
|
+
-d "CMD=Put&PROGRAM=blastn&DATABASE=nt&QUERY=SEQUENCE&\
|
|
37
|
+
EXPECT=0.001&WORD_SIZE=11&HITLIST_SIZE=50"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Step 2: Check Status
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Poll for completion (returns XML with Status field)
|
|
44
|
+
curl "https://blast.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Get&FORMAT_OBJECT=SearchInfo&RID=YOUR_RID"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 3: Retrieve Results
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Get results in XML
|
|
51
|
+
curl "https://blast.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Get&FORMAT_TYPE=XML&RID=YOUR_RID"
|
|
52
|
+
|
|
53
|
+
# Get results in JSON
|
|
54
|
+
curl "https://blast.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Get&FORMAT_TYPE=JSON2_S&RID=YOUR_RID"
|
|
55
|
+
|
|
56
|
+
# Get results in tabular format
|
|
57
|
+
curl "https://blast.ncbi.nlm.nih.gov/blast/Blast.cgi?CMD=Get&FORMAT_TYPE=Tabular&RID=YOUR_RID"
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### BLAST Programs
|
|
61
|
+
|
|
62
|
+
| Program | Query → Database | Use case |
|
|
63
|
+
|---------|-----------------|----------|
|
|
64
|
+
| `blastn` | Nucleotide → Nucleotide | DNA/RNA similarity |
|
|
65
|
+
| `blastp` | Protein → Protein | Protein homology |
|
|
66
|
+
| `blastx` | Translated nuc → Protein | Find protein homologs of DNA |
|
|
67
|
+
| `tblastn` | Protein → Translated nuc | Find DNA encoding similar protein |
|
|
68
|
+
| `tblastx` | Translated nuc → Translated nuc | Compare at protein level |
|
|
69
|
+
|
|
70
|
+
### Common Databases
|
|
71
|
+
|
|
72
|
+
| Database | Content |
|
|
73
|
+
|----------|---------|
|
|
74
|
+
| `nt` | All GenBank nucleotide sequences |
|
|
75
|
+
| `nr` | Non-redundant protein sequences |
|
|
76
|
+
| `refseq_rna` | RefSeq RNA sequences |
|
|
77
|
+
| `refseq_protein` | RefSeq protein sequences |
|
|
78
|
+
| `swissprot` | UniProtKB/Swiss-Prot (curated) |
|
|
79
|
+
| `pdb` | Protein Data Bank sequences |
|
|
80
|
+
|
|
81
|
+
### Key Parameters
|
|
82
|
+
|
|
83
|
+
| Parameter | Description | Default |
|
|
84
|
+
|-----------|-------------|---------|
|
|
85
|
+
| `PROGRAM` | BLAST program | Required |
|
|
86
|
+
| `DATABASE` | Target database | Required |
|
|
87
|
+
| `QUERY` | Sequence or accession | Required |
|
|
88
|
+
| `EXPECT` | E-value threshold | `10` |
|
|
89
|
+
| `WORD_SIZE` | Word size | `11` (blastn), `6` (blastp) |
|
|
90
|
+
| `HITLIST_SIZE` | Max results | `100` |
|
|
91
|
+
| `MATRIX` | Scoring matrix (protein) | `BLOSUM62` |
|
|
92
|
+
| `FILTER` | Low complexity filter | `L` |
|
|
93
|
+
| `ENTREZ_QUERY` | Restrict to organism | `Homo sapiens[ORGN]` |
|
|
94
|
+
|
|
95
|
+
## Python Usage
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
import time
|
|
99
|
+
import requests
|
|
100
|
+
from xml.etree import ElementTree
|
|
101
|
+
|
|
102
|
+
BLAST_URL = "https://blast.ncbi.nlm.nih.gov/blast/Blast.cgi"
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def submit_blast(sequence: str, program: str = "blastn",
|
|
106
|
+
database: str = "nt",
|
|
107
|
+
evalue: float = 0.001) -> str:
|
|
108
|
+
"""Submit a BLAST search, return Request ID."""
|
|
109
|
+
resp = requests.post(BLAST_URL, data={
|
|
110
|
+
"CMD": "Put",
|
|
111
|
+
"PROGRAM": program,
|
|
112
|
+
"DATABASE": database,
|
|
113
|
+
"QUERY": sequence,
|
|
114
|
+
"EXPECT": evalue,
|
|
115
|
+
"HITLIST_SIZE": 50,
|
|
116
|
+
})
|
|
117
|
+
resp.raise_for_status()
|
|
118
|
+
|
|
119
|
+
for line in resp.text.split("\n"):
|
|
120
|
+
if "RID = " in line:
|
|
121
|
+
return line.split("=")[1].strip()
|
|
122
|
+
raise ValueError("No RID in response")
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def wait_for_results(rid: str, poll_interval: int = 15,
|
|
126
|
+
max_wait: int = 300) -> bool:
|
|
127
|
+
"""Poll until BLAST search completes."""
|
|
128
|
+
elapsed = 0
|
|
129
|
+
while elapsed < max_wait:
|
|
130
|
+
resp = requests.get(BLAST_URL, params={
|
|
131
|
+
"CMD": "Get",
|
|
132
|
+
"FORMAT_OBJECT": "SearchInfo",
|
|
133
|
+
"RID": rid,
|
|
134
|
+
})
|
|
135
|
+
if "Status=READY" in resp.text:
|
|
136
|
+
return True
|
|
137
|
+
if "Status=FAILED" in resp.text:
|
|
138
|
+
raise RuntimeError("BLAST search failed")
|
|
139
|
+
time.sleep(poll_interval)
|
|
140
|
+
elapsed += poll_interval
|
|
141
|
+
raise TimeoutError(f"BLAST timed out after {max_wait}s")
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def get_results(rid: str) -> list:
|
|
145
|
+
"""Retrieve BLAST results as parsed hits."""
|
|
146
|
+
resp = requests.get(BLAST_URL, params={
|
|
147
|
+
"CMD": "Get",
|
|
148
|
+
"FORMAT_TYPE": "XML",
|
|
149
|
+
"RID": rid,
|
|
150
|
+
})
|
|
151
|
+
resp.raise_for_status()
|
|
152
|
+
|
|
153
|
+
root = ElementTree.fromstring(resp.text)
|
|
154
|
+
ns = ""
|
|
155
|
+
hits = []
|
|
156
|
+
for hit in root.iter(f"{ns}Hit"):
|
|
157
|
+
hsps = hit.find(f"{ns}Hit_hsps")
|
|
158
|
+
hsp = hsps.find(f"{ns}Hsp") if hsps is not None else None
|
|
159
|
+
hits.append({
|
|
160
|
+
"accession": hit.findtext(f"{ns}Hit_accession", ""),
|
|
161
|
+
"description": hit.findtext(f"{ns}Hit_def", ""),
|
|
162
|
+
"length": int(hit.findtext(f"{ns}Hit_len", "0")),
|
|
163
|
+
"evalue": float(hsp.findtext(f"{ns}Hsp_evalue", "999"))
|
|
164
|
+
if hsp is not None else 999,
|
|
165
|
+
"identity": float(hsp.findtext(f"{ns}Hsp_identity", "0"))
|
|
166
|
+
if hsp is not None else 0,
|
|
167
|
+
"score": float(hsp.findtext(f"{ns}Hsp_bit-score", "0"))
|
|
168
|
+
if hsp is not None else 0,
|
|
169
|
+
})
|
|
170
|
+
return hits
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
# Example: BLAST a short DNA sequence
|
|
174
|
+
rid = submit_blast("ATGCGATCGATCGATCGATCGATCG", program="blastn")
|
|
175
|
+
print(f"Submitted BLAST search: {rid}")
|
|
176
|
+
|
|
177
|
+
wait_for_results(rid)
|
|
178
|
+
hits = get_results(rid)
|
|
179
|
+
for h in hits[:5]:
|
|
180
|
+
print(f"{h['accession']}: {h['description'][:60]}...")
|
|
181
|
+
print(f" E-value: {h['evalue']:.2e} | Identity: {h['identity']}")
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Rate Limits
|
|
185
|
+
|
|
186
|
+
- Max 1 request per 10 seconds for search submission
|
|
187
|
+
- Max concurrent searches: varies by load
|
|
188
|
+
- NCBI requests a contact email in User-Agent header
|
|
189
|
+
|
|
190
|
+
## References
|
|
191
|
+
|
|
192
|
+
- [NCBI BLAST](https://blast.ncbi.nlm.nih.gov/)
|
|
193
|
+
- [BLAST URL API Guide](https://blast.ncbi.nlm.nih.gov/doc/blast-help/developerinfo.html)
|
|
194
|
+
- [BLAST Command Line](https://www.ncbi.nlm.nih.gov/books/NBK279690/)
|
|
195
|
+
- Altschul, S.F. et al. (1990). "Basic local alignment search tool." *J. Mol. Biol.* 215(3).
|