共计 2567 个字符,预计需要花费 7 分钟才能阅读完成。
在过来的六个月里,我始终在大大小小的、旧的和新的存储库中应用 GitHub Copilot。对我来说,GitHub Copilot 是我从来不晓得本人想要的配对程序员。大多数时候,它给了我很好的倡议,但它并没有给我当一个人看着我编码时所感触到的社交焦虑。
在这篇文章中,我将分享我提醒 GitHub Copilot 的最佳实际,以帮忙大家尽可能多地取得很好的倡议。在高层次上,我的倡议是提供背景信息并具备可预测性。
无关更多详细信息,请观看我的 YouTube 视频或持续浏览。
提供上下文
GitHub Copilot 通过大量示例的训练,因而对于给定的代码行,它可能对下一行代码有许多可能的预测。咱们能够尝试通过代码行四周的上下文来放大这些可能性。
- 关上文件:像 GitHub Copilot 这样的 LLM 具备无限的“上下文窗口”,因而它不能一次在其窗口中保留整个代码库。然而 GitHub 依然心愿为 Copilot 提供一些上下文,因而如果您的编辑器关上了一些文件,GitHub 可能会将这些文件的内容发送给 Copilot。我倡议放弃关上与你正在编写的代码最相干的文件:如果你正在编写测试,测试文件,如果你正在解决数据,一个示例数据文件,程序的帮忙程序函数等。
正如我在 10:02 的视频中所示,有时有几个与上下文相干的文件:一个演示新文件的格局(例如,新 views.py 具备与现有 views.py 相似的格局),另一个为新文件提供数据(例如,新 views.py 应用来自 models.py 的类)。
-
正文:您能够在多个级别编写正文:形容文件用处及其与我的项目其余部分的关系的高级文件正文、函数级正文、类级正文和行正文。最有用的正文是那些革除代码中可能不明确的方面的正文。例如,如果你正在编写一个在 Python 中解决列表的函数,你的函数级正文能够说明它是返回一个全新的列表还是扭转现有列表。这种区别从根本上扭转了实现。
def capitalize_titles(book_titles):“”“返回一个新的 book_titles 列表,每个题目都大写”“”
- 导入:许多语言要求您在文件顶部明确重要的规范库或第三方模块。这些信息对于 Copilot 决定如何编写所需的代码十分有帮忙。例如,如果您应用 Python 抓取网页,则导入
网址 lib3
和漂亮汤
在顶部将立刻领导 Copilot 编写最合适的代码。 -
名称:我始终是描述性名称的粉丝,因为我在一个 Java 家庭长大,但当初我有额定的能源应用相当描述性的名字:Copilot 的更多上下文。例如,如果您的代码解析 JSON 文件并存储后果,则能够应用变量名称,例如
数据
. 然而,如果您晓得后果实际上是一个列表,并且每个我的项目都形容一本书,那么更有用的变量名称将是书
. 这表明变量可能蕴含一个序列类型的对象,并且其中的每个对象都示意一本书。books = json.loads(open('books.json'))
-
类型:如果您应用可选键入的语言(如 Python 或 JavaScript)进行编码,您可能须要思考增加类型,至多增加到参数和返回值。这有助于放大实现代码块的可能代码行。
def capitalize_titles(book_titles:list[str])-> list[str]:
正如我在 1:46 的视频中所展现的那样,我有时会更改 Copilot 生成的代码的名称或类型,以便为前面的代码提供更多上下文。
无论您是否应用 GitHub Copilot,上述许多做法通常对您的代码库都有益处,例如描述性名称和类型正文。至于正文,我将块级正文保留在我的代码中,但删除了看起来多余的行级正文。您的最终代码有两个受众,计算机解释它和浏览它的人,因而请放弃生成正确和清晰的代码的实际。
可预测
像 GitHub Copilot 这样的 LLMS 十分善于模式。你给它看一个模式,它十分想放弃这个模式。因为必须遵循语言的语法,编程实质上曾经是模式填充的,然而有一些办法能够使程序更加“模式化”。
- 变量命名约定:应用更容易预测变量应用形式的命名计划,特地是如果该命名计划曾经是该语言的约定。例如,Python 语言在技术上没有常量,但对于不应该更改的变量(如 PLANCK_CONSTANT)应用所有大写字母依然是传统的。另一种约定是为保留相似数组对象的变量附加“s”后缀。您可能还具备特定代码库的约定,例如始终应用“_get_”启动 getter 函数。Copilot 也会学习这些约定,如果你与它们保持一致的话。
- 结构化软件架构:就像人类一样,Copilot 在意大利面条代码方面做得并不好。什么性能去哪里?接下来会产生什么性能?对于您和 Copilot 来说,以可预测的形式组织您的代码的确很有帮忙,特地是如果您能够应用风行的框架来执行此操作。例如,Python 的 Django 框架总是将代码模块化为“models.py”、“views.py”、“urls.py”和“模板”文件夹。当 Copilot 在其中一个文件中时,它能够更好地理解属于那里的内容。
应用 Copilot
我最初的提醒不是对于如何应用 Copilot 自身,而是对于如何将 VS Code 与 Copilot 一起应用。VS Code 基本上能够成为您的另一个结对程序员,通过装置 linting 工具并使它们可能实时工作。这样,如果 Copilot 的确给出了一个谬误的倡议(例如旧办法名称或不正确的函数调用链),您将立刻看到波浪线。
而后,您能够将鼠标悬停在波浪线上以查看错误报告,并查看函数的智能感知以查看其预期参数和返回值。如果依然不确定如何修复它,请搜寻相干文档以获取更多领导。如果您启用了 Copilot 聊天,您甚至能够尝试要求 Copilot 修复它。
当然,Copilot 无奈捕捉所有问题,因而您依然应该运行代码并编写测试以对代码充满信心。然而 linters 能够捕捉很多问题并避免您的代码走上谬误的路线,因而我倡议在任何 Copilot 设置中应用实时 linters。
对于 Python 中的 linting,我通常应用 Ruff 扩大以及以下设置:
“python.linting.enabled”:true,“”:{“editor.formatOnSave”:true,“editor.codeActionsOnSave”:{“source.fixAll”:true} }