{"meta":{"title":"使用 Copilot CLI 作为 AI SME","intro":"将 Copilot CLI 作为随时可用的主题专家，帮助你了解代码库的工作方式，从而让你能够满怀信心地维护它或添加新功能。","product":"GitHub Copilot","breadcrumbs":[{"href":"/zh/copilot","title":"GitHub Copilot"},{"href":"/zh/copilot/tutorials","title":"教程"},{"href":"/zh/copilot/tutorials/use-an-ai-sme","title":"使用 AI SME"}],"documentType":"article"},"body":"# 使用 Copilot CLI 作为 AI SME\n\n将 Copilot CLI 作为随时可用的主题专家，帮助你了解代码库的工作方式，从而让你能够满怀信心地维护它或添加新功能。\n\n## Introduction\n\n当你开始处理不熟悉的代码库时，或者你被要求更改以前从未接触过的大型代码库的一部分时，通常需要一位主题专家（SME）来加快速度。 SME 通常是团队中经验更丰富的开发人员，他们知道代码如何组合在一起，并可以回答你的问题。 中小企业并不总是可用的，它们可能处于另一个时区，忙于自己的工作，或者根本不在团队中。\n\n需要了解不熟悉的代码库时，通常依赖于知道代码的团队成员。 当该人不可用时， Copilot CLI 可以填补空白。 在本教程中，你将询问 Copilot CLI 有关存储库代码的问题，学习生成基于代码的答案的提示技术，并建立开始进行更改的信心。\n\n## 何时使用 AI SME\n\n在需要更快地了解代码库时，本教程非常有用。 例如：\n\n* 你刚刚加入了一个团队或一个开放源代码项目，需要快速加快速度。\n* 你需要修改一个自己以前从未接触过的大型代码库中的某个部分。\n* 你继承了原始作者不再维护的服务或库。\n\n本教程假定你熟悉终端，并阅读所浏览项目使用的语言的代码。 你不需要具备任何使用 Copilot CLI 的经验。\n\n## 先决条件\n\n在开始之前，请确保已做好以下准备：\n\n* GitHub Copilot 订阅。 请参阅“[GitHub Copilot计划](/zh/copilot/get-started/plans)”。\n* Copilot CLI 已安装并经过身份验证。 请参阅“[开始使用 GitHub Copilot CLI](/zh/copilot/how-tos/copilot-cli/cli-getting-started)”。\n* 要浏览的存储库的本地克隆。 请参阅“[克隆仓库](/zh/repositories/creating-and-managing-repositories/cloning-a-repository?tool=webui)”。\n\n## 1.在存储库中启动会话\n\n打开终端并切换到你想了解的代码库根目录。\nCopilot CLI从存储库根目录开始，意味着它具有作为上下文可用的整个代码库。\n\n```shell copy\ncd PATH/TO/YOUR/REPOSITORY\ncopilot\n```\n\n你现在正在交互式 Copilot CLI 会话中。 你在提示符中键入的任何内容都会被发送给模型；该模型可以读取存储库中的文件、运行 shell 命令（例如 `git log` 或 `grep`），并根据其找到的内容回答你的问题。\n\n> \\[!TIP]\n>\n> * 如果你信任 Copilot CLI 在无需请求批准的情况下运行命令，同时阻止其修改文件，请从 `copilot --deny-tool='write' --allow-all-tools` 开始。 请参阅“[允许和拒绝工具使用](/zh/copilot/how-tos/copilot-cli/use-copilot-cli/allowing-tools)”。\n> * 如果你正在处理一个非常大的代码库，从相关子目录启动 Copilot CLI 可能会获得更好的结果。 这会将上下文限制为最相关的文件。\n\n## 2. 答案应以代码为依据，而不是文档\n\n大多数存储库都包含代码和文档的混合体：自述文件、设计说明、体系结构关系图等。 文档可用于查找项目，但可能已过期。 如果你向 Copilot CLI 询问代码的行为，而它却从一个过时的 Markdown 文件中找到答案，你得到的将是一个听起来很有把握但实际上错误的答案。\n\n在开始提问之前，请告知 Copilot CLI 其答案基于代码本身，并标记任何不确定性，而不是填补空白。 例如：\n\n```copilot copy\nFor 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.\n```\n\n可以将此类前导文件放在自定义说明文件中，并在会话之间重复使用，因此无需每次重新键入它。 请参阅“[为 GitHub Copilot CLI 添加自定义说明](/zh/copilot/how-tos/copilot-cli/customize-copilot/add-custom-instructions)”。\n\n## 3.大致了解代码库\n\n从广泛的问题开始，以构建项目的精神地图。 目标是了解代码的形状（入口点在哪里、哪些目录包含哪些目录以及主要部分如何组合在一起），然后再钻取到特定功能。\n\n请尝试以下提示：\n\n```copilot copy\nGive 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.\n```\n\n```copilot copy\nWhat 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.\n```\n\n要求提供引用和证据很重要。 当 Copilot CLI 告诉你“这是在 `src/auth/middleware.ts` 中处理的”时，你可以打开该文件并自行核实答案。 如果引用内容与你查到的信息不一致，这就是一个有用的信号，说明你应该提出质疑并进一步追问。\n\n## 4.深入了解特定功能\n\n在掌握整体概况后，将注意力集中到需要更改的区域。 将此视为对话，而不是单个查询。 每个答案都会显示可在下一个问题中使用的术语、文件名和概念。\n\n最好提出类似问题，从不同角度处理主题。 这有助于确保你全面了解情况，并让你更确信 Copilot 没有误解你想了解的问题，也没有遗漏任何重要细节。\n\n例如，假设你被要求向特定 API 终结点添加速率限制，并且以前从未处理过此部分代码，你可能从以下问题开始：\n\n```copilot copy\nIs there any existing rate limiting in this codebase? If so, where is it implemented, and how is it configured?\n```\n\n```copilot copy\nIf 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?\n```\n\n在同一 CLI 会话中提出后续问题，可以让你深入了解某项功能的细节，并为 Copilot 提供其给出具体答案所需的上下文，从而告诉你你需要了解的信息。\n\n## 5. 调查行为和边缘案例\n\n阅读代码会告诉你代码的作用。 它通常不告诉你代码应该做什么，或者它在异常情况下的行为方式。 这些问题最能体现人工 SME 的价值，在此类问题中，在没有人工可用时 Copilot CLI 可以提供帮助。\n\n你可能提出的行为和边缘案例问题的一些示例：\n\n```copilot copy\nWhat happens if the database connection drops while a request is being processed? Walk me through the error handling, based on the code.\n```\n\n```copilot copy\nThe `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?\n```\n\n当得到答案后，可以接着要求“给我看看代码”或“是在哪个文件里找到这些内容的？” 如果它尚未被引用， 这为你提供了一个检查并核实答案的地方。\n\n## 6.使用 Git 历史记录作为另一个源\n\n许多有用的上下文信息存在于 Git 历史记录中，而不是当前代码里：例如，某个函数为何要这样编写、某个缺陷上次是在什么时候修复的，以及最初是谁添加了某个模块。\nCopilot CLI 可以为你运行 `git` 命令，并使用输出来回答你无法通过单独读取代码来轻松回答的问题。\n\n请尝试以下提示：\n\n```copilot copy\nWhen was the `PaymentProcessor` class introduced, and what was the original commit message? Has it been substantially refactored since then?\n```\n\n```copilot copy\nLook at the last 20 commits that touched files under `src/billing/`. Summarize what kinds of changes have been made recently.\n```\n\n```copilot copy\nWho has made the most commits to `src/auth/`? Use that information to suggest the best person on this team to ask about authentication.\n```\n\n## 7.在信任之前进行验证\n\nCopilot CLI 是一个功能强大的 SME，但并非绝对准确。 它可能会误读代码，混淆外观相似的文件，或者偶尔编造内容。 对待它的回答，就像对待一位乐于助人但也可能出错的同事所给出的建议一样：可以作为起点，但在据此采取任何重要行动之前，值得先核实一下。\n\n一些习惯会让你摆脱麻烦：\n\n* **检查引用的文件。** 当 Copilot CLI 提到特定文件或行号时，请打开该文件并进行确认。 如果引文是错误的，请用更多的怀疑来对待其余答案。\n* **自行操作。** 如果 Copilot CLI 告知函数 `null` 返回空输入，请编写快速测试或 REPL 调用，以使用空输入调用它并检查。\n* **与人工核对。** 当答案至关重要时（安全性、数据完整性，或任何在生产环境中出错会令人难堪的内容），请将 Copilot CLI 的答案作为起点，并使用人工 SME 或代码审查进行确认。\n\n## 结论\n\n在本教程中，使用 Copilot CLI 作为个人 SME 用于：\n\n* 基于真实文件，快速了解陌生代码库。\n* 深入了解特定功能，以便了解要更改的文件以及要遵循哪些模式。\n* 调查行为、边缘案例和 Git 历史记录。\n* 验证答案，以便在答案重要时可以依赖它们。\n\n这样使用时，Copilot CLI 并不会取代人工 SME，但会在处理工作中每天遇到的问题时，不必那么依赖他们。 你的人类队友可以将时间投入到那些确实需要他们经验的问题上，而当他们不在时，你也可以继续推进工作。\n\n## 后续步骤\n\n* 将最有用的提示前导保存为自定义说明，以便可以在会话和项目中重复使用它们。 请参阅“[为 GitHub Copilot CLI 添加自定义说明](/zh/copilot/how-tos/copilot-cli/customize-copilot/add-custom-instructions)”。\n* 了解要更改的代码区域后，使用 Copilot CLI 以帮助进行更改。 请参阅 [使用 GitHub Copilot 重构代码](/zh/copilot/tutorials/refactor-code) 和 [使用 GitHub Copilot 编写测试](/zh/copilot/tutorials/write-tests)。\n* 了解如何控制哪些工具 Copilot CLI 可以在会话期间运行。 请参阅“[允许和拒绝工具使用](/zh/copilot/how-tos/copilot-cli/use-copilot-cli/allowing-tools)”。"}