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