PKU-YuanGroup/OpenAI4S
GitHub: PKU-YuanGroup/OpenAI4S
开源的 Code-as-Action 科学研究 Agent,通过持久化 Python/R 内核和 JSON 编排引擎,以低成本复现 Claude Science 的科学研究自动化能力。
Stars: 91 | Forks: 11
Volcengine Ark · Agent Plan (Personal) — the entry Small tier is ¥9.9 / month.
## 🧬 JSON 编排,Code-as-Action 科学计算
OpenAI4S 刻意采用了两个动作平面。提供商原生的 **JSON 工具调用**负责处理确定性的编排、权限、元数据、外部服务以及人工审批。**Python/R Code-as-Action** 负责在持久化的内核中处理计算、探索、分析、模拟以及长时间运行的科学任务。Python cells 在运行时可以同步调用内核内的 `host` API;而 R 则是一个独立的持久化分析通道。
这不是在工具和代码之间做单选题:两者各司其职。纯工具和对话类工作可以通过引擎拥有的、结构严格的 `finalize_response` 动作来完成。科学计算 cells 保留了重要的 `host.submit_output(...)` 完成契约,包括结构化的产出物和指标。`host.submit_output` 是唯一可以在 Cell *内部* 触发的完成信号;在之前的 Cells 运行完毕后,后续单独的 `finalize_response` 仍然可以关闭 Engine。
| JSON 控制平面 | Python/R 科学计算平面 |
| 最适用场景 | 工作流、权限、元数据、服务 | 计算、分析、模拟 |
| 动作单元 | 一个有序的原生工具批次 | 一个完整的代码 cell |
| 组合 | 可审计的 schema 和资源策略 | for、if、第三方库、cell 内的 Host RPC |
| 状态 | 只追加的 Action Ledger | 内核内存 + 版本化的产出物 |
| 完成方式 | 引擎拥有的 finalize_response | host.submit_output(...) |
| 扩展 | 命名的 Tool 子类 | 导入第三方库或加载 Skill |
|
```
# ReAct:~14 次往返(read → … → filter → sort → plot)。 OpenAI4S:一个 code cell。
hits = [f for f in files if pattern in host.read_file(f)]
top3 = sorted(hits, key=os.path.getsize, reverse=True)[:3]
frames = [pd.read_csv(f) for f in top3] # a 100k-row DataFrame stays in the kernel...
host.save_artifact(plot(frames)) # ...only "" hits context
```
|
## 📣 新闻
- **`2026-07-06`** 🎉 **正式开源** — 包含纯标准库实现的 Code-as-Action 引擎、科学 Web 应用、24 个科学 Skills 以及 BYOC 远程计算功能。
## 😮 亮点
- **🧬 混合动作引擎** — 基于类的原生 JSON 工具负责编排,而持久化的 Python/R 内核负责执行科学计算。CLI 和 Web 适配器会延迟启动语言环境,因此仅涉及工具/finalize 的运行不会生成内核。
- **📒 Ledger 优先的运行时** — 动作组/事件和终端事实均为只追加;执行尝试、生成生命周期、使用量和完成记录均可持久化且可重构。
- **🐍 纯标准库核心** — 引擎**和** Web 服务器均仅使用标准库(`http.server` + 手工编写的 WebSocket,无框架,无额外依赖项)。LLM 客户端完全通过 `urllib` 与 OpenAI / Anthropic / Gemini 通信。
- **🔌 一行代码多提供商支持** — `ark`(doubao · glm · kimi · deepseek · minimax)以及官方的 `chatgpt · claude · gemini`,统一由单个 `host.llm` 提供支持;可在 UI 中切换。
- **🖥️ 科学工作台** — 实时流媒体传输、版本化产出物、溯源信息、Action Timeline 表面,以及一个**默认只读的 Notebook**。通过显式的开发者标志,可以针对共享内核启用多行 Python/R 输入。
- **🔐 强化的本地执行** — 严格的子环境允许列表、持久化的审批机制、一次性的受生成周期限制的 `host.bash` 功能,以及 OS 沙箱适配器(macOS 上使用 Seatbelt,Linux 上使用 bubblewrap),并带有可见的降级/故障关闭模式。
- **🔬 内置 24 个 Skills** — 14 个 GPU/模型科学 Skills(AlphaFold2 · ESMFold2 · Boltz · Chai-1 · OpenFold3 · ProteinMPNN · ESM-2 · Evo2 · Borzoi · scGPT · scVI · DiffDock …)+ 研究工作流 Skills。Skills 是**代码的配方**,而不是 JSON schema;用户自编写的 Skills 仅保留在数据目录下,无法覆盖内置的信任机制。
- **☁️ BYOC 远程计算** — 通过 `ssh:
` 或内置的 **NVIDIA NIM** 提供商将 GPU 任务分发到你自己的机器上;在严格的禁止伪造策略下提供真实的 `host.fold`(单序列 Protenix / AF3 级别)。
## 🎬 演示
Live API workflow — from UniProt / RCSB to a 3D structure & report
 |
Real-data analysis — human insulin INS (P01308): from UniProt / RCSB to a reproducible report
 |
Visual artifact editing — “raise the confidence cutoff to 75” in one line
 |
Annotation-driven chart editing — lasso a region & recolor the legend
 |
Plan-mode research — artemisinin & paclitaxel solubility prediction
 |
Protein engineering — from sequence to ranked mutants & structural rationale
 |
## ⚡ 快速开始
```
git clone https://github.com/PKU-YuanGroup/OpenAI4S && cd OpenAI4S
./setup.sh # one-time: build the environment with uv
./start.sh # launch the web UI at http://127.0.0.1:8760/
```
`setup.sh` 会使用 **uv** 创建 `.venv`;`start.sh` 会从中启动 daemon + Web UI。启动时无需 API key — **在 UI 中设置你的模型**(Customize → Models)。如果不需要 UI 一次性运行:`uv run openai4s run "Compute the mean of [4,8,15,16,23,42] and submit it." -v`。
## 📚 文档
| 文档 | 内容 |
|---|---|
| [**架构**](docs/architecture.md) | 混合动作路由器、Action Ledger、`host` RPC 和惰性内核 |
| [**后端扩展指南**](docs/backend-extension-guide.md) | 新的 Tool 类、host 服务、仓库和 session 行为应放置的位置 |
| [**Skills**](docs/skills.md) | 24 个内置 Skills + 如何编写自己的 Skill |
| [**远程计算**](docs/compute.md) | BYOC GPU 任务、`host.fold`、自动配置 |
| [**Web 应用**](docs/webapp.md) | UI 功能、Action Timeline、只读 Notebook、产出物及实现状态 |
| [**Jupyter 适配器**](docs/jupyter.md) | 可选的独立 Python/R KernelSpecs、安装命令及兼容性限制 |
| [**配置**](docs/configuration.md) | 模型提供商、环境变量、conda 环境、CLI |
| [**安全性**](docs/security.md) | 纵深防御安全层及远程访问注意事项 |
## 🗺️ 路线图
- [x] 发布下一代工作台基础:分支激活和只追加的 Revert/Undo 投影、带有显式 Partial/Failed 状态的验证恢复、依赖级别的陈旧状态传播、持久化委托、隔离的可移植 Session 包、检查点化的计划/审查/记忆状态,以及专用的 2D 化学/基因组/序列/MSA/LaTeX 渲染器。任意内存中的命名空间对象被刻意不进行序列化;除非有安全的配方可以重建并验证它们,否则恢复状态将保持为 Partial。
- [ ] 在可能的情况下,在 bubblewrap 之外添加更强的 Linux 隔离(例如 seccomp),并扩大打包沙箱的冒烟测试覆盖范围。
- [ ] 超越 DuckDuckGo 的无密钥 `web_search`(提高速率限制恢复能力)。
- [ ] 除了 SSH + NVIDIA NIM 之外,提供更多的 BYOC 提供商(Modal / SLURM)。
- [ ] 端到端科学工作流的公共基准测试。
- [ ] 本地 GPU 模型服务,使结构/设计相关的 Skills 无需远程计算即可运行。
## 👍 致谢与相关工作
- **Claude Science** (Anthropic) — 作为一个闭源的参考架构,OpenAI4S 在开源层面上独立复现了其 Code-as-Action 设计、持久化内核、host-RPC 协议和安全层。
- **CodeAct** — *"Executable Code Actions Elicit Better LLM Agents"* — 将代码作为一种统一的动作接口。
- **ReAct** — *"Synergizing Reasoning and Acting in Language Models"* — 本项目扬弃的 `tool_use` 基准。
- 科学 Skills 站在 **ColabFold / AlphaFold, ESM, OpenFold, Boltz, Chai, ProteinMPNN, DiffDock, Evo2, Borzoi, scGPT, scVI-tools** 以及开放数据服务(NCBI、UniProt、RCSB PDB、EBI、OpenAlex、Crossref)的肩膀上。
## 🔒 许可证
基于 **MIT License** 发布 — 见 [`LICENSE`](LICENSE)。
## ✏️ 引用
```
@software{openai4s2026,
title = {OpenAI4S: An Open-Source Code-as-Action Scientific Research Agent},
author = {OpenAI4S contributors},
year = {2026},
url = {https://github.com/PKU-YuanGroup/OpenAI4S},
note = {Open AI for Scientist — a pure-stdlib reproduction of the Code-as-Action paradigm}
}
```
标签:AI工作流编排, AI智能体, Python, 大语言模型API, 无后门, 科学研究, 豆包API, 逆向工具