大多数 AI Agent 干活的方式是这样的:模型面对一份提前准备好的工具菜单,判断该调用哪个工具,然后一步一步往下走。简单任务够用,但科研不是三五步能搞定的事。
查多个数据库、下载数据、清洗数据、反复改代码、调用专业算法、请求算力、生成图表、整理报告——任何一步出问题都可能要回头重来。元空 AI Science(OpenAI4S)给出的答案是 Code-as-Action(代码即行动),并以 MIT 协议开源、零依赖、内置 30 多项科研 Skills。
Step 1:工具菜单 vs 代码即行动
| 维度 | 工具菜单式 | Code-as-Action |
|---|---|---|
| 执行单位 | 一次一个工具调用 | 一段可含循环与判断的代码 |
| 处理 100 个文件 | 调用 100 次,每次回传模型 | 一个 for 循环,一次执行 |
| 中间数据 | 每步都要塞回上下文 | 留在内核工作环境里 |
| 条件分支 | 靠模型每轮重新判断 | 代码里的 if 直接搞定 |
| token 消耗 | 随步骤数线性增长 | 与数据量基本解耦 |
OpenAI4S 让智能体直接生成 Python 或 R 代码,并在一个持续运行的内核环境中执行。循环、条件判断、批量数据处理和绘图可以组合在一次执行里完成;数据和中间结果也不必在每一步重新交给模型,而是保留在工作环境中。
Step 2:持久内核带来的连贯性
对使用者来说,最直接的变化是 AI 可以把更长、更复杂的任务串起来:
持久内核下的典型链路
第 1 步 下载数据 → df 变量留在内核里
第 2 步 清洗 → 直接操作 df,不用重新读文件
第 3 步 特征计算 → 中间矩阵留在内存
第 4 步 绘图 → 图片自动保存
第 5 步 写报告 → 引用前面所有产物
对比:无状态执行
每一步都要重新读文件、重新加载
中间结果靠模型上下文传递(很快就爆)
一个环节改动,整条链重跑
三个直接收益:前一步下载的数据可以直接交给后一步分析;生成的图片、表格和报告会自动保存;研究人员也能随时打开 Notebook,检查代码、接手分析或修改结果。
持久内核也有代价:状态污染。跑了几十步之后,内核里堆满了各种中间变量,一个同名变量被覆盖就可能让后续结果悄悄出错。务实做法:关键节点把数据落盘(parquet / csv),而不是全靠内存变量传递。这样即使内核崩了或状态乱了,也能从最近的落盘点续跑。
Step 3:一个完整的例子——蛋白质分析
官方给的示例任务是分析一个蛋白质,整条链路是这样的:
任务:分析某个蛋白质
① 检索真实的蛋白质序列和结构数据(公开科研数据源)
② 完成特征计算与可视化
③ 把分析过程、数据来源和结果一起写进报告
强调的一点:数据是真的,计算也是真的。
不是让模型「说出一个看起来正确的答案」,
而是真的去查、真的去算。
产出形式包括图片、表格、三维结构或 Markdown 报告。而且整个过程不是做完就散——每一份科研产物都会被记录、保存和版本化,方便后续检查、修改和复用。
Step 4:产物版本化——可复现的前提
OpenAI4S 更像一张人和 AI 共用的科研工作台。每份产物被记录、保存和版本化,这一点看起来平淡,实际上是判断一个科研 Agent 能不能用的硬指标:
| 要求 | 没有版本化 | 有版本化 |
|---|---|---|
| 结果能复现 | 「上次那张图是怎么出来的?」 | 找到对应版本,重跑 |
| 审稿人质疑 | 只能重做一遍,还未必一样 | 直接出示过程记录 |
| 换参数对比 | 覆盖掉旧结果 | 并排比较多个版本 |
| 协作接手 | 口头交接 | 打开 Notebook 直接续 |
把「可复现」当成硬性验收项。评估任何科研或数据类 Agent 时,问一个问题就够了:「三个月后,我能不能一字不差地重现今天这张图?」答不上来的工具,产出的结论就没法写进正式材料。
Step 5:把这套模式搬进自己的流程
Code-as-Action 不是某个产品的专利,它是一种范式。你可以直接改造现有的 Agent:
① 把「多个细粒度工具」合并成「一个代码执行工具」
原来:read_file / filter_rows / compute_mean / plot ...
改成:run_python(code) ← 一个工具解决所有
② 给它一个持久内核
Jupyter kernel / IPython 会话 / 长驻的 Python 进程
要点:跨轮次保持变量不丢
③ 中间结果不回传模型
模型只需要看到:执行成功与否 + 关键摘要(如 shape、前 5 行)
千万别把整个 DataFrame 打印回上下文
④ 产物自动落盘并编号
图表 / 表格 / 报告统一存到带时间戳的目录
同时记录生成它的那段代码
Step 6:适用边界与风险
| 场景 | 是否适合 Code-as-Action |
|---|---|
| 批量数据清洗与统计 | ✅ 最佳场景 |
| 多数据源检索 + 交叉分析 | ✅ 明显优于工具菜单 |
| 需要反复调参的实验 | ✅ 持久内核优势最大 |
| 调用外部 SaaS API | ⚠️ 用 MCP 工具更合适 |
| 不可信输入的自动化 | ❌ 必须先上沙箱隔离 |
让模型生成并执行任意代码,等于把 shell 交出去了。本地跑自己的数据没问题,但只要涉及不可信输入、共享环境或联网写操作,就必须先套一层隔离——可参考第 214 篇沙箱教程。持久内核尤其要注意:它是长期存活的,一次注入的影响会一直留在环境里。
一句话总结:Code-as-Action 的本质是把「让模型一步步指挥工具」换成「让模型写一段程序,一次跑完」。它在多步数据处理场景下能同时降低 token 消耗、提升连贯性、保住可复现性——代价是必须认真对待代码执行的安全边界。项目地址:chatexcel.com/homesite/openAI4S,具体功能与 Skills 清单以官方最新说明为准。