openinterpreter/open-interpreter
GitHub: openinterpreter/open-interpreter
一个让大语言模型在本地环境中运行代码的自然语言接口,将 GPT 的代码解释能力与本地开发环境的灵活性相结合。
Stars: 63832 | Forks: 5547
● Open Interpreter
Get early access to the desktop app | Documentation

**Open Interpreter** 让 LLM 在本地运行代码(Python、Javascript、Shell 等)。安装后,只需运行 `$ interpreter`,即可在终端通过类似 ChatGPT 的界面与 Open Interpreter 聊天。 这为您的计算机的通用功能提供了自然语言接口: - 创建和编辑照片、视频、PDF 等。 - 控制 Chrome 浏览器进行研究 - 绘制、清理和分析大型数据集 - ……等。 **⚠️ 注意:代码运行前会请求您的批准。**
## 演示 [演示视频](https://github.com/OpenInterpreter/open-interpreter/assets/63927363/37152071-680d-4423-9af3-64836a6f7b60) ### Google Colab 上也提供了交互式演示 [](https://colab.research.google.com/drive/1WKmRXZgsErej2xUriKzxrEAXdxMSgWbb?usp=sharing) ### 以及受 _Her_ 启发的语音界面示例 [](https://colab.research.google.com/drive/1NojYGHDgxH6Y1G1oxThEBBb2AtyODBIK) ## 快速开始 ### 安装 ``` pip install git+https://github.com/OpenInterpreter/open-interpreter.git ``` ### 终端 安装后,只需运行 `interpreter`: ``` interpreter ``` Open Interpreter 默认使用 OpenAI 的 **GPT-4o**,并会要求您输入密钥,您可以从 [OpenAI 的 API 密钥页面](https://platform.openai.com/api-keys) 获取。关于其他提供商或本地模型,请参见下文。 ### Python ``` from interpreter import interpreter interpreter.chat("Plot AAPL and META's normalized stock prices") # Executes a single command interpreter.chat() # Starts an interactive chat ``` ### GitHub Codespaces 在此存储库的 GitHub 页面上按 `,` 键以创建 codespace。片刻之后,您将获得一个预装了 open-interpreter 的云虚拟机环境。然后,您可以直接开始与之交互,自由地确认其执行系统命令,而不必担心损坏系统。 ## 与 ChatGPT 的 Code Interpreter 的比较 OpenAI 发布的搭载 GPT-4 的 [Code Interpreter](https://openai.com/blog/chatgpt-plugins#code-interpreter) 为通过 ChatGPT 完成现实世界任务提供了一个绝佳的机会。 然而,OpenAI 的服务是托管的、闭源的,并且受到严重限制: - 无法访问互联网。 - [预装的包数量有限](https://wfhbrian.com/artificial-intelligence/mastering-chatgpts-code-interpreter-list-of-python-packages/)。 - 最大上传 100 MB,120.0 秒运行时间限制。 - 当环境消亡时,状态会被清除(以及任何生成的文件或链接)。 Open Interpreter 通过在您的本地环境中运行来克服这些限制。它可以完全访问互联网,不受时间或文件大小的限制,并且可以使用任何包或库。 这将 GPT-4 的 Code Interpreter 的强大功能与您本地开发环境的灵活性结合在了一起。 ## 命令 ### 交互式聊天 要在终端启动交互式聊天,可以通过命令行运行 `interpreter`: ``` interpreter ``` 或者在 .py 文件中运行 `interpreter.chat()`: ``` interpreter.chat() ``` **您还可以流式传输每个块:** ``` message = "What operating system are we on?" for chunk in interpreter.chat(message, display=False, stream=True): print(chunk) ``` ### 编程式聊天 为了进行更精确的控制,您可以直接将消息传递给 `.chat(message)`: ``` interpreter.chat("Add subtitles to all videos in /videos.") # ... 将输出流传输到你的 terminal,完成任务 ... interpreter.chat("These look great but can you make the subtitles bigger?") # ... ``` ### 开始新对话 在 Python 中,Open Interpreter 会记住对话历史记录。如果您想重新开始,可以将其重置: ``` interpreter.messages = [] ``` ### 保存和恢复聊天 `interpreter.chat()` 返回一个消息列表,可以通过 `interpreter.messages = messages` 使用该列表来恢复对话: ``` messages = interpreter.chat("My name is Killian.") # Save messages to 'messages' interpreter.messages = [] # Reset interpreter ("Killian" will be forgotten) interpreter.messages = messages # Resume chat from 'messages' ("Killian" will be remembered) ``` ### 自定义系统消息 您可以检查和配置 Open Interpreter 的系统消息,以扩展其功能、修改权限或为其提供更多上下文。 ``` interpreter.system_message += """ Run shell commands with -y so the user doesn't have to confirm them. """ print(interpreter.system_message) ``` ### 更改您的语言模型 Open Interpreter 使用 [LiteLLM](https://docs.litellm.ai/docs/providers/) 连接到托管的语言模型。 您可以通过设置 model 参数来更改模型: ``` interpreter --model gpt-3.5-turbo interpreter --model claude-2 interpreter --model command-nightly ``` 在 Python 中,在对象上设置模型: ``` interpreter.llm.model = "gpt-3.5-turbo" ``` [在此处为您的语言模型找到相应的 "model" 字符串。](https://docs.litellm.ai/docs/providers/) ### 在本地运行 Open Interpreter #### 终端 Open Interpreter 可以使用兼容 OpenAI 的服务器在本地运行模型(如在 LM Studio、Jan.ai、Ollama 等中) 只需使用您推理服务器的 `api_base` URL 运行 `interpreter` 即可(对于 LM Studio,默认为 `http://localhost:1234/v1`): ``` interpreter --api_base "http://localhost:1234/v1" --api_key "fake_key" ``` 或者,您也可以在无需安装任何第三方软件的情况下运行 Llamafile,只需执行: ``` interpreter --local ``` 如需更详细的指南,请查看 [Mike Bird 制作的此视频](https://www.youtube.com/watch?v=CEs51hGWuGU&si=cN7f6QhfT4edfG5H) **如何在后台运行 LM Studio。** 1. 下载 [LM Studio](https://lmstudio.ai/) 然后启动它。 2. 选择一个模型然后点击 **↓ Download**。 3. 点击左侧的 **↔️** 按钮(在 💬 下方)。 4. 在顶部选择您的模型,然后点击 **Start Server**。 一旦服务器运行起来,您就可以开始与 Open Interpreter 进行对话了。 #### Python 我们的 Python 包让您可以更好地控制每个设置。要复制并连接到 LM Studio,请使用以下设置: ``` from interpreter import interpreter interpreter.offline = True # Disables online features like Open Procedures interpreter.llm.model = "openai/x" # Tells OI to send messages in OpenAI's format interpreter.llm.api_key = "fake_key" # LiteLLM, which we use to talk to LM Studio, requires this interpreter.llm.api_base = "http://localhost:1234/v1" # Point this at any OpenAI compatible server interpreter.chat() ``` #### 上下文窗口与最大 Token 数 您可以修改本地运行模型的 `max_tokens` 和 `context_window`(以 token 为单位)。 对于本地模式,较小的上下文窗口将使用较少的 RAM,因此如果失败或速度缓慢,我们建议尝试短得多的窗口(~1000)。请确保 `max_tokens` 小于 `context_window`。 ``` interpreter --local --max_tokens 1000 --context_window 3000 ``` ### 详细模式 为了帮助您检查 Open Interpreter,我们提供了一个用于调试的 `--verbose` 模式。 您可以通过使用其标志(`interpreter --verbose`)或在聊天过程中激活详细模式: ``` $ interpreter ... > %verbose true <- Turns on verbose mode > %verbose false <- Turns off verbose mode ``` ### 交互模式命令 在交互模式下,您可以使用以下命令来增强您的体验。以下是可用命令的列表: **可用命令:** - `%verbose [true/false]`:切换详细模式。不带参数或带 `true` 时进入详细模式。带 `false` 时退出详细模式。 - `%reset`:重置当前会话的对话。 - `%undo`:从消息历史记录中删除上一条用户消息和 AI 的回复。 - `%tokens [prompt]`:(*实验性*)计算作为上下文随下一个 prompt 发送的 token 数量并估算其成本。如果提供了 `prompt`,可选择计算该 prompt 的 token 数量和估算成本。依赖于 [LiteLLM 的 `cost_per_token()` 方法](https://docs.litellm.ai/docs/completion/token_usage#2-cost_per_token) 进行成本估算。 - `%help`:显示帮助消息。 ### 配置 / 配置文件 Open Interpreter 允许您使用 `yaml` 文件设置默认行为。 这提供了一种灵活的方式来配置解释器,而无需每次都更改命令行参数。 运行以下命令打开配置文件目录: ``` interpreter --profiles ``` 您可以在那里添加 `yaml` 文件。默认的配置文件名为 `default.yaml`。 #### 多配置文件 Open Interpreter 支持多个 `yaml` 文件,允许您在不同的配置之间轻松切换: ``` interpreter --profile my_profile.yaml ``` ## FastAPI 服务器示例 生成器更新使得 Open Interpreter 能够通过 HTTP REST 端点进行控制: ``` # server.py from fastapi import FastAPI from fastapi.responses import StreamingResponse from interpreter import interpreter app = FastAPI() @app.get("/chat") def chat_endpoint(message: str): def event_stream(): for result in interpreter.chat(message, stream=True): yield f"data: {result}\n\n" return StreamingResponse(event_stream(), media_type="text/event-stream") @app.get("/history") def history_endpoint(): return interpreter.messages ``` ``` pip install fastapi uvicorn uvicorn server:app --reload ``` 您还可以通过简单地运行 `interpreter.server()` 来启动一个与上述相同的服务器。 ## Android 有关在您的 Android 设备上安装 Open Interpreter 的分步指南,可以在 [open-interpreter-termux 存储库](https://github.com/MikeBirdTech/open-interpreter-termux) 中找到。 ## 安全提示 由于生成的代码是在您的本地环境中执行的,它可以与您的文件和系统设置进行交互,这可能导致意想不到的结果,如数据丢失或安全风险。 **⚠️ Open Interpreter 在执行代码前会请求用户确认。** 您可以运行 `interpreter -y` 或设置 `interpreter.auto_run = True` 来绕过此确认,在这种情况下: - 在请求修改文件或系统设置的命令时要谨慎。 - 像关注自动驾驶汽车一样关注 Open Interpreter,并准备好通过关闭终端来结束进程。 - 考虑在受限制的环境(如 Google Colab 或 Replit)中运行 Open Interpreter。这些环境更加隔离,降低了执行任意代码的风险。 我们提供对[安全模式](https://github.com/OpenInterpreter/open-interpreter/blob/main/docs/SAFE_MODE.md)的**实验性**支持,以帮助缓解一些风险。 ## 它是如何工作的? Open Interpreter 为一个[函数调用语言模型](https://platform.openai.com/docs/guides/function-calling)配备了一个 `exec()` 函数,该函数接受一个 `language`(如 "Python" 或 "JavaScript")以及要运行的 `code`。 然后,我们将模型的消息、代码以及您系统的输出以 Markdown 格式流式传输到终端。 ## 离线访问文档 无需连接互联网,即可随时随地访问完整的[文档](https://docs.openinterpreter.com/)。 [Node](https://nodejs.org/en) 是先决条件: - 版本 18.17.0 或任何更高版本的 18.x.x。 - 版本 20.3.0 或任何更高版本的 20.x.x。 - 从 21.0.0 起的任何版本,未指定上限。 安装 [Mintlify](https://mintlify.com/): ``` npm i -g mintlify@latest ``` 进入 docs 目录并运行相应的命令: ``` # 假设你位于项目的根目录 cd ./docs # 运行文档服务器 mintlify dev ``` 此时应该会打开一个新的浏览器窗口。只要文档服务器在运行,就可以在 [http://localhost:3000](http://localhost:3000) 访问该文档。 ## 贡献 感谢您对贡献的关注!我们欢迎社区的参与。 请参阅我们的[贡献指南](https://github.com/OpenInterpreter/open-interpreter/blob/main/docs/CONTRIBUTING.md),了解有关如何参与的更多详细信息。 ## 路线图 访问[我们的路线图](https://github.com/OpenInterpreter/open-interpreter/blob/main/docs/ROADMAP.md)以预览 Open Interpreter 的未来。 **注意**:本软件与 OpenAI 无关。 
标签:AGPL, CMS安全, Cutter, DLL 劫持, JavaScript, LLM, Open Interpreter, Petitpotam, Python, RPA, Shell, Unmanaged PE, 人工智能, 代码示例, 代码解释器, 大语言模型, 开源, 数据分析, 数据可视化, 数据清洗, 无后门, 本地代码执行, 用户模式Hook绕过, 电脑控制, 系统自动化, 终端工具, 网络调试, 自动写代码, 自动化, 逆向工具