Skip to main content

使用 Copilot CLI 作为 AI SME

将 Copilot 命令行界面(CLI) 作为随时可用的主题专家,帮助你了解代码库的工作方式,从而让你能够满怀信心地维护它或添加新功能。

Introduction

当你开始处理不熟悉的代码库时,或者你被要求更改以前从未接触过的大型代码库的一部分时,通常需要一位主题专家(SME)来加快速度。 SME 通常是团队中经验更丰富的开发人员,他们知道代码如何组合在一起,并可以回答你的问题。 中小企业并不总是可用的,它们可能处于另一个时区,忙于自己的工作,或者根本不在团队中。

需要了解不熟悉的代码库时,通常依赖于知道代码的团队成员。 当该人不可用时, Copilot 命令行界面(CLI) 可以填补空白。 在本教程中,你将询问 Copilot 命令行界面(CLI) 有关存储库代码的问题,学习生成基于代码的答案的提示技术,并建立开始进行更改的信心。

何时使用 AI SME(甚至何时使用 AI SME?)

在需要更快地了解代码库时,本教程非常有用。 例如:

  • 你刚刚加入了一个团队或一个开放源代码项目,需要快速加快速度。
  • 你需要修改一个自己以前从未接触过的大型代码库中的某个部分。
  • 你继承了原始作者不再维护的服务或库。

本教程假定你熟悉终端,并阅读所浏览项目使用的语言的代码。 你不需要具备任何使用 Copilot 命令行界面(CLI) 的经验。

先决条件

在开始之前,请确保已做好以下准备:

1.在存储库中启动会话

打开终端并切换到你想了解的代码库根目录。 Copilot 命令行界面(CLI)从存储库根目录开始,意味着它具有作为上下文可用的整个代码库。

Shell
cd PATH/TO/YOUR/REPOSITORY
copilot

你现在正在交互式 Copilot 命令行界面(CLI) 会话中。 你在提示符中键入的任何内容都会被发送给模型;该模型可以读取存储库中的文件、运行 shell 命令(例如 git loggrep),并根据其找到的内容回答你的问题。

提示

  • 如果你信任 Copilot 命令行界面(CLI) 在无需请求批准的情况下运行命令,同时阻止其修改文件,请从 copilot --deny-tool='write' --allow-all-tools 开始。 请参阅“允许和拒绝工具使用”。
  • 如果你正在处理一个非常大的代码库,从相关子目录启动 Copilot 命令行界面(CLI) 可能会获得更好的结果。 这会将上下文限制为最相关的文件。

2. 答案应以代码为依据,而不是文档

大多数存储库都包含代码和文档的混合体:自述文件、设计说明、体系结构关系图等。 文档可用于查找项目,但可能已过期。 如果你向 Copilot 命令行界面(CLI) 询问代码的行为,而它却从一个过时的 Markdown 文件中找到答案,你得到的将是一个听起来很有把握但实际上错误的答案。

在开始提问之前,请告知 Copilot 命令行界面(CLI) 其答案基于代码本身,并标记任何不确定性,而不是填补空白。 例如:

Copilot prompt
For the rest of this session, when I ask how something works, base your answer on the code in this repository, not on documentation files such as README.md or files under docs/. If a documentation file conflicts with the code, treat the code as the source of truth. If you can't find a definitive answer in the code, say so - don't guess.

可以将此类前导文件放在自定义说明文件中,并在会话之间重复使用,因此无需每次重新键入它。 请参阅“为 GitHub Copilot 命令行界面 (CLI) 添加自定义说明”。

3.大致了解代码库

从广泛的问题开始,以构建项目的精神地图。 目标是了解代码的形状(入口点在哪里、哪些目录包含哪些目录以及主要部分如何组合在一起),然后再钻取到特定功能。

请尝试以下提示:

Copilot prompt
Give me an overview of this codebase. What does the application do, what are the main components, and how do they communicate? Cite the files you used as evidence.
Copilot prompt
What are the entry points for this application? For each entry point, tell me which file contains the entry point and which directories contain the code it calls into.

要求提供引用和证据很重要。 当 Copilot 命令行界面(CLI) 告诉你“这是在 src/auth/middleware.ts 中处理的”时,你可以打开该文件并自行核实答案。 如果引用内容与你查到的信息不一致,这就是一个有用的信号,说明你应该提出质疑并进一步追问。

4.深入了解特定功能

在掌握整体概况后,将注意力集中到需要更改的区域。 将此视为对话,而不是单个查询。 每个答案都会显示可在下一个问题中使用的术语、文件名和概念。

最好提出类似问题,从不同角度处理主题。 这有助于确保你全面了解情况,并让你更确信 Copilot 没有误解你想了解的问题,也没有遗漏任何重要细节。

例如,假设你被要求向特定 API 终结点添加速率限制,并且以前从未处理过此部分代码,你可能从以下问题开始:

Copilot prompt
Is there any existing rate limiting in this codebase? If so, where is it implemented, and how is it configured?
Copilot prompt
If I wanted to add per-user rate limiting to the /api/v1/upload endpoint, which files would I most likely need to change, and which existing patterns in the codebase should I follow?

在同一 CLI 会话中提出后续问题,可以让你深入了解某项功能的细节,并为 Copilot 提供其给出具体答案所需的上下文,从而告诉你你需要了解的信息。

5. 调查行为和边缘案例

阅读代码会告诉你代码的作用。 它通常不告诉你代码应该做什么,或者它在异常情况下的行为方式。 这些问题最能体现人工主题专家的价值——而在没有人工专家可用时,Copilot 命令行界面(CLI) 可以为你提供帮助。

你可能提出的行为和边缘案例问题的一些示例:

Copilot prompt
What happens if the database connection drops while a request is being processed? Walk me through the error handling, based on the code.
Copilot prompt
The `getUser` function takes a `userId` parameter. What validation is performed on it before it reaches the database query? Are there any code paths where an unvalidated value could reach the query?

当你得到答案后,可以接着问“给我看看代码”或“你是在哪个文件里找到的?” 如果它尚未被引用, 这为你提供了一个检查并核实答案的地方。

6.使用 Git 历史记录作为另一个源

许多有用的上下文信息存在于 Git 历史记录中,而不是当前代码里:例如,某个函数为何要这样编写、某个缺陷上次是在什么时候修复的,以及最初是谁添加了某个模块。 Copilot 命令行界面(CLI) 可以为你运行 git 命令,并使用输出来回答你无法通过单独读取代码来轻松回答的问题。

请尝试以下提示:

Copilot prompt
When was the `PaymentProcessor` class introduced, and what was the original commit message? Has it been substantially refactored since then?
Copilot prompt
Look at the last 20 commits that touched files under `src/billing/`. Summarize what kinds of changes have been made recently.
Copilot prompt
Who has made the most commits to `src/auth/`? Use that information to suggest the best person on this team to ask about authentication.

7.在信任之前进行验证

          Copilot 命令行界面(CLI) 是一个强大的中小企业, 但它不是没有失败的。 它可能会误读代码,混淆外观相似的文件,或者偶尔编造内容。 对待它的回答,就像对待一位乐于助人但也可能出错的同事所给出的建议一样:可以作为起点,但在据此采取任何重要行动之前,值得先核实一下。

一些习惯会让你摆脱麻烦:

  • 检查引用的文件。 当 Copilot 命令行界面(CLI) 提到特定文件或行号时,请打开该文件并进行确认。 如果引文是错误的,请用更多的怀疑来对待其余答案。
  • 自己办事。 如果 Copilot 命令行界面(CLI) 告知函数 null 返回空输入,请编写快速测试或 REPL 调用,以使用空输入调用它并检查。
  • 与人工核对。 当答案至关重要时(例如涉及安全性、数据完整性,或任何在生产环境中出错会让你难堪的事情),请将 Copilot 命令行界面(CLI) 的回答作为起点,并请人工领域专家或通过代码审查进行确认。

结论

在本教程中,你已用作 Copilot 命令行界面(CLI) 个人 SME,用于:

  • 基于真实文件,快速了解陌生代码库。
  • 深入了解特定功能,以便了解要更改的文件以及要遵循哪些模式。
  • 调查行为、边缘案例和 Git 历史记录。
  • 验证答案,以便在答案重要时可以依赖它们。

这样使用时,Copilot 命令行界面(CLI) 并不会取代人工主题专家,但它会让你在处理工作中每天遇到的问题时,不必那么依赖他们。 你的人类队友可以将时间投入到那些确实需要他们经验的问题上,而当他们不在时,你也可以继续推进工作。

后续步骤