Skip to main content

关于 Copilot 编码代理

可以将 GitHub 问题分配给 Copilot,或者要求 Copilot 创建拉取请求。

谁可以使用此功能?

Copilot 编码智能体 可在未禁用该功能的存储库中,通过 GitHub Copilot Pro+、GitHub Copilot Business 和 GitHub Copilot Enterprise 计划使用。 Copilot 编码智能体 在 托管用户帐户 拥有的仓库中不可用。
Sign up for Copilot

注意

  • Copilot 编码智能体 为 公共预览版,可能会变动。 在预览期间,该功能的使用须遵循“GitHub 预发行许可条款”。

Copilot 编码智能体 概述

借助 Copilot 编码智能体,GitHub Copilot 可以在后台独立工作来完成任务,就像人类开发人员一样。

Copilot 可以:

  • 修复 Bug
  • 实现增量新功能
  • 改进测试覆盖率
  • 更新文档
  • 处理技术债务

若要将任务委托给 Copilot,你可以:

Copilot 将根据你提供的提示评估分配给它的任务 - 无论是来自问题描述还是聊天消息。 然后,Copilot 将进行所需的更改并打开拉取请求。 当 Copilot 完成时,它将要求你评审,而你可留下拉取请求注释来要求 Copilot 进行迭代。

在处理编码任务时,Copilot 可以访问它自己的临时开发环境,该环境由 GitHub Actions 提供支持,可在其中浏览代码、进行更改、执行自动测试和 Linter 等。

优于传统 AI 工作流的优势

有效使用时,Copilot 编码智能体 提供优于 IDE 中传统 AI 助手的生产力优势:

  • 借助 IDE 中的 AI 助手,可在本地进行编码。******** 单个开发人员使用 AI 助手在同步会话中进行协作。**** 在会话期间做出的决策未被跟踪,除非提交,否则会随着时间的推移而丢失。**** 虽然助手可帮助编写代码,但开发人员仍需要执行很多手动步骤:创建分支、编写提交消息、推送更改、打开拉取请求 (PR)、编写 PR 说明、获取评审、在 IDE 中迭代、重复流程。**** 对于简单或常规问题而言,这些步骤耗费的时间和精力可能难以证明其合理性。

  • 借助 Copilot 编码智能体,所有编码和迭代都在 GitHub 上作为拉取请求工作流的一部分执行。******** Copilot 自动执行分支创建、提交消息写入和推送、PR 打开和 PR 描述撰写。**** 开发人员让智能体在后台工作,然后使用 PR 评审来引导 Copilot 达成最终解决方案。**** 在 GitHub 上工作可添加透明度,其中每个步骤都以提交的形式发生,并且可在日志中查看。**** 在 GitHub 上工作还为整个团队提供了协作机会。****

Copilot 编码智能体 与代理模式

Copilot 编码智能体 不同于 Visual Studio 和 Visual Studio Code 中提供的“代理模式”功能。 Copilot 编码智能体 在 GitHub Actions 提供支持的环境中自主工作,以完成通过 GitHub 问题或 GitHub Copilot Chat 提示分配的开发任务,并创建包含结果的拉取请求。 与之不同, Visual Studio 和 Visual Studio Code 中的代理模式是 GitHub Copilot 编辑 功能的一部分,该功能使 Copilot 能够直接在本地开发环境中自主进行编辑。 有关代理模式的详细信息,请参阅 在 IDE 中向 GitHub Copilot 提问

使用 Copilot 编码智能体 简化软件开发

通过将任务分配给 Copilot,可以增强软件开发工作流。

例如,可以将 Copilot 分配给积压工作中的简单问题。 这样,你可以花更少时间处理这些工作,花更多时间处理更复杂或有趣的工作,或者需要高度创造性思维的工作。 Copilot 可以处理“锦上添花”的问题,这些问题可改进代码库或产品质量,但通过因你专注于更紧急的工作而仍搁置在积压工作中。

将 Copilot 作为额外的代码资源还能让你启动可能因缺乏资源而原本搁置的任务。 例如,可以将 Copilot 任务委托给重构代码或添加更多日志记录,然后立即将这些任务分配给 Copilot。

Copilot 可以启动一个任务,然后你选择该任务并继续自行工作。 通过将初始工作分配给 Copilot,你可以腾出原本花费在重复性任务上的时间,例如为新项目设置基架。

使 Copilot 编码智能体 可用

必须启用 Copilot,案后才能向其分配任务。 请参阅“关于启用 Copilot 编码智能体”。

Copilot 编码智能体 使用成本

Copilot 编码智能体 使用 GitHub Actions 分钟数和 Copilot 高级请求。

在 GitHub Actions 和高级请求的每月使用额度中,你可以要求 Copilot 处理编码任务,而不会产生任何额外费用。

有关详细信息,请参阅“GitHub Copilot 账单”。

内置安全保护

与任何其他 AI 智能体一样,在启用 Copilot 编码智能体 时,安全性是一个至关重要的考虑因素。 Copilot 拥有强大的内置安全保护机制,你可以通过遵循最佳做法指南来对这些保护进行补充。

  • 受现有治理约束:组织设置和企业策略控制了可用性。 为组织设置的任何安全策略和做法也适用于 Copilot 编码智能体。
  • 受限开发环境:Copilot 在沙盒开发环境中工作,内部访问受到防火墙控制。 对于分配给其工作的存储库,它具有只读访问权限。
  • 限制对分支的访问:Copilot 只能创建并推送到以 copilot/ 开头的分支。 它受任何分支保护约束,并且需要检查工作存储库。
  • 仅响应具有写入权限的用户:Copilot 不会响应访问级别较低的用户的反馈。
  • 被视为外部协作者:Copilot 提出的草稿拉取请求需要具有写入权限的用户批准才能运行 Actions 工作流。 Copilot 无法将其拉取请求标记为“可供审查”,并且无法批准或合并拉取请求。
  • 跟踪符合性:Copilot 的提交由分配问题或或请求更改拉取请求的开发人员共同创作,使得可确定提议更改的归属。 要求 Copilot 创建拉取请求的开发人员无法批准该拉取请求。 在需要批准评审的存储库中,这可确保至少一位独立的开发人员评审 Copilot 的工作。

有关详细信息,请参阅:

风险和缓解措施

Copilot 编码智能体 是一个自主智能体,有权访问代码并可将更改推送到存储库。 这会带来一些风险。 如果可能,GitHub 已应用适当的缓解措施。

风险:Copilot 可以将代码更改推送到你的存储库

为了缓解此风险,GitHub:

  • 限制谁可以将任务分配给 Copilot。 只有对存储库具有写权限的用户可以触发 Copilot 工作。 没有写权限的用户提供的注释永远不会提供给智能体。
  • 限制 Copilot 使用的访问令牌中的权限。 仅允许推送到以 copilot/ 开头的分支。 Copilot 无法推送到 mainmaster 分支。
  • 限制 Copilot 的凭据。 Copilot 只能执行简单的推送操作。 它无法直接运行 git push 或其他 Git 命令。
  • 限制 GitHub Actions 工作流运行。 在 Copilot 的代码经过评审,并且对存储库具有写权限的用户单击“Approve and run workflows”按钮之前,无法触发工作流。**** 请参阅“审查 Copilot 创建的拉取请求”。
  • 防止要求 Copilot 创建拉取请求的用户对该请求进行审批。 这将维持“需要批准”规则和分支保护中的预期控制措施。 请参阅“规则集的可用规则”。

风险:Copilot 有权访问敏感信息

Copilot 有权访问代码和其他敏感信息,这些信息可能会因意外或恶意用户输入而泄露。 为了缓解此风险,GitHub:

风险:提示注入漏洞

用户可以在分配给 Copilot 的问题或为 Copilot 提供的注释中包含隐藏消息,作为提示注入的一种形式。 为了缓解此风险,GitHub:

  • 筛选隐藏字符,然后将用户输入传递给 Copilot:例如,以问题中的 HTML 注释或拉取请求注释形式输入的文本不会传递至 Copilot。

Copilot 编码智能体 的限制

Copilot 编码智能体 在其软件开发工作流和与其他功能的兼容性方面存在一定限制。

Copilot 软件开发工作流中的限制

  • Copilot 只能在它创建其拉取请求的同一存储库中进行更改。 向 Copilot 分配问题时,它只能在问题所在的存储库中进行更改。 此外,Copilot 无法在一次运行中跨多个存储库进行更改。
  • Copilot 只能访问与所分配问题相同的存储库中的上下文。 默认情况下,与 Copilot MCP 服务器的集成允许 Copilot 一次访问一个存储库。 不过,你可以配置更广泛的访问权限。 请参阅“使用模型上下文协议 (MCP) 扩展 Copilot 编码助手”。
  • Copilot 一次只能打开一个拉取请求。 Copilot 将只打开一个拉取请求来处理分配给它的每个任务。
  • Copilot 无法处理它未创建的现有拉取请求。 如果你希望 Copilot 提供有关现有拉取请求的反馈,你可以将其添加为审阅者。 请参阅“使用 GitHub Copilot 代码评审”。

Copilot 在与其他功能的兼容性方面的限制

  • Copilot 不会对其提交进行签名。 如果启用了“要求签名提交”规则或分支保护,则必须重写提交历史记录,以便合并 Copilot 的拉取请求。 请参阅“规则集的可用规则”。
  • Copilot 不会与自托管的 GitHub Actions 运行器配合使用。 Copilot 有权访问自己的开发环境(该环境在 GitHub Actions 中运行),并且必须使用 GitHub 托管的运行器。 请参阅“自定义 Copilot 编码代理的开发环境”。
  • Copilot 编码智能体 无法在由 托管用户帐户 拥有的个人仓库中使用。 这是因为 Copilot 编码智能体 需要使用 GitHub 托管运行器,而这些运行器不适用于由 托管用户帐户 拥有的仓库。 请参阅“GitHub 托管的运行程序”。
  • Copilot 不考虑内容排除。 内容排除使管理员能够配置 Copilot 以忽略某些文件。 使用 Copilot 编码智能体 时,Copilot 不会忽略这些文件,而是将能够查看和更新这些文件。 请参阅“从 GitHub Copilot 中排除内容”。
  • Copilot 编码智能体 不会应用“Suggestions matching public code”策略****。 Copilot 可能仍会生成与公共代码匹配的建议,即使“Suggestions matching public code”策略设置为“Block”。 如果发生这种情况,Copilot 将不会提供指向该代码原始来源的代码引用。 请参阅“以单个订阅者身份管理 Copilot 策略”。
  • Copilot 编码智能体 在 具有数据驻留的 GitHub Enterprise Cloud 中不可用。 该代理仅在 GitHub.com 中可用。
  • Copilot 编码智能体 仅处理在 GitHub 上托管的存储库****。 如果存储库是使用其他代码托管平台存储的,则 Copilot 将无法处理它。

动手练习

尝试“使用 Copilot 编码智能体 扩展团队”技能练习,以获取使用 Copilot 编码智能体 的实践经验。

其他阅读材料