关于 GitHub.com 上的 Copilot 云代理(前称 Copilot 编码代理)
Copilot 云代理是一种自主且异步的软件开发代理,集成在 GitHub 中。该代理可以从 issue 或 Copilot Chat 中获取任务,研究仓库,制定实现计划,并在分支上进行代码更改。您可以审查差异、与代理迭代,并在准备就绪时创建拉取请求。
Copilot 云代理可根据您的描述和配置生成定制化更改,包括研究代码库、规划实现方案、修复缺陷、实现增量新功能、原型制作、文档编写以及代码库维护等任务。代理会根据您的反馈进行迭代,无论是会话期间的后续提示还是在拉取请求中的评论。
在执行任务时,代理拥有自己的临时开发环境,可对您的代码进行更改、执行自动化测试并运行代码校验工具(linters)。
该代理已在多种编程语言上进行评估,主要支持语言为英语。
代理通过自然语言处理和机器学习的结合来理解您的任务,并在代码库中进行相应更改以完成任务。此过程可分为若干步骤。
注意
在 GitHub.com 上,仅通过 Copilot 云代理才能在创建拉取请求之前进行深入研究、计划和代码更改的迭代。云代理的集成(如 Azure Boards、JIRA、Linear、Slack 或 Teams)仅支持直接创建拉取请求。
提示处理
通过 issue、拉取请求评论或 Copilot Chat 消息向 Copilot 提供的任务会与其他相关的上下文信息合并,形成提示。该提示随后被发送至大型语言模型进行处理。输入可以是纯自然语言、代码片段或图像。
语言模型分析
提示随后会经过大型语言模型——一种已在海量数据上训练的神经网络。语言模型分析提示,以帮助代理在任务上进行推理并利用所需工具。
响应生成
语言模型基于对提示的分析生成响应。该响应可以是自然语言建议,也可以是代码建议。
输出格式化
代理完成首次运行后,会提供所做更改的摘要。如果已创建拉取请求,代理会更新拉取请求的描述。代理可能会包含它未能访问的资源的补充信息,并提供解决步骤的建议。
您可以通过在会话期间发送后续提示、在拉取请求中发表评论,或在拉取请求中明确提及代理(@copilot)来向代理提供反馈。随后,代理会将这些反馈重新提交给语言模型进行进一步分析。完成基于反馈的更改后,代理会返回更新后的更改。
Copilot 旨在为您提供最相关的任务解决方案,但它并不总能给出您期望的答案。您有责任审查并验证 Copilot 生成的响应,确保其准确且适用。
此外,作为产品开发流程的一部分,GitHub 会进行红队测试,以了解并提升代理的安全性。
有关如何提升性能的信息,请参见下文的提升 Copilot 云代理的性能。
Copilot 云代理的使用场景
您可以在多种场景下将任务委托给 Copilot,包括但不限于
- 深入研究:了解代码库的工作原理、确定需要更改的位置或验证假设。
- 规划:在进行更改前创建实现计划。
- 代码库维护:处理安全相关的修复、依赖升级以及有针对性的重构。
- 文档编写:更新和创建新文档。
- 功能开发:实现增量功能请求。
- 提升测试覆盖率:开发额外的测试套件以进行质量管理。
- 新项目原型制作:探索全新概念。
提升 Copilot 云代理的性能
Copilot 云代理可以支持广泛的任务。为提升性能并解决代理的一些局限性,您可以采纳多种措施。
有关局限性的更多信息,请参见Copilot 云代理的局限性(如下)。
确保任务范围明确
Copilot 云代理在处理任务时会将您的提示视为关键上下文。提示越清晰、范围越明确,得到的结果就越好。理想的任务应包括:
- 对需要解决的问题或所需工作的清晰描述。
- 完整的验收标准,说明良好解决方案的样子(例如,是否需要单元测试?)。
- 提示或指示哪些文件需要被修改。
使用附加上下文自定义使用体验
Copilot 云代理在生成建议更改时,会利用您的提示、评论以及仓库代码作为上下文。代理还可使用语义代码搜索,根据含义而非精确文本匹配来寻找相关代码,从而更快完成任务。
为提升 Copilot 的性能,建议实现自定义 Copilot 指令,以帮助代理更好地理解您的项目以及如何构建、测试和验证其更改。有关详细信息,请参见向仓库添加自定义指令中的“为 GitHub Copilot 添加自定义指令以获得最佳结果”。
有关 Copilot 云代理的其他自定义信息,请参见
将 Copilot 云代理视为工具,而非替代品
虽然 Copilot 云代理在生成代码和文档方面功能强大,但应将其视为辅助工具,而非取代人工编程。合并前,请务必审查并测试代理生成的内容,确保满足需求且不存在错误或安全隐患。
使用安全编码和代码审查实践
尽管 Copilot 云代理可以生成语法上正确的代码,但并不总是安全的。您应始终遵循安全编码的最佳实践,如避免硬编码密码或 SQL 注入漏洞,并遵循代码审查的最佳流程,以弥补代理的局限性。对所有非自行编写的代码(包括使用他人材料的代码),都应采取同等的防护措施,如严格测试、知识产权扫描以及安全漏洞检查。
提供反馈
如果在 GitHub.com 上使用 Copilot 云代理时遇到任何问题或局限性,建议通过点击每个代理响应下方的“踩”图标提供反馈。这有助于开发者改进工具并解决相关问题或限制。您也可以在社区讨论论坛中提供反馈。
保持更新
Copilot 云代理是一项新技术,可能随时间演进。请保持关注,及时了解可能出现的新安全风险和最佳实践。
Copilot 云代理的安全措施
从设计上,Copilot 云代理已内置多项缓解措施,以帮助确保您的数据和代码库安全。尽管已有这些缓解措施,仍需在了解代理局限性及其对代码可能产生的影响的前提下,继续执行安全最佳实践。
防止特权提升
Copilot 云代理仅会响应具有仓库写入权限的用户发起的交互(例如指派代理或发表评论)。
由 Copilot 云代理发起的拉取请求触发的 GitHub Actions 工作流,需要具有仓库写入权限的用户批准后才能运行。
代理会过滤在 GitHub.com 上不可见的隐藏字符,这些字符可能被用于在评论或 issue 正文中隐藏恶意指令,从而防止越狱等风险。
限制 Copilot 权限
Copilot 只能访问其正在工作的仓库,无法访问其他仓库。
其权限受到限制,仅能推送代码并读取其他资源。内置保护机制保证 Copilot 只能推送到单一分支:通过 @copilot 触发时的现有拉取请求分支,或新建的 copilot/ 分支。这意味着 Copilot 不能直接推送到默认分支(例如 main)。
Copilot 云代理在运行时无法访问组织或仓库的 Actions 机密或变量。只有专门添加到 copilot 环境的机密和变量才会传递给代理。
确保可追溯性
Copilot 云代理的提交作者标记为 Copilot,启动任务的人员被标记为共同作者。这有助于快速识别由代理生成的代码以及任务的发起人。
Copilot 云代理的提交已签名,在 GitHub 上显示为“已验证”。这可以确保提交确实由 Copilot 云代理完成且未被篡改。
每条提交信息都包含指向代理会话日志的链接。这为任何由代理生成的提交提供了永久性链接,便于在代码审查时了解更改原因,或在后期审计时追溯。
防止数据外泄
默认情况下,Copilot 云代理启用了防火墙,以防止代码或其他敏感数据因意外或恶意输入而外泄。
更多信息请参见自定义或禁用 GitHub Copilot 云代理防火墙。
防止生成代码中的安全漏洞
在代码生成过程中,Copilot 云代理会自动分析新生成的代码是否存在安全漏洞并尝试修复,以防止已发现的问题被引入。分析使用以下工具和流程完成:
- CodeQL:将运行以识别潜在的漏洞和错误。
- Secret scanning:将扫描已知类型的机密,确保响应中不引入机密信息。
- Dependency analysis:新代码引用的依赖项将根据 GitHub Advisory Database 检查已知漏洞。
Copilot 云代理的局限性
根据代码库规模、输入数据等因素,您在使用 Copilot 云代理时可能会体验到不同的性能水平。以下信息旨在帮助您了解系统局限性以及与 Copilot 云代理相关的关键性能概念。
范围有限
Copilot 云代理使用的语言模型已在海量代码上进行训练,但其覆盖范围仍有限,可能无法处理某些代码结构或较冷门的编程语言。每种语言的建议质量取决于该语言的训练数据量和多样性。
潜在偏见
Copilot 云代理的语言模型训练数据以及大型语言模型收集的上下文可能包含偏见和错误,这些可能会在工具使用中被放大。此外,Copilot 云代理可能对特定编程语言或编码风格存在偏好,从而导致建议不够理想或不完整。
安全风险
Copilot 云代理根据仓库中的 issue 或评论上下文生成代码和自然语言,如果使用不当,可能会泄露敏感信息或引入漏洞。合并前,请务必彻底审查代理生成的所有输出。
代码不准确
Copilot 云代理可能生成看似有效的代码,但在语义或语法上可能不正确,或未能准确体现开发者的意图。
为降低不准确代码的风险,您应仔细审查并测试生成的代码,尤其是在处理关键或敏感应用时。还需确保生成的代码遵循最佳实践和设计模式,并符合整体架构和代码库风格。
公开代码
Copilot 云代理可能生成与公开代码相匹配或高度相似的代码,即使“匹配公共代码的建议”策略已设置为“阻止”。参见个人订阅者的 GitHub Copilot 策略管理。
如果发生上述情况,Copilot 会在代理会话日志中显示匹配项,并提供链接以查看匹配代码的详细信息。更多信息请参见跟踪 GitHub Copilot 会话。
法律与监管考虑
用户在使用任何 AI 服务和解决方案时,需要评估可能的特定法律和监管义务,这些服务可能并不适用于所有行业或场景。此外,AI 服务或解决方案并非设计用于且不得以适用服务条款和相关行为准则禁止的方式使用。
Copilot 云代理的外部集成
Copilot 云代理可以从 Microsoft Teams、Linear、Slack、Jira 等外部应用获取信息和上下文。当您在这些平台上提及外部应用或通过已连接的工作流将任务指派给云代理时,它能够访问相关上下文,例如在被提及的线程中的对话历史或 issue 的细节和活动时间线。这使得云代理能够更好地理解您的开发需求并提供更匹配的帮助。这些集成使团队能够在现有工作流中直接协作编码、指派任务并跟踪进度,无需切换工具。请确保团队了解共享了哪些信息,并根据组织的隐私和数据处理政策配置集成。
有关 Copilot 云代理的外部集成的更多信息,请参见