关于 GitHub Copilot CLI
GitHub Copilot CLI 在终端中提供类似聊天的界面,能够自主在你的计算机上创建和修改文件并执行命令。你可以让 Copilot 对活动目录中的文件执行任何操作。
GitHub Copilot CLI 可以根据你的描述和配置生成定制化的更改,涵盖修复 bug、实现增量新功能、原型设计、文档编写以及代码库维护等任务。
在完成任务的过程中,Copilot 代理能够访问本地终端环境,能够对代码进行修改、执行自动化测试、运行代码检查工具(linters),以及执行环境中可用的命令。
该代理已在多种编程语言上进行评估,英语是其主要支持语言。
该代理通过结合自然语言处理和机器学习来理解你的任务,并在代码库中进行相应更改以完成任务。该过程可以分为以下几个步骤。
输入处理
你的输入会与相关的上下文信息合并形成提示(prompt),该提示随后被发送到大型语言模型进行处理。输入可以是纯自然语言、代码片段或对终端中文件的引用。
语言模型分析
提示随后会被送入大型语言模型——一个在海量数据上训练的神经网络。语言模型分析提示,帮助代理推理任务并使用所需工具。
响应生成
语言模型基于对提示的分析生成响应。该响应可以是自然语言建议、代码建议、文件修改或命令执行。
输出格式化
代理生成的响应会被格式化后呈现给你。GitHub Copilot CLI 使用语法高亮、缩进和其他格式化特性来提升生成内容的可读性。
为了完成任务,代理可能还会在本地环境中执行命令,并创建、编辑或删除文件系统中的文件。
在交互式聊天窗口中,代理返回响应后,你可以向其提供反馈。代理会将该反馈重新提交给语言模型进行进一步分析。代理在依据反馈完成更改后,会返回额外的响应。
Copilot 旨在为你的任务提供最相关的解决方案。然而,它不一定总能给出你所期望的答案。你有责任审查并验证 Copilot 生成的响应,以确保其准确且合适。更多信息,请参见本文后面的章节 改进 GitHub Copilot CLI 的结果。
GitHub Copilot CLI 的使用场景
你可以在多种场景下将任务委派给 Copilot,包括但不限于
- 代码库维护: 处理安全相关的修复、依赖升级以及有针对性的重构。
- 文档: 更新和创建新文档。
- 功能开发: 实现增量的功能需求。
- 提升测试覆盖率: 开发额外的测试套件以进行质量管理。
- 新项目原型开发: 开辟全新概念的原型。
- 设置你的环境: 在终端中运行命令,搭建本地环境以便在现有项目上工作。
- 寻找执行任务的正确命令: Copilot 可以提供执行你想完成的任务的命令建议。
- 解释不熟悉的命令: Copilot 可以提供该命令功能和目的的自然语言描述。
改进 GitHub Copilot CLI 的结果
GitHub Copilot CLI 能支持广泛的任务。为了提升你收到的响应质量并缓解代理的一些局限性,你可以采用多种措施。
欲了解更多关于局限性的内容,请参见本文后面的章节 GitHub Copilot CLI 的局限性。
确保任务范围明确
GitHub Copilot CLI 在完成任务时会将你的提示作为关键上下文。提示越清晰、范围越明确,你得到的结果就越好。理想的提示应包括
- 对需要解决的问题或所需工作的清晰描述。
- 完整的验收标准,说明良好解决方案的样子(例如,是否需要单元测试?)。
- 需要修改哪些文件的提示或指示。
通过额外上下文自定义你的使用体验
GitHub Copilot CLI 在生成建议更改时会利用你的提示以及仓库代码作为上下文。为提升 Copilot 的表现,可考虑添加自定义指令,帮助代理更好地理解你的项目以及如何构建、测试和验证更改。更多信息请参见 为 GitHub Copilot CLI 添加自定义指令。
将 GitHub Copilot CLI 视为工具,而非替代品
虽然 GitHub Copilot CLI 可以成为生成代码和文档的强大工具,但务必把它当作辅助工具,而不是取代人类程序员的方案。你应始终审查并验证 GitHub Copilot CLI 生成的命令,确保它们满足你的需求且不包含错误或安全风险。
使用安全编码和代码审查实践
尽管 GitHub Copilot CLI 能生成语法上正确的代码,但并不一定安全。你应始终遵循安全编码最佳实践,例如避免硬编码密码或 SQL 注入漏洞,并执行代码审查流程,以弥补代理的局限性。对所有非自创的代码素材,都应采取相同的审慎措施,包括严格测试、知识产权扫描以及安全漏洞检查。
提供反馈
如果你在使用 GitHub Copilot CLI 时遇到任何问题或局限性,建议使用 /feedback 命令提供反馈。
GitHub Copilot CLI 的安全措施
限制 Copilot 的权限
默认情况下,Copilot CLI
- 仅能访问触发 GitHub Copilot CLI 的目录及其子目录中的文件和文件夹。请确保你信任该目录中的文件。如果 Copilot 需要访问当前目录之外的文件,它会请求权限。只有在信任该目录内容时才授予权限。
- 在修改文件前会请求权限。授予权限前请确认它正在修改正确的文件。
- 在执行可能具有危险性的命令前会请求权限。请在授予运行权限前仔细审查这些命令。
你可以通过不同的命令行选项授予 Copilot CLI 特定权限或全部权限,例如 --allow-tool=[TOOLS...]、--allow-all-tools、--allow-all(或在交互会话中使用等价的斜杠命令 /allow-all)。更多信息请参见 GitHub Copilot CLI 命令参考。通常在自动驾驶模式下使用 Copilot CLI 时,你会授予其全部权限,以便其自主完成任务,而无需在执行过程中逐项批准。更多信息请参见 允许 GitHub Copilot CLI 自动工作。
有关使用 GitHub Copilot CLI 时的安全实践的更多信息,请参阅 关于 GitHub Copilot CLI 中的“安全注意事项”。
使用自有模型提供商时的数据处理
当你配置 Copilot CLI 使用自有模型提供商时,你的提示、代码上下文以及生成的响应会直接发送给你配置的提供商,而不会经过 GitHub。你有责任审查并遵守所选提供商的服务条款和数据处理政策。
遥测
如果在未启用离线模式的情况下使用自有模型提供商,Copilot CLI 仍会像往常一样向 GitHub 发送遥测。该遥测不包含你的提示或代码,但会包含使用元数据。
如果通过将环境变量 COPILOT_OFFLINE 设置为 true 来启用离线模式,所有遥测将被禁用。在离线模式下,Copilot CLI 只会向你配置的模型提供商发起网络请求。
身份验证和功能可用性
使用自有模型提供商(BYOK)时不需要 GitHub 身份验证。未进行 GitHub 身份验证时,以下功能不可用:
/delegate,将会话转交给 GitHub 的服务器端 Copilot- GitHub MCP 服务器
- GitHub 代码搜索
在离线模式下,诸如 web_fetch 和 GitHub 代码搜索等基于网页的工具同样被禁用。
不回退到 GitHub 托管的模型
如果你的模型提供商配置无效,Copilot CLI 将以错误退出,不会回退到 GitHub 托管的模型。常见的失败(如连接被拒绝、身份验证错误、模型未找到或超时)会产生友好的提示信息并提供可操作的指导。
GitHub Copilot CLI 的局限性
根据代码库规模、输入数据等因素,使用 GitHub Copilot CLI 时可能会出现不同的性能表现。以下信息旨在帮助你了解系统局限性以及与 GitHub Copilot CLI 相关的性能关键概念。
范围有限
GitHub Copilot CLI 使用的语言模型已在大量代码上进行训练,但仍然具有有限的覆盖范围,可能无法处理某些代码结构或冷门编程语言。对于每种语言,你收到的建议质量可能取决于该语言的训练数据量和多样性。
潜在偏见
GitHub Copilot CLI 所使用的大语言模型的训练数据以及模型收集的上下文可能包含偏见和错误,工具可能会放大这些问题。此外,Copilot CLI 可能偏向某些编程语言或编码风格,从而导致次优或不完整的建议。
安全风险
GitHub Copilot CLI 基于仓库中 issue 或评论的上下文生成代码和自然语言,如果使用不当,可能会泄露敏感信息或引入漏洞。合并前务必仔细审查所有由 Copilot CLI 生成的输出。
代码不准确
Copilot CLI 可能生成看似有效的代码,但实际上在语义或语法上可能不正确,或未能准确体现开发者的意图。
为降低不准确代码的风险,你应在关键或敏感的应用场景下仔细审查并测试生成的代码,并确保其遵循最佳实践、设计模式,且与整体架构和代码库风格保持一致。
公开代码
即使“阻止匹配公开代码的建议”策略已设为“阻止”,GitHub Copilot CLI 仍可能生成与公开代码匹配或近似匹配的代码。详见 个人订阅者的 GitHub Copilot 策略管理。
法律与监管考虑
用户在使用任何 AI 服务和解决方案时,需要评估可能的特定法律和监管义务,这些服务可能并不适用于所有行业或场景。此外,AI 服务或解决方案并非设计用于且不得以适用服务条款和相关行为准则禁止的方式使用。
命令执行中的风险管理与用户责任
在让 GitHub Copilot CLI 执行命令时,需要格外小心,尤其是某些建议的命令可能具有破坏性。你可能会遇到文件删除或硬盘格式化等命令,若使用不当会导致严重问题。虽然在特定情境下这些命令可能是必要的,但接受并运行这些命令时必须谨慎。
此外,最终对 GitHub Copilot CLI 执行的命令负责的是你本人。是否使用 Copilot 生成的命令完全取决于你的决定。即便存在保护机制和安全防护,你仍需认识到执行命令本身存在固有风险。GitHub Copilot CLI 提供了强大的工具集,但在采纳其建议时应保持警惕,确保命令符合你的意图和需求。