oh-my-pi eval 工具指南:持久化 Python/JS 内核,还能在代码里回调 agent 工具
2026/8/29 16:15:07 网站建设 项目流程

oh-my-pi eval 工具指南:持久化 Python/JS 内核,还能在代码里回调 agent 工具

【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi

oh-my-pi(OMP)是一个将 IDE 深度集成的开源 AI 编程助手(coding agent)。它的eval 工具是区别于其他 AI 编程工具的独特能力:让 AI 在持久化的 Python / JavaScript 内核中分步执行代码,变量状态跨调用永不丢失;更酷的是,你可以直接在代码里回调 agent 的工具、发起一次模型补全、甚至派出子 agent 干脏活。

一、eval 工具是什么?为什么不用python -c?🤔

很多 AI 编程工具跑 Python 的方式是每次都起一个新进程(类似python -c),这意味着每次执行都是一次性环境:上一行定义的变量、导入的库,下一行全忘了。

oh-my-pi 的 eval 工具彻底改变了这一点:

特性传统python -c方式oh-my-pi eval 持久内核
变量状态每次执行后丢失✅ 跨多次调用持续保留
执行单元整段脚本一次性跑一次工具调用 = 一个 cell,可增量推进
结构化输出只有 stdout 文本display()捕获 JSON / 图片 / Markdown
与 agent 互通完全隔离✅ 代码内可直接调用 agent 工具、子 agent
取消/超时需自己处理内建超时看门狗与取消信号

官方文档明确要求:临时执行代码请走 eval,不要绕道 bash 去调python -cnode -e(见 docs/tools/eval.md)。它的核心理念是"增量式工作":导入 → 定义 → 测试 → 使用,每一步一个 cell,某一步出错就只重跑那一步,前面的成果原样保留在内核里。

二、四语言持久内核:Python、JavaScript、Ruby、Julia

eval 工具内置 4 个语言后端,各自维护独立的持久运行时,互不干扰(重置 Python 不会影响 JS 的状态):

代号运行时默认状态持久化方式
pyIPython 风格的 Python 子进程内核✅ 默认开启按会话 ID + 工作目录 + 解释器复用
jsBun worker VM✅ 默认开启会话内常驻,支持顶层await
rbRuby 内核⚙️ 需手动开启常驻TOPLEVEL_BINDING
jlJulia 内核⚙️ 需手动开启常驻Main命名空间

💡 小技巧:每个语言都有reset开关,可以在下一次调用前只清空该语言的内核,其他语言的变量原封不动。

下面这张图就是一次真实的 eval 执行:模型在持久 Python 内核里运行 matplotlib 代码,图表、警告、结果说明都以富媒体形式直接回传到界面:

Python 后端的实现非常"轻":单个子进程 + NDJSON 行协议,不依赖 Jupyter、不需要额外 pip 安装,Python 3.10+ 即可(内核封装位于packages/coding-agent/src/eval/py/)。它还支持%pip%timeit!cmd等 IPython 风格魔法命令,display()能直接回传 pandas 表格、matplotlib/plotly 图形。

三、预置辅助函数:一个"超能力 REPL"

每个内核启动时都会注入一套跨语言的预置助手函数,让代码天然"长在项目上":

  • display(value)—— 结构化输出,JSON、图片、Markdown 都能直接"画"给模型看
  • read(path)/write(path, content)—— 直接读写项目文件,支持local://协议
  • env(...)/output(...)—— 查环境变量、取回之前工具调用的完整输出
  • tool.<name>(args)—— ⭐ 在代码里直接调用 agent 的任何注册工具
  • completion(...)/agent(...)—— ⭐ 发起一次性模型调用、派出子 agent
  • parallel(thunks)/pipeline(items, ...stages)—— 有界并发池与分阶段流水线
  • log()/phase()/budget—— 记录日志、打阶段标记、查询预算

比如让 AI 批量处理 500 个文件,它会写一个 cell,用parallel在受限线程池里并发处理,保持顺序、隔离失败——这比"模型逐个调用工具"快得多。

四、最大亮点:在代码里回调 agent 工具 🚀

这是 eval 工具最"反直觉"也最强大的部分——代码不再是被动执行的脚本,而是 agent 的指挥台

1. 调用任何注册工具

tool.grep({"pattern": "TODO", "path": "src"})

代码里一行搞定 grep / read / edit 等 31 个内置工具,结果直接作为 Python 对象返回,方便继续用代码处理。

2. 一次性模型补全completion()

无需工具、无历史的一锤子模型调用,支持smol(快)/default(当前)/slow(最强)三档模型,还能传 JSON Schema 直接拿到解析好的结构化对象。适合在循环里做"翻译一批注释""给每条日志打标签"这类批处理。

3. 派出子 agentagent()

在代码里 spawn 一个子 agent 去探索代码库、跑结构化任务,支持isolated请求独立 worktree、schema约束返回结构。多个子 agent 还能用handle=true+pipeline组成无环任务图:上游子 agent 的输出自动喂给下游,失败只影响自己的子树。

4. 预算守卫budget

budget.total/budget.spent()/budget.remaining()让你能在代码里自我节制,避免批量任务失控烧钱。

下面是子 agent 协同工作的现场:多个探索 agent 并行分析packages/下的 agent、ai、coding-agent 等目录:

五、快速上手:安装与开启

bun install -g @oh-my-pi/pi-coding-agent

安装后eval.pyeval.js默认开启,无需任何配置。如需 Ruby / Julia,在设置中打开eval.rb/eval.jl(或设置环境变量PI_RB/PI_JL)即可。Python 内核默认按会话复用(python.kernelMode="session"),也可改成每次调用新建内核;超时默认 30 秒,传timeout: 0可禁用看门狗。

六、使用技巧清单 ✅

  • 增量推进:把长任务拆成多个小 cell(导入 → 定义 → 测试),失败时只重跑出错那一步
  • 别重复导入:上一 cell 的顶层变量会自动存活,重复 import / 声明是浪费
  • cell 内并发:需要并行时用 cell 内的parallel,而不是指望模型连发多次工具调用
  • 重图重表:用display()回传数据,模型看到的是结构化内容而非被截断的终端文本

总结:oh-my-pi 的 eval 工具把"持久内核 + 代码回调 agent"这两件事做成了标配——Python/JS 状态跨调用常驻,代码里能调工具、能调模型、能派子 agent,是 AI 编程助手里真正"把 IDE 和 REPL 焊在一起"的设计。核心实现可参考packages/coding-agent/src/tools/eval.tspackages/coding-agent/src/eval/,完整文档见docs/tools/eval.mddocs/python-repl.md

【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询