Skip to main content

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

了解如何通过了解目的、功能和限制,负责任地使用 GitHub.com 上的 Copilot 编码智能体。

关于 GitHub.com

上的 Copilot 编码智能体

Copilot 编码智能体 是集成到 GitHub 中的自主和异步软件开发代理。 该代理可以从议题或 Copilot Chat 中选取任务,创建拉取请求,然后循环访问该拉取请求以响应评论。

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

在处理任务时,代理可以访问它自己的临时开发环境,在其中它可以更改代码、执行自动测试并运行 linter。

该代理已在各种编程语言中进行了评估,并且英语是主要支持的语言。

该代理的工作原理是结合使用自然语言处理和机器学习来理解任务,并在代码库中进行更改以完成任务。 此过程可以细分为多个步骤。

提示处理

通过议题、拉取请求评论或 Copilot Chat 消息提供给 Copilot 的任务与其他相关的上下文信息相结合,形成提示。 该提示将发送到大语言模型进行处理。 输入可以采用纯自然语言、代码片段或图像的形式。

语言模型分析

然后,提示通过大语言模型传递,该模型是一个神经网络,已基于大量数据进行了训练。 语言模型分析输入提示,以帮助代理对任务进行推理并利用必要的工具。

响应生成

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

输出格式设置

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

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

Copilot 旨在为你提供最相关解决方案来完成任务。 但是,它可能并不总是提供你要查找的答案。 你负责检查和验证 Copilot 生成的答复,以确保其准确和适当。

此外,在我们的产品开发过程中,GitHub 进行红队对抗(测试)以了解和提高代理的安全性。

有关如何提高性能的信息,请参阅下面的提高 Copilot 编码智能体 的性能

Copilot 编码智能体 的用例

在各种场景中可以将任务委托给 Copilot,包括但不限于:

  • 代码库维护:处理与安全性相关的修复、依赖项升级和有针对性的重构****。
  • 文档:更新和创建新文档****。
  • 功能开发:实现增量功能请求****。
  • 改进测试覆盖率:开发用于质量管理的其他测试套件****。
  • 制作新项目原型:全新开发新概念****。

提高 Copilot 编码智能体 的性能

Copilot 编码智能体 可以支持各种任务。 为了提高性能并解决代理的某些限制,可以采取各种措施。

有关限制的详细信息,请参阅 Copilot 编码智能体 的限制(如下所示)。

确保任务的范围明确

Copilot 编码智能体 在生成拉取请求时利用提示作为关键上下文。 分配给代理的提示越清晰、范围越明确,获得的结果就越好。 理想的议题包括:

  • 清晰描述要解决的问题或所需的工作。
  • 关于什么样的解决方案才算好的完整验收标准(例如,是否应该有单元测试?)。
  • 有关哪些文件需要更改的提示或建议。

使用其他上下文自定义体验

Copilot 编码智能体 在生成建议的更改时利用提示、评论和存储库的代码作为上下文。 若要增强 Copilot 的性能,请考虑实施自定义 Copilot 指令,以帮助代理更好地理解项目以及如何生成、测试和验证其更改。 有关详细信息,请参阅 Best practices for using Copilot to work on tasks 中的“向存储库添加自定义指令”。

有关 Copilot 编码智能体 的其他自定义设置的信息,请参阅:

将 Copilot 编码智能体 作为工具而不是替代品使用

虽然 Copilot 编码智能体 可以是生成代码和文档的强大工具,但请务必将其用作工具,而不用于替代人工编程。 应始终检查和测试代理生成的内容,以确保它满足你的要求,并在合并之前没有错误或安全问题。

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

虽然 Copilot 编码智能体 可以生成语法正确的代码,但它可能并不总是安全的。 应始终遵循安全编码的最佳做法,例如避免硬编码密码或 SQL 注入漏洞,并遵循代码评审最佳做法,以解决代理的限制。 应始终采取与你编写的任何使用非独立创作的材料的代码相同的预防措施,包括确保其适用性的预防措施。 这些预防措施包括严格的测试、IP 扫描和安全漏洞检查。

提供反馈

如果 GitHub.com 上的 Copilot 编码智能体 存在任何问题或限制,建议通过单击每个代理答复下方的拇指向下图标来提供反馈。 这可以帮助开发人员改进该工具并解决任何问题或限制。 此外,还可以在社区讨论论坛中提供反馈。

掌握最新动态

Copilot 编码智能体 是一项新技术,可能持续改进。 应随时了解可能出现的任何新安全风险或最佳做法。

Copilot 编码智能体 的安全措施

根据设计,Copilot 编码智能体 采用了多种缓解措施,以帮助确保数据和代码库安全。 虽然存在缓解措施,但请务必继续实施安全最佳做法,同时了解代理的限制以及它们如何影响代码。

避免特权升级

Copilot 编码智能体 将仅响应具有存储库写权限的用户发出的交互(例如,分配代理或评论)。

为响应 Copilot 编码智能体 引发的拉取请求而触发的 GitHub Actions 工作流需要获得具有存储库写权限的用户的批准,然后才能运行。

该代理会筛选一些隐藏字符,这些字符在 GitHub.com 上是不会显示出来的。如果不进行筛选,用户可能会利用这些隐藏字符在评论或议题正文内容中隐藏有害的指令。 这可以防止越狱等风险。

约束 Copilot 的权限

Copilot 仅有权访问它创建拉取请求时所在的存储库,无法访问其他存储库。

它的权限有限,只能推送代码和读取其他资源。 内置保护意味着 Copilot 只能推送到名称以 copilot/ 开头的分支。 这意味着 Copilot 无法推送到默认分支(例如 main)。

Copilot 编码智能体 在运行时期间无权访问 Actions 组织或存储库的机密或变量。 仅专门添加到 copilot 环境的机密和变量会传递给代理。

防止数据外泄

默认情况下,Copilot 编码智能体 已启用防火墙,以防止意外或由于恶意用户输入而外泄代码或其他敏感数据。

有关详细信息,请参阅“Customizing or disabling the firewall for Copilot coding agent”。

Copilot 编码智能体 的限制

根据代码库和输入数据等因素,在使用 Copilot 编码智能体 时,可能会体验到不同级别的性能。 以下信息旨在帮助你了解系统限制以及有关性能的关键概念,因为它们适用于 Copilot 编码智能体。

作用域受限

Copilot 编码智能体 使用的语言模型已基于大量代码进行训练,但范围仍然有限,可能无法处理某些代码结构或晦涩难懂的编程语言。 对于每种语言,收到的建议质量可能取决于该语言训练数据的数量和多样性。

潜在偏见

Copilot 编码智能体 所用语言模型的训练数据和大语言模型收集的上下文所可能包含偏见和错误,这些偏见和错误可能会被工具延续。 此外,Copilot 编码智能体 可能偏向于某些编程语言或编码风格,这可能导致建议欠佳或不完整。

安全风险

Copilot 编码智能体 基于存储库中的议题或评论的上下文生成代码和自然语言,如果这些代码和自然语言未得到慎用,可能会公开敏感信息或漏洞。 在合并之前,应仔细彻底地检查代理生成的所有输出。

代码不准确

目前,Copilot 编码智能体 不支持 GitHub Copilot 提供的建议与公开的代码完全一样。 有关详细信息,请参阅“查找与 GitHub Copilot 建议匹配的公开代码”。

Copilot 编码智能体 可能会生成看似有效的代码,但实际上该代码在语义或语法上可能不正确,或者可能无法准确反映开发人员的意图。

若要降低代码不准确的风险,应仔细评审和测试生成的代码,尤其是在处理关键或敏感应用程序时。 还应确保生成的代码遵循最佳做法和设计模式,并符合代码库的整体体系结构和样式。

用户在使用任何 AI 服务和解决方案时需要评估潜在的特定法律和法规义务,这些 AI 服务和解决方案可能不适合在每个行业或场景中使用。 此外,AI 服务或解决方案的设计目的并非用于适用服务条款和相关行为准则所禁止的用途,也不得以其中所禁止的方式使用。