在 VS Code 中用 ChatGPT - Genie AI 解释、重构和测试 Rails 代码

原标题Using ChatGPT - Genie AI in VS Code to Explain, Refactor and Test Rails Code

Matthew Berman 在 Ruby on Rails 项目中演示一款 2023 年的 VS Code 扩展,并探讨其代码上下文的局限。

MBMatthew Berman讲者 · Forward Future
频道
Matthew Berman
发布
2023年4月1日
视频
7:48
阅读
4 分钟
幻灯片
3
原文
英语
在 YouTube 打开
往下滚动阅读时,视频会缩到右下角继续播放。字幕跟随阅读语言。
阅读语言共 2 种语言可读
由 AI 从英语原文翻译。打开“对照原文”可以逐段核对。
摘要

30 秒看懂

2023 年 4 月,Matthew Berman 在等待 GitHub Copilot X 使用资格期间试用 ChatGPT - Genie AI。他用 Rails 代码演示了解释、优化、查找问题和生成测试,并指出自己无法确认扩展能否看到整个代码库。

  1. 1六项代码操作Genie 提供测试、查找潜在问题、优化、解释、添加注释和补全代码等操作。
  2. 2解释状态机扩展解释了 Rails webhook 模型中的 AASM 状态和事件。
  3. 3缩短关联辅助代码建议的改写将示例从 45 行缩短至 21 行,但代码更短不能证明行为等价。
  4. 4生成测试其中一个建议测试比较关联公司的公开 ID 与通过客户对象获取的值。
  5. 5上下文范围仍不确定Berman 可以选择代码作为提示词输入,但没有验证扩展是否拥有整个代码库的上下文。

要点建议

  1. 该扩展提供快捷操作,可解释、优化、测试和补全选中的代码。
  2. 状态机解释和关联辅助代码重构展示了它在 Rails 代码上的工作流程。
  3. 生成的重构代码、测试和安全建议都需要人工审查并执行验证。
  4. 演示不能证明 Genie 可以访问整个代码库。
  5. 视频讨论的模型支持和可用性反映 2023 年 4 月的情况。
全文

按章节阅读整理后的全文

只看原始文稿
01

安装 Genie AI

Berman 在等待 Copilot X 时介绍了这个扩展。他说明了自己在 2023 年观察到的 API 密钥要求和模型支持情况。

我已经使用 GitHub Copilot 很长时间,发现它为我节省了不少时间。在这期 2023 年 4 月的教程中,我一边等待刚刚宣布的 GitHub Copilot X 使用资格,一边探索一个 VS Code 扩展。我选择的 ChatGPT - Genie AI 能立即在我的 Ruby on Rails 项目中使用,而我试过的另一个扩展则不行。

当时 Genie 需要 OpenAI API 密钥,似乎支持 GPT-3.5。我预计它随后会支持 GPT-4,但这只是预测,而非我演示过的功能。安装后,打开 VS Code 侧边栏中的 Genie 图标。界面提供提示词输入框、温度选项、保存的快捷提示词,以及针对选中代码的六项操作。

02

解释 Rails 状态机

侧边栏提供对选中代码的操作。Genie 解释了一个使用 AASM 的 webhook 模型。

VS Code 中的 Genie 操作
幻灯片 1 / 3VS Code 中的 Genie 操作侧边栏在 Rails webhook 模型旁展示了六个代码快捷操作。

这些按钮分别用于添加测试、查找潜在问题、优化、解释、添加注释和补全代码。我觉得生成测试尤其有用。优化方面,我曾给它一段自己知道过于复杂的代码,得到了更短、更清晰且通过了我的测试的版本;但这次经验不能保证每次生成的修改都保留原有行为。

进入陌生代码库时,解释功能可以提供帮助:选择一个方法或文件,请它说明。我没有广泛测试注释生成器,也想知道随时请求解释会在多大程度上改变我们对注释的需求。代码补全则类似于 GitHub Copilot 已经提供的一项功能。

首先,我选择一个 Rails webhook 端点模型。它使用 AASM gem 管理 active、paused、archived 和 disabled 等状态。Genie 解释了状态机及其事件,我认为描述很准确。这个例子展示了一种理解陌生 Ruby 代码的方法,包括使用元编程的代码。

03

重构与发现问题

Berman 检查关联辅助代码,请 Genie 将其缩短,并审阅建议。提出的修改仍需要验证。

接着,我查看 AssociatedPublicIds 文件,它为关联模型创建公开 ID,使 API 不必暴露递增的数据库 ID。我选中代码,请 Genie 解释。它识别出返回关联记录公开 ID 的方法,这符合我的意图。

关联辅助代码优化前后
幻灯片 2 / 3关联辅助代码优化前后并排画面对比了原始代码与生成的较短改写。

我请 Genie 优化这个文件。生成版本合并了相似的 has-many、belongs-to 和 has-one 逻辑,将画面上的代码从 45 行缩短到 21 行。我觉得它更清晰,但代码更短本身并不能证明行为等价:生成的修改仍需要审查和测试。

“查找问题”操作指出了几个可能的问题:如果类名来自用户输入,动态查找常量可能有风险;动态定义的方法可能增加维护难度;安全导航运算符需要 Ruby 2.3 或更高版本。我同意这段元编程可能过于花哨,也了解了这个版本限制。Genie 建议用 Module.const_get 作为更安全的替代,但仅仅更换接收对象并不能验证不可信输入;它的建议需要仔细审查。

04

测试、设置和上下文

生成的测试检查关联对象的公开 ID。Berman 探索温度预设与保存提示词,并说明他对代码库整体上下文的不确定性。

为公开 ID 生成的测试
幻灯片 3 / 3为公开 ID 生成的测试展示的测试包含对客户关联公司公开 ID 的断言。

然后我选中代码,请 Genie 添加测试。其中一个生成的示例断言,客户的公司公开 ID 等于关联公司的公开 ID,这正是我期望的关系。生成的测试是一个有用的起点;演示展示了代码,并没有完整运行测试。

界面提供 Precise、Balanced 和 Creative 三种温度选项。温度会影响回答的变化程度;我猜这些预设可能对应零和 0.5 之类的值,但没有验证具体设置。星号按钮可以把自定义提示词保存为快捷项,例如要求编写测试的指令。

我最关心的是上下文。在界面中,我可以选择传给提示词的代码,但还没找到如何以整个代码库为上下文来提问。我猜 Genie 可能拥有更多项目上下文,同时也承认自己可能猜错了;视频没有证明它能够看到整个代码库。

我希望工具能回答涉及整个项目的问题,而不仅仅是打开的文件和选中的代码。即便有这个限制,我仍觉得这款扩展有用,也希望即将推出的 Copilot X 能解决其中一些不够完善的地方。

同频道的其他文章

12 张幻灯片34:21EN → 简体中文
Matthew Berman· 2026年10月27日Matthew Berman 解读 Anthropic 的上市文件、AI 增长与治理Matthew Berman, Sam Altman · Forward Future主持人审视 S-1 中的财务指标、算力战略和投票结构,并质疑 AI 快速发展与安全之间的张力。AnthropicAI Safety企业 AI+2
0:26EN → 简体中文
Matthew Berman· 2026年10月25日Sam Altman 谈 AI 世界中的人类价值与问题解决Sam Altman · OpenAI在一段简短的访谈摘录中,Altman 思考解决难题的乐趣,以及人在解读结果时的作用。Human-AI CollaborationFuture of WorkAI Strategy
2 张幻灯片0:36EN → 简体中文
Matthew Berman· 2026年10月25日Kimi K3.1 与魔方求解演示Matthew Berman · Forward FutureMatthew Berman 展示一个被打乱的虚拟魔方如何复原,并对 Kimi K3.1 的测试给予积极评价。评估编程智能体Open-weight models
2 张幻灯片0:21EN → 简体中文
Matthew Berman· 2026年10月24日AI 生成的 Kimi 基准图表使用了虚构分数Matthew Berman · Forward FutureMatthew Berman 要求生成一张 Kimi K3.1 Pro 基准图表,随后发现图中的数字只是示意性占位值。Benchmarks评估Generative media
6 张幻灯片25:50EN → 简体中文
Matthew Berman· 2026年10月24日Kimi K3.1 Pro 实测:3D 演示出色,表现不一,价格有竞争力Matthew Berman · Forward FutureMatthew Berman 测试这款开放权重模型的编程、3D 渲染和视觉讲解能力,并比较基准成绩与价格。Open-weight modelsBenchmarksAI cost & performance+1
2 张幻灯片32:20EN → 简体中文
Matthew Berman· 2026年10月23日本地 AI 究竟适合谁?成本、取舍与混合模式的未来Matthew Berman · Forward FutureMatthew Berman 权衡数据控制和自主权,与硬件成本、设置复杂度及推理速度之间的关系。Local inferenceOpen-weight modelsAI cost & performance+1