PyRepl
PyRepl 是一个运行在子进程中的持久化 IPython REPL。它为模型提供了一个连续的执行环境,变量在多次调用间保持不变,且运行时原语无需导入即可访问。核心特性
- 持久化状态 —— 在一次
execute_code调用中定义的变量可在下次调用中继续使用 - 进程隔离 —— 运行在独立子进程中(multiprocessing spawn)。崩溃不会影响主进程
- 运行时注入 ——
runtime对象全局可用,无需导入 - 流式输出 —— stdout/stderr 通过自定义事件实时流式传输
- 图片产物 ——
display(Image(...))或最后表达式产生的图片会作为多模态工具结果返回给模型 - 超时保护 —— 每次执行默认 600 秒超时,可配置
设置
提供的工具
execute_code
在持久化 REPL 中运行任意 Python 代码:图片输出
当执行代码产生图片输出时,execute_code 会返回多模态工具结果,而不是把图片压平成文本。模型会同时收到正常的执行摘要和图片内容。
支持显式 display 调用:
PyRepl.execute(...) 时,捕获到的图片会出现在返回值的 artifacts 列表里。作为 agent 工具使用的 execute_code 会把这些 artifact 转成 ImgPath / ImgUrl 多模态返回。
reset_repl
清除所有用户变量,但保留运行时 backend:Runtime 命名空间
在execute_code 内部,runtime 对象提供以下能力:
流式输出
PyRepl 通过自定义事件发送实时输出:| 事件名称 | 数据 | 触发时机 |
|---|---|---|
kernel_stdout | {"text": "..."} | 每次 stdout 刷新时 |
kernel_stderr | {"text": "..."} | 每次 stderr 刷新时 |
输出截断
当工具结果超过约 20,000 个 token 时:- 完整输出会写入临时文件
- 截断版本(前约 4,096 个 token)+ 文件路径返回给模型
- 模型可以使用
read_file访问指定部分
_too_long_to_file=True 按 Agent 粒度启用。
工作目录
execute_code 内部的 os.getcwd() 会返回此路径。
安装自定义 Primitive Pack
runtime.mytools.* 即可在 execute_code 中使用。
SelfRef 集成
在 Agent 上使用self_reference_key 时,框架会自动:
- 创建 SelfReference backend
- 构建 selfref primitive pack
- 将其安装到 PyRepl 实例中
- 使
runtime.selfref.*可用