rubberduck-vscode
将 ChatGPT 无缝嵌入 VS Code,通过上下文感知对话实现代码生成、编辑、解释、测试生成和 Bug 诊断的 AI 编程助手
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
将 ChatGPT 无缝嵌入 VS Code,通过上下文感知对话实现代码生成、编辑、解释、测试生成和 Bug 诊断的 AI 编程助手
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你正在调试一段复杂的递归算法,忽然发现逻辑似乎有问题。传统的做法是打开浏览器、粘贴代码、等待响应、再复制回来——这套流程打断了整整 5 分钟的心流状态。而 Rubberduck 彻底改变了这套范式:右键选中代码,直接唤起 AI 对话,答案就在编辑器侧边栏,无需离开当前工作窗口。
这就是 Rubberduck 区别于"网页版 AI 聊天"的本质:它是一款深度集成到 VS Code 工作流的 AI 编程助手,作者 Lars Grammel 将其定位为"ChatGPT for Visual Studio Code"——不是简单的 API 调用封装,而是围绕开发者日常高频场景重新设计的交互体验。
2022 年底 ChatGPT 发布后,"用 AI 写代码"迅速成为开发者圈的热门话题。早期的使用方式高度依赖外部网页:复制代码 → 粘贴到 AI 窗口 → 获取结果 → 复制回来。这个流程的问题在于上下文断裂:AI 无法感知你正在编辑哪个文件、选择了哪段代码、当前光标位置是什么。
Rubberduck 的设计哲学正是解决这个断裂:它通过 VS Code 的扩展 API 天然获得编辑器全量上下文——当前选中代码、打开文件列表、编程语言、光标位置——这些信息被自动注入 AI 对话的 Prompt 中,让 AI 的回复始终与你的实际工作保持同步。
作者 Lars Grammel 在项目中明确提到,这种"上下文感知"的对话设计受到了 GitHub Copilot 的启发,但选择了一条不同的路线:Copilot 主打自动补全,而 Rubberduck 主打主动对话——用户主动发起提问,AI 在侧边栏以对话形式响应,过程可追溯、可编辑、可复用。
Rubberduck 提供了一整套覆盖编程全生命周期的 AI 辅助功能:
代码生成(Generate Code):通过对话描述需求,AI 直接生成符合当前项目风格的代码片段。与 Copilot 的自动补全不同,用户可以详细描述约束条件(如"使用 async/await"、"处理边界情况"),AI 生成后会在代码编辑器中以 Diff 视图呈现修改内容,用户可逐行审查后一键应用。
代码编辑(Edit Code):选中现有代码后,通过自然语言指令让 AI 对其进行修改——比如"把这个循环改成函数式风格"、"为这个函数添加参数校验"。编辑结果同样以 Diff 视图展示,保留人工审核环节。
代码解释(Explain Code):对任何选中代码给出技术解释,不仅仅是逐行翻译,而是分析代码的设计意图、时间复杂度、潜在风险和使用场景。这对于接手遗留代码、审查第三方库的开发者尤为实用。
单元测试生成(Generate Tests):根据选中代码自动生成测试用例,覆盖常见路径,减轻"测试负担重就不写测试"的工程惰性。
Bug 查找(Find Bugs):通过静态分析和 AI 推理的结合,检测代码中的逻辑错误、边界条件遗漏和常见反模式。
错误诊断(Diagnose Errors):粘贴编译器或运行时的错误信息,让 AI 给出根因分析和修复建议,比搜索引擎更精准,比文档更贴合你的具体代码。
自定义对话模板:这是 Rubberduck 的差异化亮点。用户可以编写自定义的 .rdt.md 模板文件(基于 Markdown 的对话格式),定义 AI 的角色定位、响应风格和 Prompt 策略。例如,可以创建一个"代码审查助手"模板,专注于性能和安全性建议;或创建一个"教学助手"模板,用更口语化的方式解释概念。
从项目结构来看,Rubberduck 是一个典型的大型 TypeScript Monorepo,使用 Nx 作为构建编排工具,pnpm 作为包管理器,总计约 215 个文件/目录分布在三个主要包中:
| 包 | 职责 |
|---|---|
lib/extension | 核心扩展逻辑:命令注册、AI 客户端、会话管理、Diff 编辑器、模板引擎 |
lib/webview | React 构建的侧边栏 UI:Chat 面板、消息展示、Diff 视图 |
lib/common | 扩展与 Webview 之间的通信协议(TypeScript 类型定义) |
这种架构的好处是关注点分离。扩展进程(Node.js 运行环境)负责与 VS Code API 交互、调用 OpenAI API、管理会话状态;Webview 进程(浏览器运行环境)只负责 UI 渲染和用户交互,两者通过自定义的消息协议(定义在 lib/common/src/webview-api/)通信。
在 lib/extension/src/conversation/ 目录下,可以看到 Rubberduck 的核心对话逻辑:会话管理(Conversation.ts)、消息结构(Message.ts)、上下文注入(input/ 目录)等。值得特别关注的是 retrieval-augmentation 目录——这是一个检索增强生成(RAG)模块,支持通过向量相似度匹配将项目内相关代码片段注入到 AI 对话的上下文中,帮助 AI 更好地理解项目整体结构。
Rubberduck 目前支持以下 OpenAI 模型:gpt-3.5-turbo 系列和 gpt-4 系列,并预留了对 llama.cpp 的接口,显示出对本地模型(Llama 等)的长期规划。API Endpoint 支持用户自定义配置,方便接入兼容 OpenAI API 格式的代理服务或第三方模型服务。
Rubberduck 的安装极度简单:从 VS Code Marketplace 一键安装,无需命令行,无需配置文件。唯一的前提是拥有 OpenAI API Key——这既是它的优势(部署零门槛),也是它的隐性成本(需要付费使用 OpenAI API)。
对比 GitHub Copilot:Copilot 由微软补贴,用户每月支付 10 美元即可无限制使用;而 Rubberduck 的 token 消耗完全取决于用户的使用频率,对于高频用户来说成本可能更高。不过,这也意味着费用完全透明——用户只为实际使用的 token 付费。
从硬件需求看,Rubberduck 本身是纯前端扩展,不消耗本地 GPU 资源。所有 AI 计算发生在 OpenAI 的服务器端,因此即使在没有独显的轻薄本上也能流畅运行。内存占用约 512MB,磁盘占用约 100MB。
尽管 Rubberduck 支持自定义 API Base URL(理论上可以指向本地部署的兼容服务),但其核心功能仍然强依赖 OpenAI API。对于有数据隐私要求的企业用户(不希望代码内容发送到第三方服务器),Rubberduck 目前并非理想选择——除非自行部署兼容 OpenAI API 格式的本地模型服务(如通过 LocalAI 或 Ollama),但这已超出普通用户的能力边界。
此外,作为一个纯 VS Code 扩展,Rubberduck 无法覆盖 JetBrains 全家桶、Neovim、Emacs 等其他编辑器的用户。这类用户的替代方案包括 Cursor(内置 AI 的 IDE)或 GitHub Copilot(跨编辑器覆盖更广)。
631 颗 GitHub Stars 对于一个工具类 VS Code 扩展来说是一个可观的数字。在 VS Code Marketplace 上,类似定位的 AI 辅助扩展竞争激烈——Copilot 凭借先发优势和微软生态占据绝对主导,而 Rubberduck 则通过"对话式交互 + 自定义模板 + 检索增强"走出了差异化路线。
值得关注的是其 retrieval-augmentation 功能的引入:将项目代码向量化并注入对话上下文,这是 RAG 架构在 IDE 辅助场景的典型应用。相比 Copilot 的"闭包式补全",Rubberduck 的对话模式更容易承载复杂的多轮推理和多文件上下文理解任务,在处理大型遗留代码库时潜力更大。
如果作者持续推进对本地模型的支持(尤其是 llama.cpp 接口的完善),Rubberduck 有望成为那些希望在本地运行 AI 辅助编程、同时又不想放弃 VS Code 生态的开发者群体的首选工具。