
1. 项目概述一个开源的AI代码编辑器如果你是一个深度依赖AI辅助编程的开发者对Cursor、GitHub Copilot这类工具爱不释手但又对它们的闭源、数据隐私或高昂成本心存疑虑那么Void的出现可能会让你眼前一亮。简单来说Void是一个开源、可自托管的AI代码编辑器它直接对标Cursor并在此基础上提供了更开放的模型接入能力和数据控制权。你可以把它理解为一个“魔改版”的VSCode核心目标是把AI编程助手的能力从商业公司的黑盒里解放出来交到开发者自己手中。我最初关注到Void正是被其“开源替代品”的定位所吸引。在当前的AI编程工具领域我们面临着一种矛盾工具越强大我们对它的依赖就越深但同时我们对它的工作原理、数据流向和成本控制却知之甚少。Void试图打破这种局面。它不仅仅是一个编辑器更是一个平台允许你将任何你信任的大语言模型无论是OpenAI的GPT、Anthropic的Claude还是本地部署的Llama、DeepSeek等集成到你的编码工作流中。这意味着你可以用自己API密钥调用服务数据直接发送给你指定的提供商Void本身不保留任何中间数据从根源上解决了隐私顾虑。更重要的是作为一个从VSCode fork而来的项目它继承了VSCode几乎所有的优秀基因强大的扩展生态系统、高度可定制的界面、以及成熟的代码编辑体验。在此基础上Void注入了AI原生的核心功能比如AI智能补全、代码解释、重构建议以及颇具特色的“变更检查点”和可视化功能。这让你在让AI大刀阔斧修改代码时能有一个清晰的历史回溯和状态快照避免了“一改就废”的恐慌。目前项目团队已暂停对Void IDE的常规功能开发转向探索更前沿的编码理念但这反而使得Void的代码库成为一个绝佳的学习和自托管样板。对于想要深入研究AI集成开发环境IDE架构或希望构建一个完全受自己控制的AI编码助手的开发者来说现在正是深入探索Void的好时机。2. 核心架构与设计理念拆解要理解Void为何能成为Cursor的替代品我们必须深入其架构核心。Void并非从零开始造轮子而是选择了站在巨人——Visual Studio Code的肩膀上。这是一个极其明智的策略它让Void团队能够将绝大部分精力聚焦在“AI集成”这个差异化功能上而非重复构建一个成熟的编辑器。2.1 基于VSCode的深度定制化Void是VSCode仓库的一个分支Fork。这意味着在2023年某个时间点从VSCode主分支分叉出来时它继承了VSCode完整的代码库、构建系统和扩展架构。这种做法的优势显而易见即时获得成熟能力代码高亮、调试器、终端集成、版本控制Git界面、成千上万的扩展市场所有这些VSCode赖以成名的功能Void开箱即用。开发者零学习成本任何熟悉VSCode的开发者打开Void几乎可以无缝上手。快捷键、设置settings.json、工作区概念全部通用。持续的底层更新潜力虽然Void目前暂停了与上游VSCode的同步但其代码基允许它在未来有选择地合并VSCode的安全更新或关键修复。然而分叉也带来了挑战即如何将AI能力“编织”进原有的编辑器肌理中而不是做成一个浮于表面的插件。Void的做法是深度修改了VSCode的核心服务特别是与语言服务器协议LSP和编辑器UI交互相关的部分从而实现了AI能力与编辑器的原生级融合。2.2 AI代理与模型无关的设计这是Void最核心的设计理念也是其与Cursor、Copilot等产品的根本区别。Cursor虽然强大但其AI后端是绑定的最初是GPT-4后来可能自有模型用户无法选择或更换。Copilot则完全依赖GitHub的模型。Void采用了“模型无关”的架构。它定义了一套清晰的接口用于与AI模型通信。在底层Void的AI引擎并不关心对面是OpenAI的API、Anthropic的Claude API还是一个运行在你本机上的Ollama服务。它只负责按照预定格式通常是遵循OpenAI API格式的聊天补全请求组织提示词Prompt然后将请求发送到你配置的端点Endpoint并解析返回的结果。这种设计带来了几个关键优势隐私与数据主权你可以将端点配置为你完全控制的服务器。你的代码上下文和提示词直接从你的机器发送到你指定的服务Void的服务器不经过手也不存储。这对于处理敏感代码如公司商业机密的场景至关重要。成本控制你可以自由选择不同价位的模型API。例如在编写简单样板代码时使用更便宜的模型如GPT-3.5-Turbo在进行复杂逻辑推理时切换到能力更强的模型如GPT-4或Claude-3 Opus。功能实验与定制你可以接入任何兼容API格式的模型甚至是自己微调的模型。这为研究AI编程助手的行为、测试不同模型的编码能力提供了绝佳的实验平台。2.3 变更检查点与可视化AI协作的“安全网”让AI直接修改代码开发者最大的恐惧是“失控”。AI可能会引入难以察觉的错误或者把原本清晰的逻辑改得面目全非。Void引入了“变更检查点”Checkpoint的概念来应对这一问题。你可以把它想象成Git的提交Commit但是专门为AI的编辑操作而设计。当你在Void中触发一个较大的AI操作例如“重写这个函数”或“为整个类添加文档”时Void可以在操作前后自动或根据你的设置手动创建一个检查点。这个检查点不仅保存了代码的差异Diff还可能关联了导致这次变更的AI对话上下文。更强大的是其可视化功能。Void提供了一个专门的视图以时间线或图谱的形式展示这些检查点。你可以清晰地看到AI对代码库的演进过程点击任何一个检查点都能立即看到当时的代码状态并且可以轻松地回滚Revert到那个状态。这个功能将AI从“黑盒执行者”变成了“可审计、可回溯的协作伙伴”极大地增强了使用AI重构代码时的信心。3. 从零开始构建与运行你自己的Void虽然Void提供了预编译的版本但为了真正理解它、定制它或者仅仅是为了体验一把从源码构建一个现代IDE的成就感从源码构建是必经之路。这个过程比单纯下载一个软件要复杂但Void团队提供的工具链已经做了大量简化。以下是我在LinuxUbuntu 22.04和macOSVentura上成功构建的完整实录。3.1 环境准备与依赖安装Void的构建依赖与VSCode高度一致因为它使用相同的构建系统基于Gulp和Node.js。首先你需要确保你的系统满足以下基础要求Node.js: 版本需要非常精确通常要求是VSCode项目当前锁定的LTS版本。根据Void仓库的package.json或构建脚本我构建时使用的是Node.js 18.x。强烈建议使用Node版本管理工具如nvm来安装和切换。# 使用nvm安装并切换至Node.js 18 nvm install 18 nvm use 18Python: 需要Python 3.7并且确保python命令指向Python 3。许多Linux发行版需要同时安装python3和python-is-python3包。# Ubuntu/Debian sudo apt update sudo apt install python3 python3-pip python-is-python3Git: 用于克隆仓库和拉取子模块。C编译工具链: 在Linux上主要是build-essential在macOS上需要Xcode Command Line Tools。# Ubuntu/Debian sudo apt install build-essential # macOS xcode-select --install其他系统依赖: 如图形库、密钥管理库等。Void提供了一个非常方便的脚本来自动安装这些依赖。# 克隆Void仓库 git clone https://github.com/voideditor/void.git cd void # 运行Void构建器脚本这是关键步骤 # 这个脚本来自void-builder子仓库它会检查并安装所有缺失的依赖 ./scripts/install-dependencies.sh注意install-dependencies.sh脚本是构建成功的关键。它会根据你的操作系统Linux/macOS安装特定的包如libsecret、libxkbfile等。如果中途遇到权限问题可能需要使用sudo。在macOS上它可能会通过Homebrew安装一些依赖。3.2 源码获取与构建流程环境就绪后就可以开始真正的构建了。Void的构建过程分为两步首先获取所有源码包括VSCode上游代码和子模块然后进行编译。# 确保你在void仓库根目录 cd void # 步骤1同步并下载所有源码。这一步会从微软的VSCode仓库拉取基础代码和子模块耗时较长。 # 运行Void构建器提供的同步脚本 ./scripts/sync-repository.sh # 步骤2执行构建。这个过程会编译原生模块、打包资源、生成最终的可执行文件耗时可能从十几分钟到半小时以上取决于机器性能。 ./scripts/build.sh实操心得与常见坑点网络问题sync-repository.sh脚本需要从GitHub拉取大量数据包括VSCode的主仓库体积很大。国内用户可能会遇到速度慢或连接超时的问题。解决方法一是使用稳定的网络环境二是可以尝试配置Git代理。内存不足构建过程特别是最后的打包阶段对内存有一定要求。如果机器内存小于8GB可能会在编译某些原生模块如node-gyp编译时失败或极其缓慢。建议在16GB及以上内存的机器上进行。依赖版本冲突最棘手的问题。如果之前系统装过不同版本的Node.js或Python可能导致构建脚本调用错误的版本。务必使用node -v和python --version确认版本符合要求。使用nvm和虚拟环境如venv是管理多版本的最佳实践。查看详细日志如果build.sh失败不要只看最后几行报错。查看终端输出的完整日志错误信息通常在前面。也可以尝试运行npm run compile或yarn run compile取决于项目用的是npm还是yarnVoid通常沿用VSCode的yarn来获取更详细的编译错误。3.3 运行与初步配置构建成功后产物会出现在./VSCode-linux-x64Linux或./VSCode-darwin-x64macOS这样的目录中。进入该目录即可找到可执行文件。# Linux cd VSCode-linux-x64 ./code . # macOS cd VSCode-darwin-x64 # 如果是首次运行可能需要处理苹果的公证问题 # 可以进入Visual Studio Code.app/Contents/MacOS目录执行 cd Visual\ Studio\ Code.app/Contents/MacOS ./Electron首次运行你会看到一个和VSCode几乎一模一样的界面但它的标题是“Void”。至此一个完全由你从源码构建的AI编辑器就运行起来了。接下来是关键的一步配置AI模型。Void的AI设置通常在设置界面Ctrl,或Cmd,中可能位于“AI”或“Extensions”相关分类下。你需要配置至少一个“AI Provider”。这里以配置OpenAI为例找到AI设置项添加一个新的Provider。选择Provider类型如“OpenAI”。填入你的OpenAI API Base URL通常是https://api.openai.com/v1和API Key。指定默认使用的模型如gpt-4-turbo-preview。配置完成后你就可以像使用Cursor一样通过快捷键如CmdK唤起AI指令框输入自然语言指令来让AI编辑代码了。同时检查点功能通常会在侧边栏有一个专门的视图图标点击即可查看AI操作的历史记录。4. 深度定制探索与修改Void代码库对于大多数用户构建并运行就足够了。但对于想二次开发或学习IDE架构的开发者Void的代码库是一座宝库。由于项目已暂停功能开发其代码处于一个相对稳定的状态非常适合进行探索。4.1 代码库结构导航Void的代码结构完全继承了VSCode因此熟悉VSCode扩展开发的开发者会感到非常亲切。核心的AI功能集成在以下几个关键区域src/vs/workbench/contrib/chat/与src/vs/workbench/contrib/ai/这是AI聊天和AI指令功能的核心实现目录。你可以在这里找到处理用户输入、与AI提供商通信、解析AI响应并应用到编辑器的全部逻辑。例如查看aiEditorActions.ts这类文件可以了解“在光标处生成代码”、“解释选中代码”等具体操作是如何实现的。src/vs/workbench/contrib/checkpoints/这里包含了变更检查点和可视化功能的实现。研究这里的代码你可以理解Void是如何捕获编辑器状态、存储差异、以及呈现时间线视图的。src/vs/platform/ai/这里定义了AI相关的核心接口Interface和服务Service例如IAIProvider接口。任何新的AI提供商如支持Azure OpenAI、Google Gemini都需要实现这里的接口。这是实现“模型无关”架构的关键所在。src/vs/base/common/与src/vs/platform/这些是VSCode/Void的基础设施库包括事件系统、配置管理、网络请求等。AI功能会大量依赖这些底层工具。建议的探索方式是从用户界面入手。例如当你按下CmdK输入指令时对应的UI组件代码可能在src/vs/workbench/contrib/chat/browser/下。然后顺着事件流找到调用AI服务的地方最终追踪到发送HTTP请求的模块。4.2 添加自定义AI提供商这是最具实用价值的定制场景之一。假设你的公司内部部署了一个兼容OpenAI API格式的模型服务比如使用FastChat或vLLM搭建的你想把它接入Void。步骤大致如下定位提供商注册点在代码中搜索已有的提供商如“OpenAI”。你可能会在src/vs/workbench/services/ai/或src/vs/platform/ai/common/下找到一个注册表或工厂类。创建新提供商类新建一个TypeScript文件例如customAIProvider.ts。这个类需要实现IAIProvider接口。接口通常会要求你实现provideCompletions或provideChatResponse这样的方法。实现请求逻辑在该方法中你需要构建符合你内部服务API要求的请求体Payload。虽然Void内部可能使用一种标准格式但最终发送的HTTP请求需要适配你的服务。你需要处理认证如API Key在Header中、构造消息历史、设置参数temperature, max_tokens等。注册提供商在你找到的注册点将你的CustomAIProvider注册进去并给它一个ID如my-company-ai。添加配置UI可选但推荐为了让用户能在设置界面配置你的提供商你需要贡献Contribute一个配置项。这通常涉及修改package.json中的configuration部分并编写相应的设置UI描述。重新构建完成代码修改后重新运行./scripts/build.sh来编译和打包你的定制版Void。重要提示由于Void项目已暂停维护其代码库可能与最新的VSCode有较大差异。在修改核心代码前务必先通读VOID_CODEBASE_GUIDE.md文件了解其特定的代码组织方式和修改约定。直接修改可能会遇到意外的依赖或过时的API。4.3 主题与UI微调由于Void直接使用VSCode的UI框架所有VSCode支持的主题Theme和颜色自定义Color Customization在Void中完全适用。你可以通过修改settings.json来应用任何VSCode主题扩展或者精细调整编辑器的每一个颜色。如果你想进行更深度的UI修改比如改变AI聊天窗口的布局、为检查点视图添加新功能则需要修改对应的前端组件代码。这些代码主要是用TypeScript编写并使用VSCode自带的Monaco Editor组件和其前端框架。修改后同样需要重新构建。5. 生产环境部署与持续使用考量将自建的Void用于个人开发是一回事但考虑在团队或生产开发环境中部署则需要更周全的规划。5.1 打包与分发手动构建的Void只是一个目录要分发给团队成员可以将其打包成压缩文件。但更专业的方式是制作成系统安装包。Linux: 可以将构建出的目录直接打包成tar.gz或者参考VSCode的发布脚本制作成.deb(Debian/Ubuntu) 或.rpm(Fedora/RHEL) 包。这需要编写额外的打包脚本dpkg-deb或rpmbuild。macOS: 可以手动签署并公证Visual Studio Code.app包然后创建.dmg磁盘映像文件。对于内部使用也可以直接分发.app目录。Windows: 构建过程类似但需要在Windows环境下进行。产物可以打包成zip或制作成setup.exe安装程序。一个更自动化的方案是利用GitHub Actions或类似的CI/CD流水线。你可以创建一个工作流在每次代码更新时自动触发构建并生成所有平台的安装包作为发布产物。5.2 模型接入的成本与稳定性Void将模型选择的自由交给了你但同时也把成本和稳定性的责任交给了你。成本控制使用云端API如OpenAI, Anthropic会产生直接费用。你需要监控API使用量设置预算警报。可以考虑以下策略混合使用为不同复杂度的任务配置不同模型。简单补全用低成本模型复杂推理用高性能模型。缓存与去重Void本身可能没有高级的缓存机制。对于团队可以考虑在本地网络部署一个代理网关对相似的AI请求进行缓存避免重复消费。限流设置在Void的提供商配置中可能可以设置频率限制。如果没有需要在API提供商的控制台进行设置。稳定性与降级依赖外部API意味着服务受网络和提供商可用性影响。在设计团队工作流时需要考虑降级方案。例如当主要AI服务不可用时是否可以快速切换到一个备份的本地模型如通过Ollama运行的CodeLlama虽然性能有差距但能保证基本功能不中断。5.3 团队协作与配置管理如果团队内部部署Void统一配置是关键。默认设置同步Void/VSCode支持将设置同步到工作区.vscode/settings.json或全局配置文件。你可以创建一个包含团队标准AI配置如默认模型、API端点、温度设置等的设置文件模板让成员初始化项目时使用。扩展推荐除了AI功能团队可能还需要统一的代码格式化、 linting等扩展。可以创建.vscode/extensions.json文件来推荐这些扩展。内部模型端点如果使用内部部署的模型确保所有团队成员都能安全访问该端点。可能需要配置内网穿透或VPN此处指合法的企业内部虚拟专用网络用于安全连接内部资源。安全与审计虽然数据不经过Void服务器但API密钥和代码内容会发送到你配置的端点。确保端点服务本身有足够的安全防护和访问日志。对于高安全场景可以考虑使用短期有效的API令牌并由一个中央服务动态分发。5.4 当前局限性与未来展望必须清醒认识到Void作为“暂停维护”项目的现状。功能停滞这意味着它将不会获得VSCode上游的新功能如最新的语言支持、性能优化、UI改进。随着时间的推移与主流VSCode的体验差距可能会拉大。安全更新缺失VSCode依赖的第三方库如Node.js运行时、Electron框架的安全漏洞将不会在Void中得到及时修复。这对于处理代码这种敏感资产的环境是一个潜在风险。社区支持有限官方的Issue和PR响应基本停止遇到深层次技术问题只能依靠自己或社区零星的力量解决。因此将Void用于严肃的生产环境需要权衡。它更适合技术研究与实验作为探索AI-IDE集成技术的平台。高度定制化/内部工具开发团队有足够的技术能力维护自己的分支并愿意为了数据隐私和模型自由付出额外的维护成本。对最新编辑器功能不敏感的场景如果团队的核心需求就是稳定的编辑可控制的AI辅助且现有功能已满足那么Void的当前状态是可以接受的。项目的未来取决于其团队探索的“新颖编码想法”能否成功并最终反哺到Void IDE上。但无论如何Void已经为开源社区留下了一个宝贵的、可工作的AI编辑器蓝图它证明了构建一个开放、可控的AI编程环境是完全可行的。对于开发者个体而言通过构建和探索Void你不仅能获得一个强大的工具更能深入理解现代IDE与AI是如何深度结合的这份知识的价值或许远超工具本身。