1. 项目概述一个开源的AI代码编辑器最近在折腾开发工具发现了一个挺有意思的开源项目——Void。简单来说你可以把它理解为一个“开源版的Cursor”。如果你用过Cursor或者对GitHub Copilot、Claude Code这类AI编程助手很熟悉那么Void瞄准的就是这个领域一个深度集成AI能力的现代化代码编辑器。Void的核心愿景很明确它希望成为一个开放、透明、可定制的AI编程环境。与许多闭源的商业产品不同Void的代码是完全公开的这意味着开发者可以自由地查看其实现、修改功能甚至基于它构建自己的版本。它最吸引我的几个点在于支持在本地运行AI模型这意味着你的代码和与AI的对话可以完全留在自己的机器上隐私性更强支持对接多种AI服务提供商而不仅限于某一家给了用户更多选择权以及提供了代码变更的可视化与检查点Checkpoint功能这有点像给代码的演进过程拍快照方便回溯和对比。不过需要特别说明的是根据项目README的说明核心团队目前已经暂停了对Void IDE也就是这个主仓库的主动开发转而探索一些新的编码理念。他们更关注创新而非单纯追求与Cursor等功能上的对标。因此这个版本可能会随着依赖库的更新而出现一些功能不稳定或无法使用的情况。但项目本身是开源的代码都在那里对于想要研究其架构、学习如何集成AI到编辑器或者有志于维护一个自己分支的开发者来说这依然是一个极具价值的宝库。2. 核心特性与设计理念拆解2.1 为何选择“开源替代”这条路在AI编程助手领域Cursor和GitHub Copilot无疑是当前的领跑者但它们都是闭源商业产品。这带来几个问题一是数据隐私代码和提示词需要发送到厂商的服务器二是功能锁定用户只能使用厂商提供的模型和功能无法自定义三是生态封闭社区难以在其基础上进行二次创新。Void选择开源正是直面这些问题。它的设计理念建立在几个核心原则上数据自主权Void声称直接将消息发送给AI提供商自身不保留用户数据。当配置为使用本地模型如通过Ollama、LM Studio部署的模型时整个交互过程可以完全离线这对于处理敏感代码或注重隐私的团队至关重要。模型无关性它不绑定任何单一的AI服务。理论上你可以配置它使用OpenAI的ChatGPT、Anthropic的Claude、Google的Gemini或者任何提供兼容API的本地模型。这种灵活性避免了被单一供应商“锁死”。可扩展与可定制作为VS Code的分支Fork它继承了VS Code强大的扩展架构。开发者可以深入其代码修改AI交互的界面、逻辑或者集成自己开发的特有工具链打造完全符合个人或团队工作流的编辑器。2.2 关键功能点深度解析从项目描述和其关联文档来看Void试图在几个关键体验上做出差异化AI智能体Agents在代码库上的应用这不仅仅是简单的代码补全。我理解这里的“Agents”指的是具备一定自主性、能理解项目上下文并执行复杂任务的AI单元。例如你可以指示AI智能体“为这个React组件添加单元测试”它可能会自动分析组件结构、依赖然后生成相应的测试文件和用例代码。这需要编辑器深度集成项目索引、代码理解以及任务规划的能力。检查点与变更可视化这是一个非常实用的功能尤其在进行大规模重构或尝试不同的AI生成方案时。传统上我们依赖Git来管理变更但Git的粒度是提交且回溯对比需要命令行或额外工具。Void内置的检查点功能允许你在任何时间点手动或自动保存编辑器状态包括打开的文件、未保存的更改、AI对话上下文等。之后你可以直观地对比不同检查点之间的代码差异甚至一键回滚到某个历史状态。这相当于为你的编码过程提供了一个细粒度的“时间机器”。本地模型集成这是隐私和成本考量下的关键特性。通过配置你可以将Void连接到运行在本机的AI模型服务。例如使用 Ollama 在本地运行CodeLlama、DeepSeek-Coder等开源模型。这样做的优势很明显零延迟取决于本地硬件、零API费用、代码完全不出内网。当然这对本地计算资源尤其是GPU有一定要求且开源模型的代码能力可能暂时不及GPT-4等顶级闭源模型但对于许多日常辅助任务已经足够。基于VS Code的坚实基底Void不是从零开始而是Fork自微软的VS Code。这是一个非常聪明的选择。VS Code拥有极其优秀的架构、性能、广泛的语言支持以及海量的扩展生态系统。Void在此基础上进行“AI原生”改造意味着它天生就具备了一个成熟编辑器的所有优点如强大的调试器、集成终端、版本控制界面等团队可以专注于创新AI集成体验而非重复造轮子。3. 从源码到可运行编辑器构建与部署指南虽然官方暂停了主动维护但项目代码是完整的我们完全可以自己构建和运行一个Void实例。这对于学习其实现原理或开始定制化开发是第一步。3.1 环境准备与依赖安装首先你需要一个符合要求的开发环境。Void作为VS Code的分支其构建依赖与VS Code类似。系统要求操作系统推荐 macOS 10.15、 Linux (Ubuntu 18.04, RHEL 8等) 或 Windows 10/11。Windows用户建议使用WSL2以获得最佳体验。Node.js版本需要v18.x或v20.x。不推荐使用v19或v21等奇数版本。建议使用nvmMac/Linux或nvm-windows来管理Node版本。Python需要Python 3.10并确保python命令在终端中可用。Git最新版本。构建工具链Linux: 需要build-essential、libx11-dev、libxkbfile-dev、libsecret-1-dev等。对于Ubuntu可以运行sudo apt-get install build-essential libx11-dev libxkbfile-dev libsecret-1-dev。macOS: 需要Xcode Command Line Tools。在终端运行xcode-select --install。Windows: 需要Visual Studio Build Tools with the “Desktop development with C” workload以及Windows 10/11 SDK。克隆与初始化项目# 克隆Void仓库 git clone https://github.com/voideditor/void.git cd void # 安装Node.js依赖 npm install这个过程可能会花费一些时间因为需要下载VS Code和Void所需的所有依赖包。注意由于网络环境安装过程中可能会遇到某些包特别是electron或node-gyp相关原生模块下载慢或编译失败的问题。建议配置稳定的网络环境并确保Python和C构建工具已正确安装。如果遇到node-gyp错误通常重新安装构建工具并清理npm缓存npm cache clean --force后重试可以解决。3.2 构建与运行开发版本完成依赖安装后你可以启动一个开发模式的Void。启动开发实例# 在项目根目录执行 npm run watch这个命令会启动一个编译进程监视源代码的变化并实时重新编译。在另一个终端标签页中运行npm run electron这将启动一个基于Electron的Void编辑器窗口。这个版本包含了源代码映射便于调试但性能可能不如生产构建。执行完整构建 如果你想生成一个可以分发的独立应用程序包需要进行完整构建。# 生产构建 npm run build构建产物会输出在.build/目录下。根据你的操作系统你可以找到相应的可安装包或可执行文件如macOS的.dmg Windows的.exe Linux的.AppImage等。实操心得在初次构建时npm run build可能会因为内存不足而失败尤其是在虚拟机上。如果遇到这种情况可以尝试增加Node.js的内存限制NODE_OPTIONS--max-old-space-size8192 npm run build。另外构建过程非常消耗CPU和I/O建议在性能较好的机器上操作。3.3 配置AI模型连接让Void“活”起来的关键是配置AI能力。Void本身不包含模型它需要连接到一个后端AI服务。配置流程启动你构建好的Void。通常AI配置入口会在侧边栏有一个专门的图标或者位于设置Settings中。由于项目处于暂停状态具体UI位置可能需要参考代码或自行探索。你需要添加一个“模型提供商”。以OpenAI为例你需要选择提供商类型例如 “OpenAI”。输入API端点对于官方服务通常是https://api.openai.com/v1。输入API密钥你的OpenAI API Key。选择模型例如gpt-4-turbo-preview或gpt-3.5-turbo。对于本地模型例如使用Ollama提供商类型可能会选择“自定义”或“Ollama”。API端点本地Ollama服务的地址如http://localhost:11434/v1。API密钥本地运行通常不需要密钥留空即可。模型你本地拉取的模型名称如codellama:7b。关键配置项解析上下文长度Context Length决定AI一次能“看到”多少你的代码。对于大型文件或复杂任务需要更长的上下文。本地小模型可能只支持4K或8K token而GPT-4支持128K。温度Temperature控制AI输出的随机性。写代码时通常设置较低如0.1-0.3让输出更确定、更聚焦需要创造性命名或生成多种方案时可以调高。系统提示词System Prompt这是最重要的配置之一。你可以在这里定义AI的角色和行为准则例如“你是一个资深的Python后端工程师擅长编写简洁、高效、符合PEP8规范的代码。请只输出代码不要解释。” 一个好的系统提示能极大提升AI输出的质量。4. 架构探索与二次开发入门对于开发者而言Void的价值在于其代码。作为VS Code的分支其主体架构与VS Code一致但增加了AI集成的相关模块。4.1 代码仓库结构导读根据项目引用的VOID_CODEBASE_GUIDE我们可以梳理其核心目录src/vs/: 这是VS Code核心框架的源代码包含了编辑器、工作台、语言服务、扩展主机等所有基础组件。Void的修改大部分基于此。src/void/(推测): 很可能存在一个单独的目录存放Void特有的功能如AI智能体管理器、检查点服务、新的UI组件等。这是定制化开发最需要关注的区域。extensions/: 内置扩展。VS Code的许多功能如对JavaScript、Python的语言支持都是以扩展形式存在。Void可能会在这里添加或修改与AI交互相关的扩展。product.json: 这个文件定义了产品的元数据如名称“Void”、版本、配置开关等。将“Void”与“VS Code”区分开的关键就在这里。build/: 构建脚本和配置。理解架构的关键是明白VS Code的进程模型它由一个主进程负责窗口管理、生命周期、一个渲染进程每个编辑器窗口负责UI和一个扩展主机进程隔离运行扩展组成。AI功能可能以扩展形式存在也可能作为核心服务直接集成到主进程或渲染进程中以实现更深度的集成和更好的性能。4.2 如何实现一个简单的自定义AI命令假设我们想添加一个功能选中一段代码右键菜单出现一个“让AI解释这段代码”的选项。我们可以通过开发一个Void扩展来实现方式与VS Code扩展兼容。步骤简述创建扩展脚手架使用VS Code的Yeoman模板生成器 (yo code) 创建一个新的扩展项目。定义命令和菜单在扩展的package.json的contributes部分注册一个新的命令并将其添加到编辑器上下文菜单。contributes: { commands: [{ command: extension.explainCode, title: Explain with AI }], menus: { editor/context: [{ command: extension.explainCode, when: editorHasSelection }] } }实现命令逻辑在扩展的激活文件如extension.ts中注册命令并在其处理函数中编写逻辑。import * as vscode from vscode; import { OpenAI } from openai; // 假设使用OpenAI SDK export function activate(context: vscode.ExtensionContext) { const explainCommand vscode.commands.registerCommand(extension.explainCode, async () { const editor vscode.window.activeTextEditor; if (!editor) { return; } const selection editor.selection; const selectedText editor.document.getText(selection); // 1. 获取用户配置的AI API信息这里需要从Void的设置中读取简化示例 const config vscode.workspace.getConfiguration(void.ai); const apiKey config.getstring(openaiKey); const endpoint config.getstring(openaiEndpoint); // 2. 调用AI API const openai new OpenAI({ apiKey, baseURL: endpoint }); const response await openai.chat.completions.create({ model: gpt-3.5-turbo, messages: [ { role: system, content: 你是一个编程助手请用简洁的语言解释以下代码的功能。 }, { role: user, content: selectedText } ], max_tokens: 500 }); // 3. 显示结果 const explanation response.choices[0]?.message?.content; if (explanation) { // 在一个新的输出面板或弹窗中显示 const panel vscode.window.createWebviewPanel( codeExplanation, AI Explanation, vscode.ViewColumn.Beside, {} ); panel.webview.html htmlbodypre${explanation}/pre/body/html; } }); context.subscriptions.push(explainCommand); }集成到Void将开发好的扩展打包成.vsix文件在Void中通过“从VSIX安装”来加载或者直接将其代码放入Void源码的extensions目录下重新构建。这个例子展示了扩展的基本模式。在真实的Void环境中它可能已经提供了更高级的API来统一管理AI请求、处理上下文等从而简化扩展开发。4.3 探索检查点Checkpoint机制的实现检查点功能是Void的亮点。其实现思路可能如下数据捕获当用户触发创建检查点时系统需要序列化当前状态。这包括工作区信息当前打开的所有文件路径、它们的光标位置、折叠状态、选中区域。编辑器状态每个文件的完整内容包括未保存的更改。AI对话上下文当前与AI进行的所有对话历史。扩展状态某些关键扩展的特定状态如果可能。序列化与存储将上述状态数据序列化为JSON或二进制格式并存储到磁盘。存储位置可能在用户数据目录下的一个特定文件夹中每个检查点对应一个文件或一个子目录。差异对比与可视化当用户查看检查点历史时系统需要能快速计算任意两个检查点之间文件内容的差异。这很可能复用VS Code内置的Diff算法并提供一个图形化界面来并排显示代码变化类似于Git的对比视图但更侧重于编辑会话的粒度。状态恢复当用户选择回滚到某个检查点时系统需要解析存储的状态数据重新打开对应的文件恢复其内容、光标位置并重新建立AI对话上下文。实现这个功能需要对VS Code的IEditorService、ITextFileService以及状态管理如使用IStorageService有深入的理解。它本质上是一个针对编辑会话的、应用级别的版本控制系统。5. 常见问题、挑战与未来展望5.1 构建与运行中的典型问题问题现象可能原因解决方案npm install失败报网络或权限错误网络连接问题或需要Python/C编译环境1. 检查网络可尝试配置npm镜像源。2. 确保Python已安装且版本正确并安装了对应系统的构建工具如Windows的VS Build Tools。3. 以管理员/root权限运行有时能解决权限问题但需谨慎。npm run watch或npm run build内存不足Node.js进程内存溢出尤其在虚拟机或内存小的机器上设置环境变量增加内存限制export NODE_OPTIONS--max-old-space-size8192(Linux/macOS) 或在命令前添加NODE_OPTIONS--max-old-space-size8192。启动后界面空白或功能异常编译错误或依赖版本冲突1. 尝试完全删除node_modules和package-lock.json然后重新npm install。2. 查看终端是否有编译错误输出根据错误信息搜索解决方案。无法连接AI服务配置错误、网络问题或API密钥无效1. 仔细检查配置中的API端点、密钥和模型名称。2. 对于本地模型确保服务已启动如Ollama在运行且端口正确。3. 尝试在命令行用curl测试API端点是否可达。5.2 当前项目的局限性与挑战项目状态不确定官方已明确暂停IDE版本的主动开发这意味着没有新功能添加且随着底层依赖如Electron、Node.js、VS Code上游更新的升级可能会出现兼容性问题需要社区自行修复。文档与社区支持有限相比于成熟的VS Code或CursorVoid的文档、教程和社区问答如Stack Overflow上的内容几乎为零。解决问题主要靠阅读源码和调试。集成体验的打磨将AI深度、流畅地融入编辑器是一个巨大的产品挑战。Cursor在这方面做了大量细致的交互优化。Void作为开源项目其AI交互的流畅度、智能程度和UI/UX的完善度可能无法与商业产品相比。性能开销本地运行大模型对硬件要求高。集成AI功能后编辑器本身的内存和CPU占用也会比纯文本编辑器高。5.3 对开发者与用户的建议对于想使用Void的用户明确需求如果你极度看重代码隐私且愿意折腾Void搭配本地模型是一个值得尝试的方案。如果你追求稳定、开箱即用且功能强大的AI编程体验目前Cursor或Copilot仍是更好的选择。做好心理准备将其视为一个“技术预览版”或“高级玩具”而非生产主力工具。遇到问题需要有一定的技术能力去排查。对于想贡献或定制的开发者深入阅读源码从VOID_CODEBASE_GUIDE和HOW_TO_CONTRIBUTE开始然后重点阅读src/void/目录下的代码理解其AI模块的设计。从小处着手先尝试修复一个小的issue或者添加一个简单的功能如支持一个新的AI API提供商以此熟悉整个代码库的构建、运行和调试流程。关注上游VS CodeVoid的底层跟随VS Code。了解VS Code的最新架构和更新有助于理解Void的代码和进行未来的兼容性维护。项目的潜在未来 项目团队提到在探索“新颖的编码想法”。这可能意味着他们正在实验超越传统IDE范式的编程工具例如基于AI的完全不同的代码表示、交互方式或协作模式。Void IDE的代码仓库成为了一个重要的实验记录和起点。无论这个项目最终走向何方它都为开源社区提供了一个极其珍贵的、关于如何构建AI原生开发环境的现实案例和代码基础。对于任何有兴趣进入这个领域的开发者来说深入研究Void的代码其价值不亚于阅读一篇顶级的系统论文。