内容
# 开放科学工具包

用于构建类似Claude-Science风格的研究代理的开源可重复使用的组件,基于29种技能、4种代理配置文件、24个领域MCP服务器、一个有状态的Python内核和一个带有3D结构查看器的浏览器聊天界面。
```bash
pip install -e . --no-deps
cp .env.example .env # 设置LLM_BASE_URL / LLM_MODEL / LLM_API_KEY
python -m open_science.server --serve --port 8000
# http://localhost:8000/ 聊天界面
# http://localhost:8000/docs API面板
```
---
## 📦 技能 — 29种研究技能
代理的任务指令,按主题分组。每种技能都是一个带有YAML前言的`SKILL.md`文件,按需加载([代理技能格式](https://docs.claude.com/en/docs/agents-and-tools/agent-skills))。
| 主题 | 数量 | 示例 |
|---|---|---|
| 🧬 结构预测与对接 | 6 | AlphaFold2, Boltz, Chai-1, ESMFold2, OpenFold3, DiffDock |
| ✏️ 蛋白质设计与嵌入 | 4 | ProteinMPNN, LigandMPNN, SolubleMPNN, ESM-2 |
| 🔬 基因组学与单细胞 | 4 | Borzoi, Evo-2, scGPT, scVI |
| 📊 图表与可视化 | 2 | figure-composer, figure-style |
| 📝 文献与写作 | 4 | literature-review, paper-narrative, indication-dossier, pdf-explore |
| ⚙️ 计算与工作流 | 9 | remote-compute (Modal/SSH), skill-creator, customize, self-awareness |
### 🧬 结构预测与对接(6)
| 技能 | 目的 |
|---|---|
| [alphafold2](skills_assets/alphafold2/SKILL.md) | 使用AlphaFold2进行单体和多体结构预测 |
| [boltz](skills_assets/boltz/SKILL.md) | 蛋白质/核酸/小分子复合物预测 |
| [chai1](skills_assets/chai1/SKILL.md) | 蛋白质/核酸/小分子复合物预测 |
| [esmfold2](skills_assets/esmfold2/SKILL.md) | 使用ESMFold2/ESMFold2-Fast进行全原子共折叠 |
| [openfold3](skills_assets/openfold3/SKILL.md) | 使用开放权重OpenFold3进行结构预测 |
| [diffdock](skills_assets/diffdock/SKILL.md) | 基于扩散的蛋白质-配体对接 |
### ✏️ 蛋白质设计与嵌入(4)
| 技能 | 目的 |
|---|---|
| [proteinmpnn](skills_assets/proteinmpnn/SKILL.md) | 将骨架反向折叠为序列 |
| [ligandmpnn](skills_assets/ligandmpnn/SKILL.md) | 在配体/核酸/金属环境下反向折叠 |
| [solublempnn](skills_assets/solublempnn/SKILL.md) | 倾向于可溶序列的反向折叠 |
| [fair-esm2](skills_assets/fair-esm2/SKILL.md) | 使用Meta的ESM-2进行蛋白质嵌入 |
### 🔬 基因组学与单细胞(4)
| 技能 | 目的 |
|---|---|
| [borzoi](skills_assets/borzoi/SKILL.md) | 从DNA预测全基因组功能轨迹 |
| [evo2](skills_assets/evo2/SKILL.md) | 使用Evo 2评估/嵌入/生成DNA |
| [scgpt](skills_assets/scgpt/SKILL.md) | 使用scGPT嵌入和注释单细胞表达 |
| [scvi-tools](skills_assets/scvi-tools/SKILL.md) | 使用scVI进行概率单细胞RNA-seq |
### 📊 图表与可视化(2)
| 技能 | 目的 |
|---|---|
| [figure-composer](skills_assets/figure-composer/SKILL.md) | 组成出版级多面板图表 |
| [figure-style](skills_assets/figure-style/SKILL.md) | 图表正确性和易读性规则 |
### 📝 文献与写作(4)
| 技能 | 目的 |
|---|---|
| [literature-review](skills_assets/literature-review/SKILL.md) | 查找、验证和合成科学文献 |
| [paper-narrative](skills_assets/paper-narrative/SKILL.md) | 判断和重塑论文图表所讲述的故事 |
| [indication-dossier](skills_assets/indication-dossier/SKILL.md) | 生成治疗适应症档案 |
| [pdf-explore](skills_assets/pdf-explore/SKILL.md) | 在整个PDF中定位/比较/提取 |
### ⚙️ 计算与工作流(9)
| 技能 | 目的 |
|---|---|
| [compute-env-setup](skills_assets/compute-env-setup/SKILL.md) | 在远程计算上设置运行时 |
| [remote-compute-modal](skills_assets/remote-compute-modal/SKILL.md) | 在Modal账户上运行GPU作业 |
| [remote-compute-ssh](skills_assets/remote-compute-ssh/SKILL.md) | 在SSH/SLURM主机上提交→等待→收获 |
| [managed-model-endpoints](skills_assets/managed-model-endpoints/SKILL.md) | 注册本地/远程模型服务端点 |
| [using-model-endpoint](skills_assets/using-model-endpoint/SKILL.md) | 通过HTTP API调用注册端点 |
| [skill-creator](skills_assets/skill-creator/SKILL.md) | 创建、改进和基准测试技能 |
| [customize](skills_assets/customize/SKILL.md) | 编写自定义代理配置文件和新技能 |
| [self-awareness](skills_assets/self-awareness/SKILL.md) | 通过`host.query()`自省会话数据库/SDK |
| [product-self-knowledge](skills_assets/product-self-knowledge/SKILL.md) | 将产品事实置于权威来源中 |
---
## 🤖 代理 — 4种配置文件
每个代理都是一个定义身份提示、工作方式规则和能力开关的`metadata.yaml`文件(`excluded_tools`、`enable_thinking`等)。
| 代理 | 角色 |
|---|---|
| [operon](agents_assets/operon/metadata.yaml) | 主要科学计算代理(完整工具) |
| [onboarding](agents_assets/onboarding/metadata.yaml) | 首次运行引导设置(仅限询问) |
| [reviewer](agents_assets/reviewer/metadata.yaml) | 转录幻觉/制造审查 |
| [bookmarker](agents_assets/bookmarker/metadata.yaml) | 从对话中提取关键点 |
工具修剪将`excluded_tools`否决列表映射到OpenHands的`filter_tools_regex`(一个正匹配过滤器),通过负面展望正则表达式 —
参见[`src/open_science/agents.py`](src/open_science/agents.py)。
---
## 🔌 MCP服务器 — 24个领域服务器
标准[模型上下文协议](https://modelcontextprotocol.io)服务器,封装公共科学API,按需注入查询领域。
| 服务器 | 领域 |
|---|---|
| mcp_bio | 一般生物查找 |
| mcp_literature / mcp_pubmed / mcp_biorxiv | 文献与预印本 |
| mcp_genomes / mcp_genomics | 基因组组装 |
| mcp_variants / mcp_human_genetics / mcp_clinical_genomics | 变体与临床遗传学 |
| mcp_expression / mcp_regulation / mcp_rna | 表达与调控 |
| mcp_protein_annotation / mcp_structures_interactions | 蛋白质与结构 |
| mcp_chembl / mcp_chemistry / mcp_zinc | 化学与化合物 |
| mcp_clinical_trials / mcp_drug_regulatory | 试验与监管 |
| mcp_cellguide / mcp_cancer_models | 细胞与癌症模型 |
| mcp_genes_ontologies / mcp_omics_archives / mcp_biomart / mcp_research_resources | 本体论与档案 |
所有服务器共享`mcp_servers_common`(速率限制、重试、门控)。与任何MCP客户端(Claude Desktop、Cursor等)兼容。
---
## 🏗️ 架构
| 层 | 实现 |
|---|---|
| 运行时 | OpenHands V1 SDK(MIT),`LocalWorkspace` — 无Docker启动 |
| 大脑 | 任何OpenAI兼容端点,仅通过环境变量提供凭证 |
| 内核 | `KernelSession`(`jupyter_client` + `ipykernel`),变量在单元格之间持久化 |
| 技能 | 搜索加载器,基于搜索的延迟注入(菜单优先,匹配后加载正文) |
| 代理 | OpenHands `Agent` + `filter_tools_regex`工具修剪 |
| 3D查看器 | 3Dmol.js嵌入在自包含的Web UI中 |
参见[`docs/design-teardown/`](docs/design-teardown/)了解设计模式的详细解释,
以及[`docs/ROADMAP.md`](docs/ROADMAP.md)了解分阶段构建和沙盒笔记。
---
## 📁 内容
这里的所有内容都是可重复使用的 — 克隆并将这些部分组装到您自己的代理中。
**1. 组装代码** — `src/open_science/`(~340个Python文件)
| 模块 | 功能 |
|---|---|
| `server.py` | FastAPI线路:安装聊天界面在OpenHands代理服务器上,添加`POST /chat/send` |
| `agents.py` | 代理配置文件加载器 + `excluded_tools` → `filter_tools_regex`修剪桥 |
| `runtime.py` | `KernelSession` — 有状态的IPython内核(变量在单元格之间持久化) |
| `brain.py` | 从任何OpenAI兼容端点构建`LLM`(仅环境变量凭证) |
| `skills/` | 技能加载器 — 菜单优先,延迟正文注入在`search_skills`匹配 |
| `datasources/` | MCP源注册表 + 按需注入(`inject.py`、`registry.py`、`launcher.py`) |
| `provenance/` | 只读SQLite模式 + `host.query()`表面用于工件/自我检查 |
| `render/` | 工件渲染(结构文件 → 3D查看器) |
| `remote.py` | 远程GPU计算(Modal/SSH BYOC)胶水 |
| `web/` | 自包含聊天界面:`index.html` + `3Dmol-min.js`(无外部CDN) |
**2. 技能** — `skills_assets/`(29个`SKILL.md` + 79个帮助脚本)
上述完整的技能目录,每个目录都有一个`SKILL.md`及其脚本。可直接应用于任何Agent-Skills兼容的框架。
**3. 代理配置文件** — `agents_assets/`(4个`metadata.yaml`)
`operon` / `onboarding` / `reviewer` / `bookmarker` — 身份提示、工作方式规则和每个角色的能力开关。
**4. MCP数据源** — `src/open_science/datasources/vendor/`(24个领域服务器,62个API客户端)
24个`mcp_*`服务器聚合了62个HTTP客户端,涵盖公共科学API,所有服务器共享一个公共层(`mcp_servers_common`:速率限制、重试、门控)。可独立使用,适用于任何MCP客户端。
**5. 设计拆解** — `docs/design-teardown/`(9章)
解释上述设计模式:配置文件即调优日志、身份/工作方式分离、检索-不重算、渐进披露、MCP聚合、自我知识和可转移原则表。
**6. 验证脚本** — `tests/`(6个阶段检查)
每个阶段的烟雾测试(`verify_stage0..5.py`)涵盖大脑往返、状态内核、MCP源、技能加载和代理修剪。
---
## 🔒 安全
- API密钥仅通过环境变量(`.env`被gitignore)
- 会话内容通过大脑端点传递 — 发送敏感数据作为工件指针,而不是原始数据
- 数据源调用公共API;尊重其速率限制和服务条款
- 模型权重携带其自己的许可证
## 📄 许可证
Apache-2.0 — 参见 [LICENSE](LICENSE) 和 [THIRD_PARTY_LICENSES.md](THIRD_PARTY_LICENSES.md)。
基于 [OpenHands](https://github.com/All-Hands-AI/OpenHands) (MIT),3Dmol.js(BSD)。