菜单

代码执行环境

相关源文件

本文全面概述了 Open Interpreter 的代码执行环境——它是负责在不同编程语言中运行由语言模型生成的代码的关键组件。有关解释器在代码执行之外如何与操作系统交互的信息,请参阅操作系统交互(视觉、鼠标、键盘)

架构概述

Open Interpreter 中的代码执行环境充当语言模型输出与用户系统上代码实际执行之间的桥梁。它负责处理多种编程语言的语言检测、代码预处理、执行和输出捕获。

Computer 类是代码执行的中央协调器,管理 Terminal 组件,该组件根据检测到的语言将代码路由到相应的语言处理程序。每个语言处理程序都实现了一个标准化接口,用于执行其各自语言的代码。

来源:interpreter/core/computer/computer.py interpreter/core/core.py119-120

执行流程

代码执行过程遵循从代码生成到输出显示的明确流程

当语言模型生成代码时,会通过其消息类型和格式进行识别。然后,解释器会提取语言和代码内容,执行任何必要的预处理,并将其路由到 Computer 组件进行执行。

来源:interpreter/core/respond.py167-174 interpreter/core/respond.py290-343

语言处理程序

Open Interpreter 通过模块化的语言处理程序架构支持多种编程语言。每个语言处理程序都实现了一个通用接口,同时提供特定于语言的执行机制。

每个语言处理程序负责

  1. 为其语言设置执行环境
  2. 运行代码并捕获输出
  3. 处理错误和异常
  4. 终止时清理资源

来源:interpreter/core/computer/terminal/languages/jupyter_language.py36-45 interpreter/core/computer/terminal/base_language.py

Python 执行 (JupyterLanguage)

Python 代码通过 Jupyter 内核执行,Jupyter 内核为交互式代码执行提供了一个强大的环境。JupyterLanguage 类管理 Jupyter 内核和客户端,以执行 Python 代码并捕获其输出。

功能描述
执行方法通过 jupyter_client 的 Jupyter 内核
输出类型控制台输出、富媒体(图像、HTML)、错误消息
特殊功能活动行追踪、代码预处理、matplotlib 集成
超时处理内置超时检测和用户输入监控

Jupyter 内核执行支持富输出,包括可视化内容,这些内容被捕获并转换为适当的格式(图像、HTML 等)以供用户显示。

来源:interpreter/core/computer/terminal/languages/jupyter_language.py89-132 pyproject.toml55-56

代码执行流程

1. 语言检测与路由

当代码提交执行时,系统会

  1. 从消息格式中提取语言标识符
  2. 标准化语言名称(转换为小写,去除空格)
  3. 将代码路由到相应的语言处理程序
  4. 如果不支持该语言,则回退到默认处理程序或返回错误

来源:interpreter/core/respond.py173

2. 代码预处理

在执行之前,代码会经过预处理

  1. 检测并标准化特殊代码模式(例如,处理 JSON 格式的代码或幻觉函数)
  2. 对于 Python,代码会进行分析以启用活动行追踪
  3. 对 Computer API 的导入进行特殊处理,以确保正确集成

来源:interpreter/core/respond.py176-243 interpreter/core/respond.py309-336

3. 执行环境设置

每个语言处理程序都会设置相应的执行环境

对于 Python,这包括启动 Jupyter 内核并对其进行配置,以在 Open Interpreter 中获得最佳使用体验,包括设置用于可视化支持的 matplotlib 后端。

来源:interpreter/core/computer/terminal/languages/jupyter_language.py41-84

4. 输出捕获与处理

代码执行的输出会根据其类型进行捕获和处理

输出类型处理方式
文本/控制台直接捕获为文本
图像编码为 base64 并包含在输出中
HTML作为格式化的 HTML 内容包含
错误(Errors)格式化为可读的错误消息
活动行用于实时代码执行高亮显示

对于 Python(通过 Jupyter),输出从 Jupyter 内核的 IOPub 通道捕获,该通道提供包括文本、图像和 HTML 在内的富输出格式。

来源:interpreter/core/computer/terminal/languages/jupyter_language.py227-277

特殊功能

活动行追踪

Open Interpreter 为 Python 实现了活动行追踪功能,使其能够显示当前正在执行的代码行。此功能通过提供代码执行进度的实时反馈来增强用户体验。

这是通过代码预处理和指示当前执行行的特殊输出标记实现的。

来源:interpreter/core/computer/terminal/languages/jupyter_language.py228-236

自动运行模式

auto_run 设置决定代码是否应在未经用户确认的情况下自动执行。禁用此设置时,系统会提示用户批准代码执行,从而提供额外的安全层。

if not interpreter.auto_run:
    # OI is about to execute code. The user wants to approve this
    code_to_run = chunk["content"]
    language = code_to_run["format"]
    code = code_to_run["content"]
    
    # Ask user for permission
    response = input("Would you like to run this code? (y/n)")

来源:interpreter/terminal_interface/terminal_interface.py187-226

安全模式

Open Interpreter 实现了一个安全模式功能,可以在执行前扫描代码中潜在的安全问题。此功能可以配置为

模式行为
“off”(关闭)不执行代码扫描
“ask”(询问)提示用户是否扫描代码
“auto”自动扫描所有代码

当启用代码扫描时,scan_code 函数会使用模式匹配和静态分析来分析代码中的潜在安全问题。

来源:interpreter/terminal_interface/terminal_interface.py203-216 interpreter/core/utils/scan_code.py

安全考量

代码执行环境以运行 Open Interpreter 的用户相同的权限运行代码。这意味着

  1. 在用户权限的限制内,代码拥有对用户系统的完全访问权限
  2. 不自动应用沙盒(尽管用户可以在容器中运行 Open Interpreter)
  3. auto_run 被禁用时,用户应在执行前审查代码
  4. 安全模式提供了一定的保护,但并非完整的安全解决方案

主要的安全性机制是代码执行前的用户确认,这允许用户在代码运行前审查和批准代码。

来源:interpreter/terminal_interface/terminal_interface.py217-226

配置选项

代码执行环境可以通过以下几个设置进行配置

设置描述默认
auto_run在未经确认的情况下自动执行代码
safe_mode代码扫描级别(“off”、“ask”或“auto”)“off”(关闭)
max_output捕获输出的最大长度2800
highlight_active_line执行时是否高亮显示活动行True

这些设置可以通过命令行界面、API 或直接在解释器实例上进行配置。

来源:interpreter/core/core.py41-103 interpreter/terminal_interface/start_terminal_interface.py53-59

与 Computer API 集成

代码执行环境与更广泛的 Computer API 集成,允许代码

  1. 访问系统信息和资源
  2. 与文件系统交互
  3. 生成和显示可视化内容
  4. 执行 shell 命令
  5. 导入自定义技能和库

当导入 Computer API 时,代码执行环境会确保已执行代码与 API 功能之间的正确集成。

来源:interpreter/core/respond.py309-336 interpreter/core/computer/skills/skills.py51-95