在云中负责任地使用Copilot
了解如何通过了解其用途、功能和限制,在云中负责任地使用Copilot。
在本单元结束时,你将能够:
- 了解云中Copilot的目的、功能和限制。
- 应用负责任的使用做法:确定任务范围、保护环境和验证结果。
- 识别安全措施、风险和缓解措施,以及提高性能的位置。
关于云中的Copilot
在云中运行Copilot时,它会在GitHub中充当自治和异步软件开发代理。 代理可以从问题或 GitHub 中的 Copilot 获取任务、创建分支、浏览代码库、生成实现计划和起草代码,由你决定是否以及何时创建拉取请求。
Copilot可以根据说明和配置生成定制更改,包括 bug 修复、实现增量新功能、原型制作、文档和代码库维护等任务。 如果你决定创建拉取请求,智能体可以根据你的反馈和评论与你迭代。
在处理任务时,代理可以访问它自己的临时开发环境,并可以在其中更改代码、执行自动测试并运行 linter。 该代理已在各种编程语言中进行了评估,主要支持的语言为英语。
代理的工作原理(端到端)
快速处理
通过问题、拉取请求评论或 GitHub 中发给 Copilot 的消息提供给 Copilot 的任务与其他相关的上下文信息相结合,形成提示。 输入可以采用纯自然语言、代码片段或图像的形式。
语言模型分析
然后,提示通过大型语言模型传递,该模型分析输入以帮助代理对任务进行推理并利用必要的工具。
响应生成
语言模型根据对提示的分析生成响应。 此响应可以采用自然语言建议和代码建议的形式。
输出格式
代理完成第一次运行后,将使用所做的更改更新拉取请求说明。 代理可能会包含无法访问的资源的补充信息,并且就解决问题步骤提出建议。
可以通过在拉取请求中评论或显式提及代理人(@copilot)来向代理人提供反馈。 然后,代理将该反馈重新提交到语言模型,以进一步分析。 代理根据反馈完成更改后,将用更新后的更改回复您的评论。
Copilot 旨在为你提供最相关的解决方案来完成任务。 但是,它可能并不总是能提供你要查找的答案。 你负责查看和验证 Copilot 生成的响应,以确保它们准确且合适。 此外,作为我们产品开发过程的一部分,GitHub 会进行红色团队(测试)来了解和改进代理的安全性。
云中Copilot用例
- 基本代码维护: 安全修补程序、依赖项升级和目标重构。
- 文档:更新和创建新文档。
- 功能开发:实现增量功能请求。
- 改进测试覆盖率:开发用于质量管理的其他测试套件。
- 原型制作新项目:绿色领域新概念。
提高云中Copilot的性能
若要增强性能和解决限制,请使用以下度量值:
"通过提供以下内容,确保任务范围良好:"
- 明确说明要解决的问题或所需的工作。
- 关于何为好的解决方案的完整验收标准(例如,是否应该有单元测试?)。
- 有关哪些文件需要更改的提示或建议。
通过额外的上下文自定义您的体验
Copilot在生成建议的更改时,会使用你的提示、注释和存储库的代码作为上下文。 通过添加 自定义 Copilot 说明 来改进结果,以便代理了解如何生成、测试和验证其更改。
其他有用的自定义选项:
使用 Copilot 作为工具,而不是替代品
始终查看并测试代理生成的内容,以确保它满足你的要求,并在合并之前没有错误或安全问题。
使用安全编码和代码评审做法
尽管Copilot可以生成语法正确的代码,但代码可能并不总是安全的。 继续遵循安全编码的最佳做法(避免硬编码机密、防止注入漏洞),并应用严格的测试、IP 扫描和漏洞检查。
提供反馈
如果遇到任何问题或限制,请使用代理响应下方的拇指图标或在社区讨论论坛中共享反馈。
保持最新状态
云中的Copilot正在演变。 在出现时监视新的安全风险和最佳做法。
云中Copilot的安全措施
避免特权提升
- Copilot仅响应具有写入访问权限的用户的交互。
- 由代理 PR 触发的工作流在运行之前需要获得拥有写入访问权限的用户批准。
- 隐藏字符(未在 GitHub.com 上呈现)经过筛选,以减少提示注入风险。
约束 Copilot 的权限
- 代理仅访问其作用域为的存储库;它无法访问其他存储库。
- 推送仅限于名称以 copilot/ 为前缀的分支(而不是默认分支)。
- 代理在运行时没有权限访问组织/库的 Actions 机密信息或变量。 只有那些添加到 Copilot 环境中的机密/变量会被传递给代理。
防止数据外泄
默认情况下启用防火墙,以防止意外或恶意外泄代码或敏感数据。 请参阅为 GitHub Copilot 自定义或禁用防火墙。
云中Copilot的限制
根据代码库和输入,性能可能会有所不同。 请记住以下约束:
- 有限范围和质量: LLM 可能无法处理某些代码结构或模糊语言;质量因语言覆盖率而异。
- 潜在偏见: 训练数据和检索的上下文可能包括偏见;代理可能倾向于某些语言或样式。
- 安全风险: 生成的代码基于存储库上下文,如果未查看,可能会公开敏感信息;需要彻底评审。
- 不准确的代码: 代码可能显示正确,但语义上/语法错误或与意向不对齐。 验证适配、模式和样式。
- 公共代码: 即使设置了“阻止”,代理也可能生成与公共代码的匹配项/接近匹配项;可能不会提供引用。
- 法律/法规: 确保遵守适用的义务;避免在服务条款和行为准则下禁止使用。