在 GitHub.com 上负责任地使用 GitHub Copilot 编码代理

已完成

通过了解 Copilot 编码助手的用途、功能和限制,负责任地在 GitHub.com 上使用它。

在本单元结束时,你将能够:

  • 了解 Copilot 编码助手在 GitHub.com 的用途、功能和限制。
  • 应用负责任的使用做法:确定任务范围、保护环境和验证结果。
  • 识别安全措施、风险和缓解措施,以及提高性能的位置。

关于 GitHub.com 上的 Copilot 编码助手

Copilot 编码代理是集成到 GitHub 中的自治和异步软件开发代理。 代理可以从问题或 Copilot Chat 中选取任务,创建拉取请求,然后根据评论迭代改进该拉取请求。

Copilot 编码代理可以根据说明和配置生成定制的更改,包括 bug 修复、实现增量新功能、原型制作、文档和代码库维护等任务。 创建初始拉取请求后,代理可以根据你的反馈和评论与你一起不断迭代。

在处理任务时,代理可以访问它自己的临时开发环境,并可以在其中更改代码、执行自动测试并运行 linter。 该代理已在各种编程语言中进行了评估,主要支持的语言为英语。

代理的工作原理(端到端)

  • 快速处理

    通过问题、拉取请求评论或 Copilot 聊天消息,向 Copilot 提供任务,并与其他相关上下文信息相结合,形成提示。 输入可以采用纯自然语言、代码片段或图像的形式。

  • 语言模型分析

    然后,提示通过大型语言模型传递,该模型分析输入以帮助代理对任务进行推理并利用必要的工具。

  • 响应生成

    语言模型根据对提示的分析生成响应。 此响应可以采用自然语言建议和代码建议的形式。

  • 输出格式

    代理完成第一次运行后,将使用所做的更改更新拉取请求说明。 代理可能会包含无法访问的资源的补充信息,并且就解决问题步骤提出建议。

    可以通过在拉取请求中评论或显式提及代理人(@copilot)来向代理人提供反馈。 然后,代理将该反馈重新提交到语言模型,以进一步分析。 代理根据反馈完成更改后,将用更新后的更改回复您的评论。

Copilot 旨在为你提供最相关的解决方案来完成任务。 但是,它可能并不总是能提供你要查找的答案。 你负责查看和验证 Copilot 生成的响应,以确保它们准确且合适。 此外,作为我们产品开发过程的一部分,GitHub 会进行红色团队(测试)来了解和改进代理的安全性。

Copilot 编码代理的用例

  • 基本代码维护: 安全修补程序、依赖项升级和目标重构。
  • 文档:更新和创建新文档
  • 功能开发:实现增量功能请求
  • 改进测试覆盖率:开发用于质量管理的其他测试套件
  • 原型制作新项目:绿色领域新概念

提高 Copilot 编码代理的性能

若要增强性能和解决限制,请使用以下度量值:

"通过提供以下内容,确保任务范围良好:"

  • 明确说明要解决的问题或所需的工作。
  • 关于何为好的解决方案的完整验收标准(例如,是否应该有单元测试?)。
  • 有关哪些文件需要更改的提示或建议。

通过额外的上下文自定义您的体验

在生成建议的更改时,Copilot 编码代理利用提示、注释和存储库的代码作为上下文。 通过添加 自定义 Copilot 说明 来改进结果,以便代理了解如何生成、测试和验证其更改。

其他有用的自定义选项:

  • 自定义 GitHub Copilot 编码代理的开发环境
  • 自定义或禁用 GitHub Copilot 编码代理的防火墙
  • 使用模型上下文协议 (MCP) 扩展 GitHub Copilot 编码助手

使用 Copilot 编码代理作为工具,而不是替换

始终查看并测试代理生成的内容,以确保它满足你的要求,并在合并之前没有错误或安全问题。

使用安全编码和代码评审做法

尽管 Copilot 编码代理可以生成语法正确的代码,但它可能并不总是安全的。 继续遵循安全编码的最佳做法(避免硬编码机密、防止注入漏洞),并应用严格的测试、IP 扫描和漏洞检查。

提供反馈

如果遇到任何问题或限制,请使用代理响应下方的拇指图标或在社区讨论论坛中共享反馈。

保持最新状态

Copilot 编码代理正在不断发展。 在出现时监视新的安全风险和最佳做法。

Copilot 编码代理的安全措施

避免特权提升

  • Copilot 编码代理将仅响应具有 写入 访问权限的用户的交互。
  • 由代理 PR 触发的工作流在运行之前需要获得拥有写入访问权限的用户批准。
  • 隐藏字符(未在 GitHub.com 上呈现)经过筛选,以减少提示注入风险。

约束 Copilot 的权限

  • 代理仅访问在其中创建 PR 的存储库;它无法访问其他存储库。
  • 推送仅限于名称以 copilot/ 为前缀的分支(而不是默认分支)。
  • 代理在运行时没有权限访问组织/库的 Actions 机密信息或变量。 只有那些添加到 Copilot 环境中的机密/变量会被传递给代理。

防止数据外泄

默认情况下启用防火墙,以防止意外或恶意外泄代码或敏感数据。 请参阅自定义或禁用 GitHub Copilot 编码代理的防火墙。

Copilot 编码代理的限制

根据代码库和输入,性能可能会有所不同。 请记住以下约束:

  • 有限范围和质量: LLM 可能无法处理某些代码结构或模糊语言;质量因语言覆盖率而异。
  • 潜在偏见: 训练数据和检索的上下文可能包括偏见;代理可能倾向于某些语言或样式。
  • 安全风险: 生成的代码基于存储库上下文,如果未查看,可能会公开敏感信息;需要彻底评审。
  • 不准确的代码: 代码可能显示正确,但语义上/语法错误或与意向不对齐。 验证适配、模式和样式。
  • 公共代码: 即使设置了“阻止”,代理也可能生成与公共代码的匹配项/接近匹配项;可能不会提供引用。
  • 法律/法规: 确保遵守适用的义务;避免在服务条款和行为准则下禁止使用。