实战应用:在 GitHub Copilot 中使用不同的 AI 模型

904 阅读7分钟

演示 GitHub Copilot 不同 AI 模型应用,强调上下文和 Agent 模式对效率的影响。

摘要

本文通过对比实验,演示了如何在 GitHub Copilot 中使用不同的 AI 模型进行软件开发,并探讨上下文对模型输出质量的影响。文章介绍了 Copilot 的 Ask、Edit 和 Agent 三种模式,并重点介绍 Agent 模式在脚手架搭建和文档生成中的应用。此外,文章还强调了使用自定义指令来规范模型行为,以及在速度和输出质量之间找到平衡的重要性,为开发者选择 AI 模型提供参考。 Claude 3.7 十四行诗,Gemini 2.5 专业版,GPT-4……开发人员在选择 GitHub Copilot 时的选择权至关重要,尤其是在选择前沿模型方面更是如此。

但现在有如此多的前沿生成式 AI 模型可以与 GitHub Copilot 一起使用(而且似乎每天都有新的模型出现),在使用 Copilot Chat、编辑、询问和代理模式时,你如何选择合适的模型来完成任务呢?

在最近的一段视频中,我和 GitHub 的开发者倡导者 Kedasha Kerr(即@ladykerr)合作回答了这个问题。我们的目标是在 Copilot 的不同模式下(询问、编辑和代理模式)构建同一个旅行预订应用,并在使用 Copilot 不断扩大的基础模型列表时比较每个 AI 模型的实际开发工作流程。

我们打算构建一个非常简单的旅行预订网页应用 (类似于“浏览酒店房间、选择日期、预订房间”)。为了保持演示的流畅,我们选择了轻量级的技术栈:

  • 后端:  Flask REST API
  • 前端:  Vue.js,使用 Tailwind 样式
  • 数据:  一个本地的 data.json 文件而不是真正的数据库

这样我们就可以在搭建应用、连接端点、添加测试、文档和安全调整的过程中,比较模型的表面面积了。

这里是我们视频中的一些关键收获(你应该去看看)。

但在开始之前,让我们谈谈 Copilot 的三种模式

GitHub Copilot 给你三种不同的“模式”:ask、edit 和 agent 模式。ask 用于回答问题,edit 是精确的代码重写手术刀,而 agent 模式可以从你的提示到完成的提交,全程驱动一个任务。可以这样想:ask 回答,edit 辅助,agent 执行。

功能介绍(具体实现)最佳使用时机
询问模式分析你高亮的代码(或打开文件的上下文),并返回解释、示例或快速修复建议, 不接触你的代码 。没有代码差异,也不保存。它只是对话式的回答。• 调试一个令人困惑的堆栈跟踪 • 回忆一下某个库或模式 • 随手获取一个代码片段或算法
编辑模式你选择一个或多个文件,在简洁的语言提示中描述一个更改,然后 Copilot 在这些文件中应用内联编辑。但在开始之前,它会 显示一个差异,让你批准每一个更改• 添加错误处理或重构重复代码 • 在现有代码库中进行紧凑的多文件调整 • 通过自定义指令应用团队样式规则
代理模式给它一个高层次的提示,Copilot 将计划步骤,运行终端命令,编辑多个文件,并持续迭代 自主地 ,同时展示需要审核的高风险命令。非常适合项目范围内的多步骤工作。• 根据 README 生成新的服务或功能 • 大型 bug 修复,涉及多个模块 • 自动清理(例如,将 Tailwind 应用到所有地方)

了解有关 ask、edit 和 agent 模式的信息

提示 1:无论你使用哪种模型,上下文比你想象的更重要

你选择的模型远不是唯一变量,你提供的上下文往往是最重要的因素之一。

这意味着你如何构建提示——以及你在提示和附加文件中为 Copilot 提供的上下文——对输出质量有很大影响。通过在 Copilot 代理模式或编辑模式之间切换,以及在会话中切换模型,我们探索了 Copilot 在收到恰到好处的细节时或被要求提前思考几步时的反应。

我们的演示强调了不同模式对结果的影响,以及精心构建的提示可以显著改变模型的行为(尤其是在复杂的或模棱两可的编码任务中)。

要点在于: 如果你没有刻意构建你的提示和上下文,你可能已经在性能上有所损失。

要深入了解模型选择,指南 “我应该使用哪个 AI 模型与 GitHub Copilot 一起使用?” 提供了全面的分析。

提示 2: Copilot 代理模式是一个强大的工具

代理模式仍然相对新且发展迅速,允许 Copilot 更自主地操作,通过导航文件、进行更改以及执行仓库范围内的任务,而无需过多的手动干预。 

这种模式为新的工作流程提供了可能性(尤其是对于重复性或大规模的更改)。但它也要求一种不同类型的信任和监督。亲眼看到它运行有助于了解它在工作流程中的位置。 

在我们的演示中,我们使用代理模式的两种方式是: 

  • 一键项目脚手架:One-click project scaffolding:Kedasha 高亮了项目 README,并简单地告诉 Copilot “implement this”。代理模式(运行 Gemini 2.5 Pro)创建了整个 Flask 和 Vue 仓库,包括目录、模板代码、单元测试,甚至还有预填充的数据。
  • 端到端技术文档 : 我开始使用 Claude 3.5 的代理模式,并提示:“ 为这个应用程序编写文档……包括使用 Mermaid 绘制的工作流图 。”Copilot 生成了一份精美的 README、API 参考文档,以及两个 Mermaid 序列图/流程图,然后打开预览,让我在提交之前先渲染图表。

提示3:使用自定义指令来设定你的规则

会议中的另一个见解是,通过自定义 Copilot 的行为,你可以获得多大的收益。

如果你不知道,自定义指令允许你在 Copilot 提出任何建议之前先设定规则(例如 API 调用方式、命名约定和风格标准)。

Kedasha 特别强调了自定义指令如何根据您的工作流程或团队的需求来调整语气、代码风格和任务重点。

一个例子?通过自定义指令给每个模型设定相同的规则,这样每次模型之间的切换都能产生一致且安全的代码,而无需每次重新解释标准。

无论您是让 Copilot 避免过度解释,坚持某种技术栈,还是采用一致的注释风格,自定义选项比大多数人意识到的要强大得多。如果您还没有个性化 Copilot,请尝试自定义指令(并查看我们的文档以开始使用 )。

提示 4:速度与输出质量之间的平衡

不论使用哪个模型,响应性、完整性和置信度之间总是存在权衡。例如,一个较大的模型在您编辑代码时可能不会提供快速的建议,但一个较小的模型可能无法提供最佳的重构建议,尽管它在实践中可能更快。

TL;DR:  这不是关于追求“最佳”模型——而是要知道何时切换以及为什么。你的默认模型可能 80%的时间都能工作——但有其他模型备选,可以让你们更快更好地处理边缘情况。