跳至主要内容

GitHub 中 GitHub Copilot Chat 的负责任使用

通过了解其目的、功能和局限性,学习如何在 GitHub 中负责任地使用 GitHub Copilot Chat。

关于 GitHub 中的 GitHub Copilot Chat

GitHub 中的 GitHub Copilot Chat 是一种聊天界面,允许您与 GitHub Copilot 交互,在 GitHub 内提出并接收与代码相关的问题的答案。

该聊天界面提供代码信息和支持,您无需浏览文档或搜索在线论坛即可获取。

注意

Copilot Chat 也可在 Visual Studio Code、Visual Studio 以及 JetBrains 系列 IDE 中使用。但这些 IDE 中提供的功能与 GitHub 上的功能有所不同。

GitHub Copilot Chat 可以回答广泛的编程相关问题,主题包括语法、编程概念、测试用例、调试等。GitHub Copilot Chat 的设计初衷并非回答非编程问题或提供编程领域以外的通用信息。

GitHub 中 Copilot Chat 主要支持的语言是英语。

GitHub Copilot Chat 通过结合使用自然语言处理和机器学习来理解您的问题并为您提供答案。这个过程可以分解为几个步骤。

输入处理

用户的输入提示会先由 Copilot Chat 系统进行预处理,并与上下文信息(例如当前日期时间以及用户当前浏览的仓库名称)结合后发送至大型语言模型。用户输入可以是代码片段,也可以是自然语言。

大型语言模型会使用该提示,收集额外的上下文(例如存储在 GitHub 上的仓库数据或来自 Bing 的搜索结果),并基于提示生成响应。该系统仅旨在回答与代码相关的问题。

语言模型分析

预处理后的提示随后传递给 Copilot Chat 语言模型,该模型是一个经过大规模文本数据训练的神经网络。语言模型会对输入提示进行分析。

响应生成

语言模型根据对输入提示及提供的上下文的分析生成响应。模型可以收集额外的上下文(例如 GitHub 上的仓库数据或 Bing 的搜索结果),并基于提示提供响应。该响应可能以生成的代码、代码建议或对现有代码的解释形式呈现。

输出格式化

Copilot Chat 生成的响应会被格式化后呈现给用户。Chat 可能使用语法高亮、缩进等格式化功能,以提升生成内容的可读性。根据用户提问的类型,系统还可能提供模型在生成响应时使用的上下文链接,例如源码文件、议题、Bing 搜索结果或文档。

Copilot Chat 旨在为您的问题提供最相关的答案。但它不一定总能给出您期望的答案。Copilot Chat 的用户需自行审查和验证系统生成的响应,以确保其准确性和适用性。此外,作为产品开发流程的一部分,我们会进行红队测试,以了解并提升 Copilot Chat 的安全性。输入提示和输出结果会经过内容过滤器。内容过滤系统会检测并阻止特定类别的输出,包括有害、冒犯或离题的内容。如需了解更多提升 Copilot Chat 性能的信息,请参阅 提升 Copilot Chat 的性能

Copilot Chat 的使用场景

Copilot Chat 能在多种场景下提供编码帮助。

回答编码问题

您可以就特定的编码问题向 Copilot Chat 寻求帮助或澄清,并接收自然语言格式或代码片段格式的回复。

Copilot Chat 生成的响应可能会利用模型的训练数据集、Bing 的搜索结果以及您仓库中的代码来回答您的问题。

对于程序员来说,这可能是一个有用的工具,因为它可以为常见的编码任务和挑战提供指导和支持。

解释代码并建议改进

Copilot Chat 可以通过生成对代码功能和用途的自然语言描述来帮助解释所选代码。如果您想了解代码的行为,或者非技术利益相关者需要了解代码的工作方式,这将非常有用。例如,如果您在代码编辑器中选择一个函数或代码块,Copilot Chat 可以生成对代码功能及其在整个系统中的地位的自然语言描述。这可以包括函数输入和输出参数、其依赖关系及其在大型应用程序中的用途等信息。

Copilot Chat 还可以对所选代码提出潜在改进建议,例如改进对错误和边缘情况的处理,或更改逻辑流程以使代码更具可读性。

通过生成解释并建议相关文档,Copilot Chat 可以帮助您理解所选代码,从而改善协作并提高软件开发效率。但是,需要注意的是,生成的解释和文档可能并不总是准确或完整的,因此您需要审查并偶尔纠正 Copilot Chat 的输出。

提出代码修复方案

Copilot Chat 可以根据错误或问题的上下文建议代码片段和解决方案,从而为您代码中的错误提出修复方案。如果您在识别错误的根本原因时遇到困难,或者需要有关最佳修复方式的指导,这将非常有用。例如,如果您的代码产生错误消息或警告,Copilot Chat 可以根据错误消息、代码语法和周围的代码建议可能的修复方案。

Copilot Chat 可以建议对变量、控制结构或函数调用进行更改,这些更改可能会解决问题并生成可以合并到代码库中的代码片段。但是,需要注意的是,建议的修复方案可能并不总是最佳或完整的,因此您需要审查和测试这些建议。

规划编码任务

Copilot Chat 可以读取 GitHub 议题并进行摘要,回答关于议题的问题,或提出后续步骤。如果您遇到一个包含大量评论的冗长、复杂的议题,希望快速了解内容或决定下一步操作,这将非常有用。

但请注意,Copilot Chat 的答案和摘要可能并非始终准确或完整,您需要审查其输出以确保准确性。

了解发布、讨论和提交

Copilot Chat 可以帮助您了解特定发布的更改内容,概括讨论中的信息,并解释特定提交的变动。例如,当您刚加入一个项目、想快速掌握讨论要点或需要处理他人编写的代码时,这都非常有用。但请注意,Copilot Chat 对发布、讨论和提交的摘要可能并非始终准确或完整。

提升 Copilot Chat 的性能

Copilot Chat 可以支持问答、代码生成、代码分析和代码修复等广泛的实际应用,每种应用都有不同的性能指标和缓解策略。为提升性能并解决 Copilot Chat 的一些局限性,您可以采用多种措施。如需了解 GitHub Copilot Chat 的局限性,请参阅 GitHub Copilot Chat 的局限性

保持提示词切题

Copilot Chat 旨在专门解决与编码相关的查询。因此,将提示词限制在编程问题或任务中可以提高模型的输出质量。

将 Copilot Chat 用作工具,而非替代品

虽然 Copilot Chat 是一个强大的代码生成工具,但重要的是将其作为工具使用,而不是替代人类编程。您应始终审查和测试 Copilot Chat 生成的代码,以确保其符合您的要求,并且没有错误或安全隐患。

使用安全编码和代码审查实践

虽然 Copilot Chat 可以生成语法正确的代码,但它可能并不总是安全的。您应始终遵循安全编码的最佳实践,例如避免硬编码密码或 SQL 注入漏洞,并遵循代码审查最佳实践,以应对 Copilot Chat 的局限性。

提供反馈

注意

向 GitHub 提交关于 Copilot 拉取请求摘要的反馈功能取决于企业设置。详情请参阅 在企业中管理 GitHub Copilot 的策略和功能

如果您在 GitHub 中使用 Copilot Chat 时遇到任何问题或限制,建议通过点击每条聊天响应下方的倒赞图标来提供反馈。这有助于开发者改进该工具并解决相关问题或限制。

保持更新

Copilot Chat 是一项新技术,可能会随时间演进。对于 GitHub 中的 GitHub Copilot Chat,您始终可以使用最新的产品体验。您应及时关注可能出现的新安全风险或最佳实践。

GitHub Copilot Chat 的局限性

受代码库和输入数据等因素影响,您在使用 Copilot Chat 时可能会遇到不同水平的性能。以下信息旨在帮助您了解适用于 Copilot Chat 的系统局限性和性能关键概念。

范围有限

Copilot Chat 虽然在大规模代码库上进行了训练,但其范围仍然有限,可能无法处理更复杂的代码结构或冷门的编程语言。对于每种语言,您收到的建议质量可能取决于该语言训练数据的数量和多样性。例如,JavaScript 在公共存储库中得到了很好的体现,是 GitHub Copilot 支持最好的语言之一。在公共存储库中代表性较少的语言可能会使 Copilot Chat 提供协助更具挑战性。此外,Copilot Chat 只能根据正在编写的代码上下文提供代码建议,因此它可能无法识别更大的设计或架构问题。

潜在偏见

Copilot 的训练数据(来源于现有代码仓库)以及大型语言模型收集的上下文(例如 Bing 搜索结果)可能包含偏见和错误,工具可能会放大这些问题。此外,Copilot Chat 可能偏向某些编程语言或编码风格,导致建议的代码次佳或不完整。

安全风险

Copilot Chat 根据正在编写的代码上下文生成代码,如果使用不慎,可能会暴露敏感信息或漏洞。在使用 Copilot Chat 为安全敏感型应用程序生成代码时,您应小心谨慎,并始终彻底审查和测试生成的代码。

与公共代码匹配

Copilot Chat 能够生成新代码,它以概率方式进行。虽然生成与训练集代码匹配的代码概率较低,但 Copilot Chat 的建议可能包含一些与训练集代码匹配的代码片段。

如果您已禁用匹配公共代码的建议,Copilot Chat 会使用过滤器,防止显示与 GitHub 公共仓库中代码相匹配的内容。但您仍需像处理任何使用非原创材料的代码一样,采取相同的预防措施,确保其适用性,包括严格的测试、知识产权扫描以及安全漏洞检查。

如果您已启用匹配公共代码的建议,Copilot Chat 在发现匹配代码时会显示一条信息。该信息包含包含匹配代码的 GitHub 仓库链接以及找到的许可证详情。更多信息,请参阅 查找与 GitHub Copilot 建议匹配的公共代码

代码不准确

Copilot Chat 的局限性之一是它可能会生成看似有效但实际上在语义或语法上不正确,或者可能无法准确反映开发者意图的代码。为了减轻不准确代码的风险,您应仔细审查和测试生成的代码,尤其是在处理关键或敏感应用程序时。您还应确保生成的代码遵循最佳实践和设计模式,并符合代码库的整体架构和风格。

非编程主题的回复不准确

Copilot Chat 并非设计用于回答非编程问题,因此其在这些语境下的回答可能并不总是准确或有帮助的。如果用户向 Copilot Chat 提问非编程问题,它可能会生成无关或无意义的回答,或者仅仅表示它无法提供有用的回复。

利用网络搜索来回答问题

根据您提出的问题,GitHub Copilot Chat 可以选择使用 Bing 搜索来帮助回答。对于近期事件、新趋势或技术、极其特定的主题,或用户明确请求进行网络搜索的情况,Chat 会使用 Bing。您的 GitHub Enterprise 管理员可以为整个企业启用 Bing,或将此决定委托给组织管理员。更多信息,请参阅 在企业中管理 GitHub Copilot 的策略和功能

在利用 Bing 时,Copilot 将使用您的提示内容以及其他可用的上下文,代表您生成 Bing 搜索查询并发送到 Bing 搜索 API。Copilot 会在响应中提供搜索结果的链接。发送到 Bing 的搜索查询受 Microsoft 隐私声明的约束。

在 GitHub Copilot 中使用自带密钥 (BYOK)

当您在 GitHub Copilot Chat 中使用自带密钥时,您可以将聊天体验连接到默认 Copilot 模型以外的受支持提供商的大语言模型。受支持的提供商示例包括 Anthropic、AWS Bedrock、Google AI Studio、Microsoft Foundry、OpenAI、兼容 OpenAI 的提供商以及 xAI。您可以直接在 Copilot 设置中添加所选提供商的 API 密钥。

当 BYOK 激活时

  • 功能范围:您选择的模型用于 GitHub Copilot Chat 中。在 Agent 模式下,BYOK 为主要对话提供动力,但某些操作(如代码应用或其他工具调用)可能仍使用针对这些任务优化的 GitHub 托管模型。这些内置模型不通过您的 BYOK 提供商运行。
  • 安全流程:无论哪个提供商处于激活状态,响应在显示给您之前仍会通过 GitHub 的安全系统,包括内容过滤。
  • 质量考量:建议可能会根据您选择的提供商的长处和培训覆盖范围而有所不同。
  • 数据处理:使用 BYOK 时,您的提示和响应将传输到您选择的提供商,并可能受该提供商的数据保留和隐私政策的约束。GitHub 暂时处理这些数据以进行安全过滤,但不会在会话持续时间之外保留 BYOK 对话内容。
  • 您的责任:您负责以下事项
    • 提供商 API 密钥的安全性
    • 使用成本或配额
    • 输出验证
    • 评估您选择的模型是否符合您的安全和质量要求
    • 遵守您选择的提供商的条款
    • 确定您选择的模型是否符合适用法律
    • 确保在将任何输出用于做出影响人的决策之前,由人工进行审查
  • 出口限制:某些 AI 模型可能会受到出口管制。请确认您选择的提供商和模型在您的司法管辖区内已被授权使用。

BYOK 使您的组织能够选择最适合您需求的语言模型,同时受益于 GitHub 的安全基础设施。请注意,模型的性能和安全特性取决于提供商。

后续步骤

有关在 GitHub 中使用 GitHub Copilot Chat 的详细信息,请参阅

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.