菜单

异步解释器和服务器功能

相关源文件

本页面介绍了 Open Interpreter 的异步解释器实现和服务器功能。它解释了 AsyncInterpreter 类如何支持非阻塞操作,并提供了服务器接口,以便外部应用程序通过 WebSockets 和 HTTP 端点与解释器进行交互。

有关基础 OpenInterpreter 类的更多信息,请参阅OpenInterpreter Class。有关使用服务器接口的详细信息,请参阅Server Mode

概述

AsyncInterpreter 扩展了核心 OpenInterpreter 的异步功能,使其能够:

  1. 处理用户输入而不阻塞
  2. 通过 WebSockets 流式传输响应
  3. 提供 REST API 端点
  4. 支持 OpenAI 兼容的 API 接口

架构图

来源:interpreter/core/async_core.py44-61

AsyncInterpreter 类

AsyncInterpreter 类继承自 OpenInterpreter,并增加了异步处理功能。它维护内部队列、线程管理和服务器集成。

关键属性

属性描述
respond_thread用于处理响应的线程
stop_event用于控制执行流程的线程事件
output_queue消息响应队列
unsent_messages未能发送的消息队列
id解释器实例的唯一标识符
服务器用于处理 HTTP/WebSocket 连接的服务器实例
context_mode控制 OpenAI 兼容模式下的行为

来源:interpreter/core/async_core.py44-64

类层次结构

来源:interpreter/core/async_core.py44-61

消息流

AsyncInterpreter 通过队列和线程实现了异步消息流。消息以块(chunk)为单位发送,允许流式传输响应。

异步处理流程

来源:interpreter/core/async_core.py65-104 interpreter/core/async_core.py105-108 interpreter/core/async_core.py110-207

消息累积过程

accumulate() 方法负责从块(chunk)构建完整消息

  1. 如果块(chunk)包含 "start": true,它会初始化一条新消息
  2. 如果块(chunk)包含与当前消息类型匹配的内容,它会将其追加到该消息中
  3. 如果块(chunk)的类型与当前消息不同,它会开始一条新消息

这使得消息能够逐片进行流式构建。

来源:interpreter/core/async_core.py209-277

服务器实现

Server 类与 FastAPI 集成,提供 HTTP 和 WebSocket 端点。它是在 AsyncInterpreter 初始化过程中创建的。

端点结构

来源:interpreter/core/async_core.py300-896

WebSocket 接口

WebSocket 接口(/ 端点)是与 AsyncInterpreter 进行实时通信的主要方法。

WebSocket 处理

  1. 客户端连接到 WebSocket 端点
  2. 如果设置了 INTERPRETER_REQUIRE_AUTH,则进行可选身份验证
  3. 客户端发送带有 start/content/end 标记的块(chunk)
  4. AsyncInterpreter 处理输入并生成响应
  5. 响应流式传输回客户端
  6. 如果启用了 require_acknowledge,则提供可选的确认机制

WebSocket 消息格式

// Input message chunk (start)
{
    "role": "user",
    "start": true
}

// Input message chunk (content)
{
    "role": "user",
    "type": "message",
    "content": "Please help me analyze this data"
}

// Input message chunk (end)
{
    "role": "user",
    "end": true
}

// Output message examples
{
    "role": "assistant",
    "type": "message",
    "content": "I'll help you analyze the data."
}

{
    "role": "assistant",
    "type": "code",
    "format": "python",
    "content": "import pandas as pd\n..."
}

{
    "role": "computer",
    "type": "console",
    "format": "output",
    "content": "   A  B  C\n0  1  4  7\n..."
}

来源:interpreter/core/async_core.py437-632

REST API 端点

服务器提供了多个 REST API 端点

核心端点

端点方法描述
/heartbeatGET健康检查端点
/GET返回用于 WebSocket 交互的 HTML 接口
/settingsPOST更新解释器设置
/settings/{setting}GET检索特定的解释器设置

可选的不安全端点

这些端点仅在 INTERPRETER_INSECURE_ROUTES 设置为 "true" 时启用

端点方法描述
/runPOST无需 LLM 干预即可直接执行代码
/uploadPOST将文件上传到服务器文件系统
/download/{filename}GET从服务器文件系统下载文件

来源:interpreter/core/async_core.py300-711

OpenAI 兼容 API

服务器在 /openai/chat/completions 提供一个 OpenAI 兼容的 API 端点。这允许使用 OpenAI Python SDK 的应用程序以最少的修改与 Open Interpreter 交互。

特殊标记

OpenAI 端点支持用于控制行为的特殊消息令牌

标记功能
{STOP}停止当前处理
{CONTEXT_MODE_ON}启用上下文累积模式
{CONTEXT_MODE_OFF}禁用上下文累积模式
{AUTO_RUN_ON}启用自动代码执行
{AUTO_RUN_OFF}禁用自动代码执行
{START}在上下文模式下,触发响应生成

响应流式传输

OpenAI 兼容的 API 支持以标准 OpenAI 格式流式传输响应

data: {"id":0,"object":"chat.completion.chunk","created":1234567890,"model":"open-interpreter","choices":[{"delta":{"content":"Hello"}}]}

data: {"id":1,"object":"chat.completion.chunk","created":1234567890,"model":"open-interpreter","choices":[{"delta":{"content":" world"}}]}

来源:interpreter/core/async_core.py715-897

LLM 集成

AsyncInterpreter 使用与核心 OpenInterpreter 相同的 LLM 集成,但异步处理响应。

对函数/工具调用的支持

AsyncInterpreter 支持具有函数调用功能的 LLM,这使得代码执行流程更加结构化。该系统使用:

  1. 定义用于运行代码的 execute 函数的工具 Schema
  2. 支持工具/函数调用的消息转换为 OpenAI 格式
  3. 处理用于代码执行的函数调用响应

来源:interpreter/core/llm/run_tool_calling.py1-316 interpreter/core/llm/llm.py1-467

安全考量

AsyncInterpreter 和服务器实现包括多种安全功能

  1. API 密钥认证:使用 INTERPRETER_API_KEY 环境变量进行可选认证
  2. 不安全路由控制:默认禁用潜在危险的端点
  3. 确认系统:可选的消息接收确认,以确保可靠交付
  4. 运行代码审批:当 auto_run 被禁用时,在代码执行前进行确认

来源:interpreter/core/async_core.py279-294 interpreter/core/async_core.py680-681

使用示例

要将 AsyncInterpreter 与服务器一起使用,您可以:

这将在默认主机和端口上启动一个服务器。然后,您可以通过 WebSockets 或 REST API 连接到它。

有关从客户端应用程序使用服务器的更多详细信息,请参阅Server Mode