使用 GitHub Copilot 进行快速工程的初学者指南

2025-05-24

使用 GitHub Copilot 进行快速工程的初学者指南

当我开始使用 GitHub Copilot 和其他生成式 AI 工具时,我感到很沮丧,因为我没有得到预期的结果。为什么人们使用这些工具时感觉如此成功,而它们却没有达到我的预期呢?例如,我让 GitHub Copilot 帮我解决一道 LeetCode 题目。GitHub Copilot 的图标会旋转,表示它正在思考,但结果却让我收到不一致的建议,甚至根本没有任何建议。我当时很恼火,但事实证明——我的使用方法错了!经过更多尝试,我改进了与 GitHub Copilot 的沟通方式,通过注释和代码的形式提供上下文、示例和清晰的说明。后来,我了解到这种做法叫做“快速工程”。在这篇博文中,我将讨论一些帮助你充分利用 GitHub Copilot 的技巧。

首先,让我们为不熟悉 GitHub Copilot 或提示工程的人们介绍一下基础知识。

什么是 GitHub Copilot?

GitHub Copilot 是由 GitHub 开发的 AI 结对编程工具,它由 OpenAI Codex 提供支持。OpenAI Codex 是由 OpenAI 创建的生成式预训练语言模型,可根据注释和代码的上下文提供上下文化的代码建议。要使用它,您可以安装以下集成开发环境 (IDE) 中提供的 GitHub Copilot 扩展程序:

  • Visual Studio
  • Visual Studio 代码
  • Neovim
  • JetBrains IDE(IntelliJ、PyCharm、WebStorm 等)

GitHub Copilot 可以自行编写代码吗?

在 GitHub,我们使用“AI 结对程序员”、“AI 助手”和“Copilot”等术语,因为这个工具离不开你——开发者!事实上,AI 系统只能执行开发者编程的任务,它们没有自由意志或独立决策的能力。在这种情况下,GitHub Copilot 会利用你编写的代码和注释中的上下文,立即提供代码建议!使用 GitHub Copilot,你可以将注释转换为代码,自动填充重复代码,并显示其他建议。

GitHub Copilot 内部是如何运作的?

GitHub Copilot 的底层功能是从注释和代码中提取上下文,即时建议具体代码行和整个函数。OpenAI Codex 是一个能够将自然语言转换为代码的机器学习模型,它为 GitHub Copilot 提供支持。

什么是即时工程?

提示工程是指向 AI 模型发出特定指令,使其生成所需结果的实践。提示是一系列文本或一行代码,可以触发 AI 模型的响应。你可以将这个概念比作收到一篇作文的提示。你可以收到一篇关于你克服挑战的经历的作文,或者一篇关于经典书籍(例如《了不起的盖茨比》)的作文。因此,你需要根据所学知识对提示做出回应。大型语言模型或法学硕士 (LLM) 也会采取类似的方式。

以下是快速工程的另一个例子:
我学习编程的时候,参加了一个活动,教一个机器人如何做三明治。这个活动很有趣,也很傻,但它教会了我:

  • 计算机只能按照你的指令去做
  • 你的指示需要非常具体
  • 他们更擅长一步一步地接受命令
  • 算法只是一系列指令

例如,如果我要告诉“机器人”制作三明治,我需要告诉它:

  1. 打开面包袋
  2. 从袋子里拿出前两片面包
  3. 将面包片并排放在柜台上
  4. 用黄油刀将花生酱涂在一片面包上
  5. 等等等等等等

如果没有这些清晰的指令,机器人可能会做出一些愚蠢的事情,比如在两片面包上都涂上花生酱,或者什么都不做。机器人不知道什么是三明治,也不知道如何制作三明治。它只知道如何遵循指令。

同样,GitHub Copilot 需要清晰的分步说明来生成最能帮助您的代码。

让我们讨论快速工程的最佳实践,以便为 GitHub Copilot 提供明确的指示并生成您想要的结果。

使用 GitHub Copilot 进行快速工程的最佳实践

提供高级背景信息,然后提供更详细的说明

对我来说最好的技术是在文件顶部的注释中提供高级上下文,然后以注释和代码的形式提供更详细的说明。

例如,如果我正在构建一个待办事项应用程序。我会在顶部写一条注释,内容是“使用 Next.js 构建一个待办事项应用程序,允许用户添加、编辑和删除待办事项”。然后,我会在下面几行中写一条注释来创建:

  • 待办事项列表组件,我会让 GitHub Copilot 在评论下方生成组件
  • 按钮组件,我会让 GitHub Copilot 生成评论下方的组件
  • 输入组件,我会让 GitHub Copilot 生成评论下方的组件
  • 添加函数,我会让 GitHub Copilot 在注释下方生成该函数
  • 编辑函数,我会让 GitHub Copilot 在注释下方生成函数
  • 删除函数,然后我会让 GitHub Copilot 生成注释下方的函数
  • 等等,等等,等等……

下面是我使用此技术通过 p5.js 建造房屋的一个例子:

在下面的 GIF 中,我在顶部写了一条注释,从总体上描述了我希望 p5.js 绘制的内容。我想画一座白色的房子,配上棕色的屋顶、红色的门和红色的烟囱。然后,我为房子的每个元素都写了一条注释,并让 GitHub Copilot 为每个元素生成代码。

p5js

提供具体细节

当您提供具体细节时,GitHub Copilot 将能够生成更准确的代码建议。例如,如果您希望 GitHub Copilot 从 API 检索数据,则需要告诉它要检索的数据类型、如何处理数据以及希望访问的 API 端点。

以下是非特定评论(提示)的示例,其中 GitHub Copilot 不太可能生成有用的建议:

// Get data from API
function getData() {
  //code goes here
}
Enter fullscreen mode Exit fullscreen mode

在上面的例子中,除了函数名称和左括号和右括号之外,GitHub Copilot 没有为我生成任何东西。

以下是特定评论(提示)的示例,其中 GitHub Copilot 更有可能生成有用的建议:

// Pass in user ids and retrieve user data from jsonplaceholder.typicode.com API, then return it as a JSON object
async function getUserData(userId) {
    const response = await fetch(`https://jsonplaceholder.typicode.com/users/${userId}`);
    const data = await response.json();
    return data;
}
Enter fullscreen mode Exit fullscreen mode

提供示例

除了告诉 GitHub Copilot 您希望它做什么之外,您还可以使用您喜欢的编码风格的示例来展示它想要做什么。虽然 GitHub Copilot 使用的是已经经过大量数据训练的 AI 模型,但向 GitHub Copilot 提供示例有助于它理解特定代码片段的上下文和约束。向 AI 模型展示您希望它们执行的操作示例是机器学习中的常见做法。

以下是工程师用来训练人工智能模型的一些方法:

  • 零样本学习
  • 一次性学习
  • 小样本学习

我让 ChatGPT 像向 5 岁小孩一样向我解释这些方法之间的区别,它给我的答案如下:

零样本学习

这就像你看到一个从未见过的新玩具,但你知道它是什么,因为它看起来很像你见过的其他玩具。例如,如果你见过很多不同种类的毛绒玩具,即使你从未见过,你也可能认出一个新的。同样,计算机也可以利用它对类似事物的了解,对新事物做出有根据的猜测,从而学会识别新事物。

一次性学习

这就像你第一次看到一个新玩具,爸爸妈妈会告诉你它叫什么名字、有什么用处。你只听过一次,就能记住它是什么,下次再见到它时就能认出来。计算机也可以通过同样的方法,通过几个例子来学习,从而学会识别新事物。

小样本学习

少样本学习就像只通过几个例子就能学会做新事情。比如,你想学习如何画一只猫,但你之前只看过几张猫的照片。有了少样本学习,即使你之前没见过很多猫,你仍然可以学会如何画猫。它就像一种神奇的力量,即使你没有很多例子可以借鉴,也能帮助你快速学习新事物!

以下是我向 GitHub Copilot 展示示例时与未展示示例时发生的情况:

没有例子

# Create a list of the first 10 prime numbers
primes = []

for num in range(2, 30):
    if all(num % i != 0 for i in range(2, num)):
        primes.append(num)
print(primes)
Enter fullscreen mode Exit fullscreen mode

在上面的代码片段中,GitHub Copilot 将准确返回前 10 个数字,但是效率低下,因为它将循环遍历 2 到 30 之间的所有 29 个数字。我们可以通过提供一个我们希望 GitHub Copilot 执行的操作的具体示例来获得更高效的结果。

举例来说

# Create a list of the first 10 prime numbers
# Example: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
primes = []

for num in range(2, 30):
    if all(num % i != 0 for i in range(2, num)):
        primes.append(num)
    if len(primes) == 10:
        break
print(primes)
Enter fullscreen mode Exit fullscreen mode

在上面的代码片段中,GitHub Copilot 将返回前十个素数,并在找到全部 10 个素数时停止。我的目标是获得准确而快速的结果,在我朝着正确的方向推动之后,GitHub Copilot 成功实现了这一目标。

其他提示

重复你的提示

如果您的初始提示得到了预期的响应,请删除生成的代码建议,并在评论中添加更多详细信息和示例,然后重试!这对您和 GitHub Copilot 来说都是一个学习的过程。您使用得越多,与 GitHub Copilot 沟通的技巧就越好。

在 IDE 中保持相关文件的标签页打开

目前,GitHub Copilot 无法获取整个代码库的上下文信息。但是,它可以读取当前文件以及 IDE 中打开的任何文件。我发现,保留一个打开的标签页来记录 GitHub Copilot 需要引用的相关文件很有帮助。例如,如果我正在编写一个使用其他文件中变量的函数,我会在 IDE 中保持该文件打开。这将有助于 GitHub Copilot 提供更准确的建议。

赋予你的人工智能助手身份

我从 BitRise 的开发倡导者Leilah Simone那里得到了这个建议。我还没有在 GitHub Copilot 上尝试过,但这个建议很有帮助。它有助于控制用户收到的响应类型。在 Leila 的案例中,她要求 ChatGPT 表现得像一位高级 iOS 工程师。她说:“这帮助她减少了语法和代码检查问题。”

使用可预测的模式

正如我们在上面的许多示例中看​​到的,GitHub Copilot 将遵循代码中的模式。AI 爱好者和开发者内容创建者YK(又名 CS Dojo)分享了他如何利用这一点:

对变量和函数使用一致、具体的命名约定来描述其用途

声明变量或函数时,请使用与变量用途相关的名称。这将有助于 GitHub Copilot 理解变量的上下文并生成更相关的建议。例如,不要使用“value”这样的通用变量名,而要使用“input_string”或“output_file”这样的更具体的名称。

GitHub Copilot 还会使用您在代码中使用的命名约定。例如,如果您使用驼峰式命名变量,GitHub Copilot 会建议使用驼峰式命名变量。如果您使用蛇形命名变量,GitHub Copilot 会建议使用蛇形命名变量。

使用良好的编码实践

虽然 GitHub Copilot 是一款强大的代码生成建议工具,但请务必记住,它并不能取代您自己的编程技能和专业知识。AI 模型的优劣取决于其训练数据,因此,务必将这些工具用作辅助工具,而不是完全依赖它们。我鼓励每一位 GitHub Copilot 用户:

  • 审查代码
  • 运行单元测试、集成测试以及任何其他程序形式的测试代码
  • 手动测试代码以确保其按预期工作
  • 并使用良好的编码实践,因为 GitHub Copilot 将遵循您的编码风格和模式作为其建议的指导。

超越你的编辑器

目前,GitHub Copilot 是一款可在最热门 IDE 中使用的扩展程序。此外,还有一款独立的实验性扩展程序 GitHub Copilot Labs,可通过 GitHub Copilot 访问。Copilot Labs 可以帮助您翻译、调试、测试、记录和重构代码。此外,我们最近推出了 Copilot X,这是一套可在 IDE 之外提高开发人员生产力的功能套件。Copilot X 包含:

  • Copilot for Docs - 使开发人员免于搜索大量文档。
  • Copilot for Pull Requests - 帮助您编写更好的 PR 描述,并帮助您的团队更快地审查和合并 PR/
  • Copilot Chat - 使用 GitHub Copilot 聊天在您的编辑器中获得类似 ChatGPT 的体验。
  • Copilot for CLI - 帮助您记住 shell 命令和标志,以便更快地在终端中运行命令。
  • Copilot Voice - 编写和编辑代码、导航代码库以及使用语音控制 Visual Studio Code。

Copilot X 的功能/产品目前处于技术预览阶段。如果您想使用上述功能之一,请访问https://github.com/features/preview/copilot-x注册候补名单。

开始使用 GitHub Copilot 进行快速工程实践

学习如何最佳地使用 GitHub Copilot 的最佳方法是开始使用它。您可以在此处注册以访问 GitHub Copilot 。

如果您是企业领导者,并且希望让整个团队访问 GitHub Copilot,请在此处注册 GitHub Copilot for Business 。

让我们一起继续学习

感谢您阅读这篇博文。我很乐意听取您的意见!我仍在学习更多关于人工智能、GitHub Copilot 和快速开发的知识。如果您是 GitHub Copilot 的粉丝,并且已经学会了如何使用它来改进您的开发者工作流程,请在下方评论区分享您的一些技巧!

类似内容,请关注 GitHub 和我在 DEV.to 上的分享!此外,您还可以查看其他资源,了解更多关于快速工程的知识:

文章来源:https://dev.to/github/a-beginners-guide-to-prompt-engineering-with-github-copilot-3ibp
PREV
如何为你的开源项目创建完美的 README
NEXT
10 个出色的 GitHub 个人资料 README GitHub 活动 Readme 近期活动 Github Readme 生成器