什么是应用程序卡?
GitHub’s application and platform cards are intended to help you understand how our AI technology works, the choices application owners can make that influence application performance and behavior, and the importance of considering the whole application, including the technology, the people, and the environment. Application cards are created for AI applications and platform cards are created for AI platform services. These resources can support the development or deployment of your own applications and can be shared with users or stakeholders impacted by them.
As part of its commitment to responsible AI, GitHub adheres to Microsoft's six core principles: fairness, reliability and safety, privacy and security, inclusiveness, transparency, and accountability. These principles are embedded in the Responsible AI Standard, which guides teams in designing, building, and testing AI applications. Application and Platform Cards play a key role in operationalizing these principles by offering transparency around capabilities, intended uses, and limitations. For further insight, readers are encouraged to explore Microsoft’s Responsible AI Transparency Report and GitHub 条款.
1. 概述
GitHub Copilot包括多个代理功能,这些功能超出了建议和对话,他们可以查看代码、代表你执行操作以及生成应用程序。 此卡片涵盖以下体验:
-
Copilot 代码评审:审查 GitHub.com 上的拉取请求差异内容和元数据,并生成反馈评论和修改建议。
-
Copilot云代理:GitHub.com 上的异步代理,可以创建分支、编写代码和打开拉取请求,以响应分配的问题。 云代理在具有自动安全扫描的临时防火墙环境中运行。
-
Copilot CLI:一种命令行工具,可以创建和修改文件、执行命令和执行多步骤任务。 所有操作都需要显式权限提示,并且范围限定为当前目录。
-
Copilot SDK:一个编程库,允许开发人员使用 Copilot 生成自定义 AI 驱动的应用程序。 SDK 通过 JSON-RPC 与 Copilot CLI 通信,并支持自定义代理、MCP 服务器集成、生命周期挂钩和会话管理。
-
GitHub Spark (预览版):托管应用生成体验,其中代理在开发环境中编写代码并运行命令。 Spark 提供托管运行时,可以通过 GitHub Models SDK 添加推理功能。
这些功能共享共同原则(人工监督、输出评审和负责任的使用),但在执行环境、权限和数据流方面有所不同。 以下各节将结合具体情境介绍每种体验。
2. 关键术语
以下列表提供了与GitHub Copilot代理相关的关键术语词汇表:
-
代码建议:Copilot 代码评审针对拉取请求提供反馈时提出的具体代码更改建议。 代码建议会以建议更改的形式呈现,只需点击几下即可应用。
-
内容筛选:在向用户显示内容之前,扫描提示和响应以检测和阻止有害、冒犯性或不安全内容的安全系统。
-
自定义指令:关于编码风格和最佳实践的自然语言描述,可由存储库维护者配置,用于指导 Copilot 代码审查的反馈。 自定义说明有助于Copilot了解特定代码库的约定和标准。
-
幻觉:一种现象,指语言模型生成的内容听起来很合理,但事实上是错误的、无法从所提供的上下文中得到支持,或完全凭空捏造。 在代码评审中,幻觉可以显示为反馈,以突出显示不存在或基于代码误解的问题。
-
大型语言模型(LLM):基于大量文本数据训练的神经网络,可以生成、分析和转换自然语言和代码。 Copilot 代理使用一个或多个 LLM 来处理上下文并生成响应。
-
临时开发环境:为每个云代理会话创建的临时隔离计算环境。 会话结束后,环境会被销毁,从而确保在各次运行之间不会保留任何状态。
-
防火墙:默认为云代理启用网络级别控制,可阻止与未经授权的主机建立出站连接,防止意外或恶意外泄代码或数据。
-
AI 信用额度:Copilot功能的消耗单位。 每次使用 Copilot 代码审查都会消耗 AI 积分。
-
执行提示:Copilot CLI 中的交互式确认步骤,要求用户在代理继续之前批准操作(例如修改文件、执行命令或访问当前目录外的文件)。 权限提示是用于本地代理执行的关键安全机制。
-
Copilot SDK:一个编程库(
@github/copilot-sdk),通过创建会话、发送提示以及从Copilot接收流式处理响应来生成自定义 AI 驱动的应用程序。 SDK 通过 JSON-RPC 与 Copilot CLI 通信。 -
JSON-RPC:Copilot SDK 和 Copilot CLI 之间使用的通信协议。 SDK 将结构化请求发送到 CLI 进程,该进程处理模型交互和工具执行。
-
自定义代理 (SDK):SDK 中具有其自己的系统提示、作用域工具和可选 MCP 服务器的命名代理配置。 SDK 运行时可以根据用户意向自动委托给子代理。
-
Hooks (SDK):Copilot SDK 中的生命周期回调,使开发人员在会话期间(例如工具使用前后、会话开始或结束以及错误)期间在特定点注入自定义逻辑。
-
Managed runtime:由 GitHub Spark 提供的完全托管运行环境,可根据应用程序的需求进行扩展,并且无需手动管理基础设施。
-
Spark:使用 GitHub Spark 生成的应用程序。 Spark 的范围可以从简单的实用工具到全堆栈 Web 应用程序,并且可以部署到具有可配置可见性的公共 Internet。
-
Targeted edit:GitHub Spark 中的一项功能,可用于在应用程序中选择特定元素,并提供一个集中的提示来优化其样式、物质或行为,而不是应用全局更改。
3. 主要特性或功能
此处概述的关键特性和功能说明了 GitHub Copilot 代理旨在完成哪些工作,以及它们在受支持的各项任务中的表现如何。
-
自动化代码审查反馈:当用户请求 Copilot 进行审查时,它会扫描代码变更以及其他相关的上下文信息,并提供有关代码的反馈。 反馈可能包括自然语言注释和链接到特定行和文件的特定代码建议。
-
可自定义的审查指引:可通过自定义说明(以自然语言描述的编码风格和最佳实践)来自定义 Copilot 代码审查,使反馈能够体现代码库的约定和标准。
-
自主创建拉取请求:Copilot 云代理可以从议题、拉取请求评论或 Copilot 对话助手 中获取任务,创建分支,生成量身定制的代码更改,并发起拉取请求。 创建初始拉取请求后,智能体可以根据你的反馈和审查意见继续迭代。
-
临时的防火墙执行:在处理任务时,云代理有权访问自己的临时开发环境,可以在其中更改代码、执行自动测试和运行 linters。 默认情况下启用防火墙以防止数据外泄。
-
自动安全扫描:在代码生成过程中,云代理使用 CodeQL、机密扫描和依赖项分析自动分析新生成的安全漏洞代码,并尝试在引入之前解决任何问题。
-
External 集成:云代理可以从 MCP(如 workIQ 和 Microsoft 365)以及外部应用程序(如 Microsoft Teams、Linear、Slack 和 Jira)接收信息和上下文,使团队能够直接在现有工作流中分配任务和跟踪进度。
-
本地代理执行(Copilot CLI):Copilot CLI 在终端中提供类似聊天的接口,可以自主创建和修改文件、执行命令和执行多步骤任务。 所有操作都限定为当前目录,在代理修改文件或运行命令之前需要显式权限提示。
-
自然语言应用生成(Spark):GitHub Spark 提供了一个以语言为中心的自然开发环境,用于创建和部署全堆栈 Web 应用程序,而无需用户手动编写或部署代码。 Spark 提供可随应用程序需求扩展的全托管运行时环境。
-
推理功能(Spark):Spark 的 SDK 原生集成了 GitHub Models,让你能够将模型推理集成到应用程序中。 如果 Spark 确定应用程序需要推理功能,它将使用 Spark SDK 添加它们。
4. 预期用途
GitHub Copilot 代理可用于多个行业中的多种场景。 用例的一些示例包括:
-
补充人工代码评审:Copilot 代码审查旨在快速针对开发者的代码提供反馈,帮助开发者更快地让代码达到可合并状态,并提高整体代码质量。
-
代码库维护:云代理可以处理与安全相关的修补程序、依赖项升级和目标重构。
-
功能开发:云代理可以实现增量功能请求、开发其他测试套件以及创建或更新文档。
-
新项目原型设计:云代理和 Copilot CLI 可以从零开始构建新概念,帮助开发人员快速探索想法。
-
设置环境(CLI):Copilot CLI 可以在终端中运行命令,以设置本地环境以处理现有项目。
-
定义正确的命令(CLI):Copilot CLI 可以建议执行尝试完成的任务的命令,并使用自然语言解释不熟悉的命令。
-
构建自定义 AI 应用程序(SDK):Copilot SDK 使开发人员能够在自己的产品和工作流中构建利用代码生成、自然语言交互和任务自动化Copilot的应用程序。
-
多代理业务流程(SDK):使用自定义代理和子代理,开发人员可以构建复杂的工作流,其中多个专用代理可以协作处理复杂任务,并基于用户意向自动委派。
-
使用外部工具(SDK)扩展应用程序:SDK 的 MCP 服务器支持允许开发人员将其应用程序连接到外部数据源和服务,从而扩展其代理可以执行的任务范围。
-
构建和部署 Web 应用程序(Spark):可以使用 GitHub Spark 使用自然语言生成全堆栈 Web 应用程序。 Spark 的集成运行时环境允许将这些应用程序部署到公共 Internet,并基于GitHub帐户权限配置可见性。
-
快速原型制作(Spark):Spark 可帮助开发人员、设计人员、产品经理和其他构建者快速制作原型创意,而无需从头开始构建应用程序或构建复杂的模型。 可以部署原型,以便于共享或保持未发布状态。
5. 模型和训练数据
GitHub Copilot代理利用各种 AI 模型为用户看到的体验提供支持。 有关可用于Copilot的模型的比较,请参阅 AI 模型比较。 有关支持模型的完整列表,请参阅 GitHub Copilot中支持的 AI 模型。 有关托管模型的位置的信息,请参阅 托管用于GitHub Copilot的模型。 若要详细了解用于训练 GitHub Copilot Agents 背后的基础模型所使用的数据,请参阅上方链接的 AI 模型比较,以及 GitHub Copilot 常见问题解答中的 GitHub Copilot 是基于哪些数据训练的?
Copilot 代码评审是一款专为代码评审打造的产品,它结合经过精心调校的模型、提示词和系统行为,能够在各类代码库中持续提供一致的高质量反馈。 模型切换不受支持,因为更改模型可能会损害可靠性、用户体验和评审评论的质量。 Copilot代码评审可能会使用组织“模型”设置页上未启用的模型。
Copilot云代理使用大型语言模型来推理任务、生成代码以及利用其临时开发环境中的工具。 代理已跨各种编程语言进行评估。 英语是提示和响应的主要支持语言。
Copilot CLI 使用大型语言模型来推理任务、生成代码、修改文件并在本地终端环境中执行命令。 代理已跨各种编程语言进行评估。 英语是提示和响应的主要支持语言。
Copilot SDK 使用相同的基础模型和功能通过 JSON-RPC 与 Copilot CLI 通信。 使用 SDK 构建的应用程序会使用与经过身份验证的 Copilot 用户或组织可用的相同模型。 开发人员还可以自带 API 密钥(BYOK)来使用自定义模型提供程序。
GitHub Spark 使用大型语言模型在开发环境中为其代理提供支持。 代理编写代码并运行命令以生成应用程序。 Spark 的 SDK 可与 GitHub Models 原生集成,使应用程序能够集成模型推理功能。 有关GitHub模型使用的模型的信息,请参阅 负责任地使用 GitHub 模型。 Spark 不会测试在应用程序中创建的提示进行推理 - 必须确保包含的功能按预期运行。
6. 性能
经验差异
Copilot 云代理
Copilot云代理的工作原理是结合使用自然语言处理和机器学习来了解任务并在代码库中进行更改。 此过程可以分为多个步骤:
- 提示词处理:通过 Issue、拉取请求评论或 Copilot 对话助手 消息提供的任务会与其他相关的上下文信息结合,形成提示词。 该提示将发送到大语言模型进行处理。 输入可以采用纯自然语言、代码片段或图像的形式。
- 语言模型分析:提示通过大型语言模型传递,这是一个神经网络,已针对大量数据进行训练。 语言模型分析输入提示,以帮助代理推理任务并利用必要的工具。
- 响应生成:语言模型根据对提示的分析生成响应。 此响应可以采用自然语言建议和代码建议的形式。
- 输出格式:代理完成首次运行后,它会更新拉取请求说明及其所做的更改。 代理可能包含有关它无法访问的资源的补充信息,并提供有关要解决的步骤的建议。 您可以通过在拉取请求中发表评论或明确提及该代理(
@copilot)来提供反馈。 然后,代理将重新提交该反馈,以便进一步分析和响应更新的更改。
Copilot云代理旨在提供最相关的任务解决解决方案。 但是,它可能并不总是提供你要查找的答案。 你负责查看和验证Copilot云代理生成的响应,以确保它们准确且合适。
Copilot代码审查
Copilot代码评审会检查代码,并使用自然语言处理和机器学习的组合提供反馈。 此过程可以分为多个步骤:
- 输入处理:代码更改与其他相关的上下文信息(例如拉取请求的标题和正文)和已定义的任何自定义指令组合在一起,以形成提示。 该提示将发送到大型语言模型。
- 语言模型分析:提示会传递给 Copilot 语言模型,它是一个使用大量文本数据训练而成的神经网络。 语言模型分析输入提示。
- 响应生成:语言模型基于对输入提示的分析生成响应。 此响应可以采用自然语言建议和代码建议的形式。
- 输出格式:回复会直接在受支持的编辑器中呈现给用户,或以 GitHub.com 上的拉取请求审查形式呈现,并提供关联到特定文件中特定行的代码反馈。 如果Copilot提供了代码建议,建议将呈现为建议的更改,可通过几次单击来应用该更改。
Copilot 命令行界面(CLI)
Copilot CLI 的工作原理是结合使用自然语言处理和机器学习来理解任务并在代码库中进行更改。 此过程可以分为多个步骤:
- 输入处理:输入与相关上下文信息相结合,形成提示。 该提示将发送到大语言模型进行处理。 输入可以采用纯自然语言、代码片段或对终端中文件的引用的形式。
- 语言模型分析:提示通过大型语言模型传递,这是一个神经网络,已针对大量数据进行训练。 语言模型会分析输入的提示,以帮助智能体对任务进行推理并使用必要的工具。
- 响应生成:语言模型根据对提示的分析生成响应。 此响应可以采用自然语言建议、代码建议、文件修改和命令执行的形式。
- 输出格式:响应采用语法突出显示、缩进和其他格式设置功能进行格式化和呈现。 代理还可以在本地环境中执行命令,并在文件系统中创建、编辑或删除文件以完成任务。 所有此类操作都需要显式权限提示。
代理在交互式聊天窗口中返回回复后,你可以向其提供反馈。 代理将向语言模型重新提交该反馈,以便进一步分析并返回其他响应。
Copilot SDK
Copilot SDK 提供了一个编程接口,用于Copilot的代理功能。 使用 SDK 生成的应用程序遵循以下过程:
- 会话创建:应用程序使用 SDK 创建会话,指定模型、系统提示、可用工具、自定义代理、MCP 服务器和挂钩。 SDK 与 Copilot CLI 建立 JSON-RPC 连接。
- 提示提交:用户输入已提交到会话。 SDK 将提示(以及会话上下文)路由到 CLI,该 CLI 将其转发到语言模型。
- 代理执行:有关任务的语言模型原因,并可能调用工具、委托给子代理或连接到 MCP 服务器。 生命周期挂钩在每个阶段触发,使应用程序能够注入自定义逻辑。
- 响应流式处理:响应流式传输到应用程序,该应用程序可以采用适合其接口的任何格式显示它们。 SDK 为文本、工具调用、错误和完成信号提供结构化事件。
GitHub Spark
GitHub Spark 使用基于代理的方法来生成和修改应用程序。 此过程可以分为多个步骤:
- 输入处理:输入提示会先由 Copilot 进行预处理,并结合你当前 Spark 输入中的上下文信息(包括当前应用程序中的代码、之前的提示以及开发环境中的任何错误日志)进行补充,然后发送到你开发环境中由大型语言模型驱动的代理。 该系统旨在基于提交的提示生成代码,并且无法进行对话交互。 英语是提示的首选语言。
- 语言模型分析:提示通过大型语言模型传递,该模型是针对大量文本数据进行训练的神经网络。 语言模型分析输入提示,以帮助代理推理任务并利用必要的工具。
- 代理执行:代理在开发环境中运行,接受提示和其他上下文,并决定如何更新应用程序。 代理可以编写代码、运行命令和读取执行输出。 将采取所有操作来确保功能、准确的代码。 代理的唯一输出是应用程序代码。
Spark 使用框架和 SDK,确保新式设计和安全部署无缝集成到 Spark 的运行时组件中。 设计框架灵活模块化,使你能够修改主题以匹配所需的外观。 Spark 的运行时集成使用 Web 部署的最佳做法来确保安全的可缩放部署。
7. 限制
了解 GitHub Copilot 代理功能的局限性,对于确保其使用处于安全有效的范围内至关重要。 虽然我们鼓励客户在其创新解决方案或应用程序中利用这些功能,但请务必注意,它们并非针对每种可能的方案而设计。 我们建议用户在选择用例时参考 GitHub 条款 以及以下注意事项:
-
未发现的代码质量问题:Copilot 可能无法识别代码中存在的所有问题,尤其是在改动较大或较为复杂时。 为了确保识别并纠正所有相关问题,应在 Copilot 代码审查之外辅以细致的人工代码审查。
-
误报:Copilot 代码评审存在产生幻觉的风险——它可能会指出审查代码中并不存在的问题,或者基于对代码的误解而提出问题。 在采取行动和进行更改之前,应仔细审查和考虑Copilot代码评审生成的注释。
-
错误或不安全的代码建议:作为评论的一部分,Copilot 代码评审可能会提供具体的代码建议。 生成的代码可能看起来有效,但实际上可能不是语义或语法正确的,或者可能无法正确解决注释中标识的问题。 此外,由Copilot生成的代码可能包含安全漏洞或其他问题。 应始终仔细查看和测试由Copilot生成的代码。
-
潜在偏差:Copilot 的训练数据来自现有代码仓库,其中可能包含会被该工具延续的偏差和错误。 此外,Copilot代码评审可能偏向于某些编程语言或编码样式,这可能会导致反馈不理想或不完整。
-
有限范围(云代理):云代理使用的语言模型已在大量代码上训练,但仍具有有限的范围,可能无法处理某些代码结构或模糊编程语言。 对于每种语言,建议的质量取决于该语言的训练数据的量和多样性。
-
不准确的代码(云代理):云代理可能会生成看似有效的代码,但实际上可能不是语义上或语法正确的,或者可能无法准确反映开发人员的意图。 应仔细查看和测试生成的代码,尤其是在处理关键或敏感应用程序时。
-
安全风险(云代理):云代理根据存储库中问题或注释的上下文生成代码和自然语言,如果未仔细使用,可能会公开敏感信息或漏洞。 在合并之前,应彻底查看代理生成的所有输出。
-
公共代码匹配(云代理):云代理可能会生成与公开可用的代码匹配或接近匹配的代码,即使“建议匹配公共代码”策略设置为“阻止”。 如果发生这种情况,Copilot将在代理会话日志中显示匹配项,并显示匹配代码的详细信息的链接。
-
Limited scope (CLI):Copilot CLI 使用的语言模型已在大量代码上训练,但仍具有有限的范围,可能无法处理某些代码结构或模糊编程语言。 对于每种语言,建议的质量取决于该语言的训练数据的量和多样性。
-
错误代码(CLI):Copilot CLI 可能会生成看似有效但实际上在语义或语法上并不正确的代码,或者无法准确反映开发者的意图。 应仔细查看和测试生成的代码,尤其是在处理关键或敏感应用程序时。
-
安全风险(CLI):Copilot CLI 根据本地环境的上下文生成代码和自然语言,如果未仔细使用,可能会公开敏感信息或漏洞。 应彻底查看代理生成的所有输出。
-
公共代码匹配 (CLI):Copilot CLI 可能会生成与公开可用的代码匹配或接近匹配的代码,即使“建议匹配公共代码”策略设置为“阻止”。
-
命令执行风险(CLI):在请求或允许Copilot CLI 执行命令时,需要额外的警告,尤其是某些建议命令的潜在破坏性。 你可能会遇到文件删除或硬盘驱动器格式化的命令,如果不正确使用,可能会导致问题。 你对 Copilot CLI 执行的命令负最终责任。
-
继承的限制(SDK):由于 Copilot SDK 与 Copilot CLI 通信,因此使用该 SDK 构建的应用程序会继承相同的模型局限性,包括对某些编程语言的支持范围有限,以及可能生成不准确或不安全的代码。
-
自定义代理复杂性(SDK):配置不当的自定义代理、工具或挂钩可能会导致意外行为。 开发人员负责测试和验证其自定义代理配置的行为。
-
MCP 服务器信任 (SDK):通过 SDK 连接的 MCP 服务器可以公开来自外部源的工具和数据。 开发人员必须确保连接的 MCP 服务器可信,因为恶意服务器或配置不当的服务器可能会引入有害行为或公开敏感数据。
-
BYOK 模型差异(SDK):将自带密钥配置用于第三方模型提供程序时,行为可能与GitHub托管的模型不同。 开发人员负责评估所选提供商的响应的安全性和质量。
-
用户意向的解释(Spark):Spark 在对意向的解释中并不总是正确的。 应始终使用 Spark 提供的预览版来确认应用程序中的准确行为。
-
有限范围(Spark):Spark 已针对大量代码和相关应用程序进行了训练,但可能难以处理复杂或真正新颖的应用程序。 Spark 在常见的个人应用场景中表现最佳(例如生产力工具、学习辅助工具、生活管理工具),以及在以英语提供自然语言指令时。
-
公共代码匹配 (Spark):Spark 可能会生成与公开可用的代码匹配或接近匹配的代码,即使“建议匹配公共代码”策略设置为“阻止”。 如果发生这种情况,Copilot不会提供指向代码原始源的代码引用。
-
安全限制(Spark):虽然 Spark 的运行时遵循应用程序部署的最佳做法,但它以概率方式生成代码,这可能会引入漏洞,尤其是在训练集中常见这些漏洞时。 构建处理个人或敏感数据的应用时需格外谨慎,且务必对生成的应用进行全面审查和测试。
8. 评估
性能和安全评估通过检查基础性、相关性和一致性等因素来评估 AI 应用程序是否安全可靠地运行,同时识别生成有害内容的风险。 以下评估是在安全组件已就位的情况下进行的,这些组件也在9. 安全组件和缓解措施中进行了说明。
性能和质量评估
GitHub Copilot 代理在其支持的各个平台上接受评估,评估采用行业标准基准(例如 SWE-Bench)与内部开发的评估套件相结合的方式。 基准任务源自公共开源存储库和综合方案;不使用真正的用户查询或客户代码。 每个评估包括多个独立运行,以考虑到模型输出中的不确定性。 关键指标包括解决率(成功完成的任务百分比)、令牌效率、延迟和工具调用可靠性。 模型在进行更新时会重新评估,并在生产环境中通过错误率、响应延迟和总体使用模式持续监控。
性能和质量评估方法
GitHub Copilot Agents 的新模型在部署前要经过分阶段评估。 集成器团队运行特定于其表面的基准套件,针对代表性编码任务(如 bug 修复、代码生成和多文件重构)测试模型。 根据已建立的基线和现有生产模型查看结果。 在前进到下一阶段之前,模型必须满足或超过关键指标(例如分辨率、令牌效率和延迟)的基线性能。 跨职能评审委员会会在任何模型获准面向用户部署之前,正式决定是否批准继续推进。
风险和安全评估
评估与 AI 生成内容相关的潜在风险对于防范不同程度严重性的内容风险至关重要。 这包括评估 AI 应用程序生成有害内容或测试越狱攻击漏洞的倾向。 对于 GitHub,我们会进行性能评估,其中包括从 Microsoft Foundry 改编而来、用于编码的评估:
- 仇恨和不公平
- 性行为
- 暴力
- 自残
- 受保护的材料
- 越狱
- 代码漏洞
质量和安全的评估数据
我们的评估数据是定制的,用于评估 AI 应用程序在安全和****质量的关键领域的性能,模拟实际场景和风险。 首先,我们根据多学科研究和专家的意见,确定相关的评估关注点。 这些关注点转化为有针对性的评估目标,并指导制定评估指标。 在安全性方面,我们会设计对抗性提示,以诱导产生不良或边缘情况响应,随后由经过训练、能够评估是否符合 GitHub 标准的 AI 辅助标注人员对这些响应进行评分。 对于质量,我们设计了基于评分标准的提示词,适用于评估检索增强生成(RAG)应用和智能体等场景。 数据集由各种来源(包括合成数据集和公共数据集)进行策展,以模拟真实用户方案。 使用特选数据集,评估都经过迭代优化和人工对齐,以提高指标有效性和可靠性。 此方法构成了可重复的严格评估的基础,这些评估反映了客户如何使用评估来构建更好的 AI。
自定义评估
Copilot 智能体功能已经过 RAI 红队测试,以识别和应对潜在风险。 我们不断监视这些功能的有效性和安全性。 有关详细信息,请参阅 Microsoft 安全博客上的 Microsoft AI Red Team 打造更安全 AI 的未来。
9. 安全组件和缓解措施
Copilot 云代理
- 权限提升控制:云代理仅响应来自具有存储库写入访问权限的用户的交互。 由代理引发的拉取请求触发的操作工作流需要获得具有写入访问权限的用户的批准,然后才能运行。 代理会筛选隐藏的字符,这些字符可能允许用户隐藏评论或问题内容中的有害说明。
- 受约束的权限:云代理仅有权访问创建拉取请求的存储库,并且无法访问其他存储库。 它只能推送到单个分支:如果通过
@copilot触发,则推送到现有的拉取请求分支;否则,推送到新的copilot/分支。 这意味着 Copilot 无法直接推送到默认分支(例如main)。 代理无权访问 Actions 组织或存储库机密,只有专门添加到环境的copilot机密和变量才会传递到代理。 - 确保可追溯性:云代理创建的提交由 Copilot 署名,启动该任务的人员会被标记为共同作者。 这样,可以更轻松地识别代理生成的代码以及启动任务的人员。 云代理的提交已签名,因此它们在GitHub上显示为“已验证”。 这可以确信提交是由GitHub Copilot云代理进行的,并且尚未更改。 每个提交消息都包含指向代理会话日志的链接。 这会为任何由代理创建的提交提供一个指向完整会话日志的永久链接,因此你可以在代码评审期间了解 Copilot 为何会做出某项更改,也可以在之后出于审计目的进行追溯。
- 用于数据外泄防护的防火墙:默认情况下,云代理启用了防火墙,以防止意外或由于恶意用户输入而外泄代码或其他敏感数据。
- 自动安全漏洞检测:在代码生成期间,云代理会自动分析新生成的安全漏洞代码,并尝试解决这些问题。 使用 CodeQL(识别潜在的漏洞和错误)、机密扫描(确保未引入机密)和依赖项分析(检查引用依赖项中的已知漏洞)执行分析。
Copilot 命令行界面(CLI)
- 目录范围的访问:默认情况下,Copilot CLI 仅有权访问调用它的目录及其下方的文件和文件夹。 如果代理希望访问当前目录外的文件,它将请求权限。
- 文件修改权限提示:Copilot CLI 会在修改文件前请求许可。 在授予权限之前,应确保它正在修改正确的文件。
- 发出命令执行提示:Copilot CLI 在执行可能很危险的命令之前请求权限。 在授予运行权限之前,应仔细查看这些命令。
- 可配置的权限:你可以使用各种命令行选项为 Copilot CLI 授予特定权限或全部权限,例如
--allow-tool=[TOOLS...]、--allow-all-tools、--allow-all(或其对应的斜杠命令/allow-all,用于交互式会话)。 有关详细信息,请参阅“GitHub Copilot CLI 命令参考”。 通常,在 autopilot 模式下使用 Copilot CLI 时,将授予其完全权限以允许它自主完成任务,而无需在任务上工作时批准活动。 有关详细信息,请参阅“允许 GitHub Copilot CLI 自主工作”。 - 安全注意事项:有关使用 Copilot CLI 时的安全做法的详细信息,请参阅 关于 GitHub Copilot CLI。
Copilot SDK
- 继承的 CLI 安全控制:Copilot SDK 与 Copilot CLI 通信,并继承其权限模型和安全控制。 工具执行和文件修改仍需要适当的权限。
- 基于挂钩的监督:SDK 的生命周期挂钩(如
onPreToolUse和onPostToolUse)允许开发人员在工具执行前后实现自定义安全检查、审核日志记录和审批工作流。 - MCP 服务器隔离:MCP 服务器作为单独的进程运行。 开发人员可以控制每个会话可用的服务器,从而限制外部工具访问的范围。
- 会话范围:每个 SDK 会话都与其自己的上下文、工具和权限隔离。 开发人员可以控制每个会话中可用的数据和功能。
- BYOK 责任:使用自带密钥配置时,提示和响应将直接发送到配置的提供程序。 开发人员负责查看所选提供程序的数据处理策略。
使用您自己的模型提供方(CLI)时的数据处理
将 Copilot CLI 配置为使用自己的模型提供程序时,系统会直接向配置的提供程序发送提示、代码上下文和生成的响应。 它们不会通过GitHub路由。 你负责查看和遵守所选提供商的服务条款和数据处理策略。
Telemetry
在没有脱机模式的情况下使用自己的模型提供程序时,Copilot CLI 将继续像往常一样将遥测数据发送到GitHub。 这些遥测数据不包括您的提示词或代码,但包括使用元数据。
如果将环境变量COPILOT_OFFLINE设置为 true 来启用脱机模式,则会禁用所有遥测。 在脱机模式下,Copilot CLI 仅向配置的模型提供程序发出网络请求。
身份验证和功能可用性
使用自己的模型提供程序(BYOK)时,不需要GitHub身份验证。 如果没有GitHub身份验证,以下功能不可用:
/delegate,它将会话转交给 GitHub 服务器端的 Copilot- GitHub MCP 服务器
- GitHub代码搜索
在脱机模式下,还会禁用基于 Web 的工具,例如 web_fetch 和 GitHub 代码搜索。
不回退至 GitHub 托管的模型
如果模型提供程序配置无效,Copilot CLI 退出并出现错误。 它不会回退到GitHub托管的模型。 常见故障(例如连接被拒绝、身份验证错误、找不到模型和超时)会生成用户友好的消息,并提供可操作指南。
GitHub Spark
- 内容保护:Spark 具有针对有害、可恨或冒犯性内容的内置保护。
- 内容报告:可以通过反馈报告有问题或冒犯性的内容,或者将 Spark 报告为滥用或垃圾邮件。 冒犯性内容的示例应连同 spark 的 URL 一并报告给 copilot-safety@github.com。
- 安全运行时:Spark 的运行时集成使用 Web 部署的最佳做法来确保安全的可缩放部署。
10. 部署和采用GitHub Copilot代理功能的最佳做法
负责任的 AI 是GitHub与其客户之间的共同承诺。 虽然 GitHub 在构建 AI 应用时以安全、公平和透明为核心,但客户在结合自身业务场景负责任地部署和使用这些技术方面也发挥着关键作用。 为了支持这种合作关系,我们为部署人员和最终用户提供以下最佳做法,帮助客户有效地实现负责任的 AI。
-
在将Copilot代理功能用于结果决策或敏感域中时,请谨慎评估结果: 后果性决定是可能对某人获得教育、就业、金融平台、政府福利、医疗保健、住房、保险、法律平台或可能导致身体、心理或经济伤害的人产生法律或重大影响的决定。 敏感领域(如金融平台、医疗保健和住房)需要特别照顾,因为可能会对不同人群产生不成比例的影响。 在这些领域使用 AI 做出决策时,请确保受影响的利益干系人能够了解如何做出决策、对决策提出上诉,并更新任何相关的输入数据。
-
评估法律和法规注意事项: 客户在使用任何 AI 平台和解决方案时需要评估潜在的特定法律和法规义务,这些义务可能不适合在每个行业或方案中使用。 此外,AI 平台或解决方案不设计用于适用的服务条款和相关行为准则禁止的使用方式,也不得以这些禁止的方式使用。
-
适当时执行人工监督:在与 AI 应用程序交互时,人工监督是一个重要的保障措施。 虽然我们不断改进 AI 应用程序,但 AI 仍可能会出错。 生成的输出可能不准确、不完整、有偏见、未对齐或与预期目标无关。 这可能是由于各种原因导致的,例如输入不明确或基础模型的限制。 因此,用户应查看Copilot代理功能生成的响应,并验证它们是否符合预期和要求。
-
请注意过度关注的风险: 当用户接受不正确的或不完整的 AI 输出时,AI 的过度依赖会发生,这主要是因为 AI 输出中的错误可能难以检测到。 对于最终用户来说,过度信赖可能导致生产力下降、信任丧失、应用程序放弃、经济损失、心理伤害、身体伤害等。 (例如,医生接受错误的 AI 输出) 。
-
在敏感域中设计代理 AI 时,请谨慎操作: 在代理操作不可逆或高度后果的敏感域中设计和/或部署代理 AI 应用程序时,用户应谨慎行事。 创建自治代理 AI 时,还应采取其他预防措施,如 GitHub 条款 中所述。
-
使用Copilot代码评审来补充人工评审,而不是替换它们:虽然Copilot代码评审可能是提高代码质量的强大工具,但请务必将其用作工具,而不是取代人工评审。 应始终查看并验证Copilot代码评审生成的反馈,并通过仔细人工评审来补充Copilot的反馈,以确保代码满足你的要求。
-
提供反馈:如果您在 Copilot 代码评审中遇到任何问题或局限性,我们建议您使用 Copilot 评论中的点赞和点踩按钮来提供反馈。 这有助于GitHub改进工具并解决任何问题或限制。
-
配置自定义说明:可以配置自定义说明来帮助Copilot了解编码风格和最佳做法,提高评审反馈的相关性和质量。
-
确保云代理任务范围良好:分配给云代理的提示越清晰且范围越广,结果就越好。 理想问题包括问题的明确说明、完整的接受标准以及需要更改的文件的提示。
-
使用其他上下文自定义云代理:云代理有权访问语义代码搜索,这有助于它根据含义而不是完全文本匹配来查找相关代码,从而更快地完成任务。 为了进一步提高性能,请实施自定义Copilot说明,以帮助代理更好地了解项目以及如何生成、测试和验证其更改。
-
使用云代理作为工具,而不是替换:应始终查看和测试云代理生成的内容,以确保它满足你的要求,并在合并之前没有错误或安全问题。
-
对云代理使用安全编码和代码评审做法:尽管云代理可以生成语法正确的代码,但它可能并不总是安全的。 遵循安全编码和代码评审的最佳做法。 采取与使用未独立来源材料的任何代码相同的预防措施,包括严格的测试、IP 扫描和检查安全漏洞。
-
保持最新:云代理是一种不断发展的技术。 随时了解可能出现的任何新的安全风险或最佳做法。
-
使用 Copilot CLI 作为工具,而不是替换工具:应始终查看和验证由 Copilot CLI 生成的命令和代码,以确保它们满足要求,并且没有错误或安全问题。
-
执行前的 Review 命令(CLI):当 Copilot CLI 建议执行命令(尤其是修改或删除文件的命令)时,请特别小心。 你要对你允许代理运行的命令负最终责任。
-
使 CLI 任务范围良好:你提供的提示越清晰且范围越广,结果就越好。 包含对问题的清晰说明、验收标准,以及关于需要更改哪些文件的提示。
-
Provide feedback (CLI):如果遇到Copilot CLI 的任何问题或限制,请使用
/feedback命令提供反馈。 -
验证自定义代理行为(SDK):在将使用 SDK 生成的应用程序部署到生产环境之前彻底测试自定义代理、工具和挂钩。 确保工具配置和系统提示产生安全、预期的行为。
-
审核 MCP 服务器连接(SDK):仅连接到你信任的 MCP 服务器。 查看每个服务器公开的工具和数据,并确保它们符合应用程序的安全要求。
-
实现安全挂钩(SDK):使用 SDK 的生命周期挂钩在应用程序中实现内容筛选、审核日志记录和工具审批工作流等防护措施。
-
适当地限定会话范围(SDK):仅使用手头任务所需的工具、代理和权限配置每个 SDK 会话。 当窄范围足够时,避免授予广泛访问权限。
-
查看 BYOK 提供程序策略(SDK): 如果使用自带密钥配置,请确保所选的模型提供程序的服务条款和数据处理策略符合组织的要求。
-
让 Spark 提示词具体且紧扣主题:你对预期行为和交互描述得越具体,生成结果就越好。 合并相关上下文(例如特定方案、模拟或规范)将有助于 Spark 了解你的意图。 Spark 包含先前提示的上下文,因此非主题提示可能会妨碍后续修订的性能。
-
在 Spark 中使用定向编辑:目标编辑允许在应用程序中指定元素进行重点优化。 尽可能使用有针对性的编辑(而不是全局提示)将导致更准确的更改和更少的副作用。
-
验证 Spark 的输出:始终使用 Spark 提供的应用程序预览来验证应用程序在不同方案中的行为是否按预期方式运行。 如果你熟悉代码,请查看生成的代码,以确保它符合你的质量标准。
-
确保推理功能按预期运行(Spark):如果您的 Spark 应用程序通过 GitHub Models SDK 使用推理功能,则需要对您创建的提示进行测试,以确保其产生恰当的结果。
11. 详细了解GitHub Copilot代理功能
有关负责任的使用Copilot代理功能的其他指南,建议查看以下文档:
- 使用 GitHub Copilot 代码审查
- 使用GitHub Copilot处理任务的最佳做法
- 配置开发环境
- 自定义或禁用 GitHub Copilot 云代理的防火墙
- 构建你的第一个由 Copilot 提供支持的应用
- 为存储库配置 MCP 服务器
- 关于 GitHub Copilot CLI
- 你的第一个火花
- 使用 GitHub Spark 生成和部署 AI 驱动的应用
- GitHub Spark 计费
- 负责任地使用 GitHub 模型
- GitHub 预发行许可条款
- GitHub 附加产品和功能条款
- Copilot信任中心