注意
当前正在查看免费、专业和团队计划的文档。 GitHub Copilot Enterprise 仅适用于计划中的 GitHub Enterprise Cloud 客户。 有关 Copilot Enterprise 的完整文档,请参阅 GitHub Enterprise Cloud 文档中的 什么是GitHub Copilot?。
什么是应用程序卡?
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 内联建议会在你工作时提供类似自动补全的建议。 这些建议以内联方式显示在编辑器或 GitHub.com 的文本字段中,帮助你更快地编写代码和拉取请求说明。
Copilot内联建议分为两种形式:
- IDE 内联建议:在受支持的编辑器中键入代码时,Copilot自动提供内联建议来完成当前行、生成新代码块或建议对现有代码的编辑。 这些建议可能包括预测下一次编辑的位置以及应进行哪些编辑,包括删除、修改或插入代码。 可以接受建议的全部或部分内容、将其消除或继续键入以忽略它。 内联建议可在多种编程语言和框架中使用。
- 拉取请求文本补全:当你在 GitHub.com 上输入拉取请求描述时稍作停顿,Copilot 会建议后续文本,以延续你的思路。 该建议基于拉取请求标题、现有描述文本、提交标题、部分差异内容,以及最近查看的拉取请求和议题标题。 可以通过按 Tab 或继续键入来拒绝该建议。
拉取请求文本补全功能主要支持的语言是英语。 行内建议支持多种编程语言,其质量取决于各语言可用训练数据的数量和多样性。
2. 关键术语
以下列表提供了与GitHub Copilot内联建议相关的关键术语词汇表:
- 内容筛选:在向用户显示内容之前,扫描提示和响应以检测和阻止有害、冒犯性或不安全内容的安全系统。
- 幻觉:指一种现象,即语言模型生成的内容听起来似乎合理,但实际上与事实不符、没有得到所提供上下文的支持,或完全是捏造的。 幻觉是大型语言模型的已知风险,是人类对 AI 生成的输出进行评审的重要原因。
- 内联建议:Copilot 提供的 AI 生成代码建议,会在你键入时显示在编辑器中。 内联建议可以完成当前行,也可以通过预测下一个更改的发生位置以及应发生哪些更改(包括插入、修改或删除代码)来建议对现有代码进行编辑。 建议可能出现在光标处,也可能将用户引导至代码库中的其他相关位置;这些建议可以被接受、拒绝,或者通过继续键入而被忽略。
- 大型语言模型(LLM):基于大量文本数据训练的神经网络,可以生成、分析和转换自然语言和代码。 Copilot 的内联建议使用一个或多个大语言模型(LLM)来处理上下文并生成建议。
- 公共代码匹配:一项安全功能,用于检查Copilot的建议是否与公开可用的代码匹配。 根据你的设置,匹配的建议会被屏蔽,或者附带对源代码仓库及任何许可证信息的说明。
- 拉取请求文本补全:GitHub.com 上针对拉取请求描述的类似自动补全的建议。 当你在键入时暂停,Copilot 会根据拉取请求的上下文建议文本内容,以延续你的思路。
- 训练数据:用于训练Copilot内联建议背后的基础模型的大量公开可用文本和代码。 训练数据的组合会影响模型在不同编程语言、框架和主题中建议的质量和覆盖面。
3. 主要特性或功能
此处概述的关键功能与能力说明了 GitHub Copilot 内联建议旨在实现的功能,以及其在受支持任务中的表现。
- 内联代码建议:在受支持的编辑器中键入代码时,Copilot会自动提供内联建议,这些建议可以完成当前行、生成新代码块或建议对现有代码进行编辑。 这些建议可能包括插入、修改或删除代码、代码注释、测试等,方法是预测应进行哪些更改,以及应在代码库中发生的位置。 建议可能显示在光标处,或引导用户前往其他相关的编辑位置;用户可以全部或部分接受建议,也可以将其关闭,或通过继续键入来忽略它们。
- 注释驱动代码生成:可以通过编写描述预期代码的代码注释来指导内联建议。 例如,“使用递归”或“使用单例模式”等注释会影响 Copilot 建议采用的算法类型。
- 多语言支持:内联建议适用于各种编程语言和框架。 建议的质量取决于每种语言可用的训练数据的量和多样性。 有关在 GitHub 上找到的主动开发的编程语言的列表,请参阅 Programming 语言。
- 拉取请求文本补全:当你在 GitHub.com 上编写拉取请求说明时停顿下来,Copilot 会建议后续文本,以延续你的思路。 该建议综合参考了拉取请求标题、现有描述文本、提交标题、部分差异内容,以及最近查看的拉取请求和议题标题。
4. 预期用途
GitHub Copilot 内联建议可用于多个行业中的多种场景。 用例的一些示例包括:
- 加速代码编写:开发人员可以使用内联建议,在输入时接受预测的更改,从而提高工作效率,包括补全代码、生成新的代码块或修改现有代码。 建议可以跨当前行或文件中的其他相关位置插入、更新或删除代码,方法是预期应进行哪些更改,以及应在哪里进行更改。 这对于样本代码、重复模式、常见成语以及随着代码在支持的语言和框架中的发展而保持一致性特别有用。
- 生成单元测试:Copilot可以根据周围的代码(包括可能的输入参数、预期输出值和断言)来建议测试用例。 这有助于开发人员更快地创建测试覆盖范围,包括可能难以手动识别的边缘事例和边界条件。 仍应查看生成的测试,因为它们可能未涵盖所有方案。
- 通过注释引导代码生成:开发人员可以使用自然语言注释描述他们需要的代码,而 Copilot 会生成对应的实现或修改。 这可用于指定要添加到类的算法、设计模式或方法和属性。
- 起草拉取请求说明:在 GitHub.com 上撰写拉取请求说明时,Copilot 可以建议后续文本以延续你的思路,帮助你更快地清晰概述所做的更改。
5. 模型和训练数据
GitHub Copilot内联建议利用各种 AI 模型为用户看到的体验提供支持。 有关可用于Copilot的模型的比较,请参阅 AI 模型比较。 有关支持模型的完整列表,请参阅 GitHub Copilot中支持的 AI 模型。 有关托管模型的位置的信息,请参阅 托管用于GitHub Copilot的模型。 若要详细了解用于训练 GitHub Copilot 内联建议所依托的基础模型的数据,请参阅上方链接的 AI 模型比较内容,以及 GitHub Copilot 常见问题解答中的 GitHub Copilot 是基于哪些数据训练的?
拉取请求文本完成使用简单的提示流,利用具有泛型大型语言模型的 Copilot API。 此功能未使用任何额外的已训练模型。
6. 性能
Copilot 内联建议的工作原理是结合自然语言处理和机器学习来理解你当前的上下文,并给出建议。 此过程遵循一致的管道:
- 输入处理:来自光标位置的周围代码由内联建议系统预先处理,并结合上下文信息(如编辑器中打开的选项卡的代码片段),并以提示的形式发送到大型语言模型。 有关数据保留的信息,请参阅 Copilot 信任中心。
- 语言模型分析:大型语言模型处理输入提示。 对于内联建议,模型根据编辑器中当前和打开文件的上下文生成内联建议和预测编辑,包括插入、修改或删除代码,方法是预测应做出哪些更改以及发生更改的位置。 对于拉取请求的文本补全,Copilot 通过 Copilot API 调用语言模型。
- 响应生成:语言模型基于对输入提示和提供的上下文的分析生成响应。 对于内联建议,其形式可能包括补全代码、生成新的代码块,或建议对现有代码进行修改(包括删除),即预测应进行哪些编辑,以及这些编辑应在代码库中的何处进行。 对于拉取请求文本补全,响应是对描述内容的文字续写。
- 输出格式:响应在编辑器中以内联方式显示为建议修改,并在视觉上与周围内容区分开来。 建议可能会显示在光标处或附近,还会突出显示代码库中其他与建议修改相关的位置;只有在你明确接受这些建议后,它们才会应用到文件或文本字段中。
Copilot内联建议旨在提供最相关的有用建议来增强现有工作。 但是,他们可能并不总是提供你正在寻找的答案。 用户在接受建议之前负责查看和验证建议,以确保它们准确且合适。 作为产品开发过程的一部分,生成的建议通过内容筛选器运行。 内容筛选系统检测并阻止有害或冒犯性内容,或不安全的代码。 根据GitHub设置,筛选器还会阻止或注释包含与公共代码匹配的建议。
经验差异
内联建议(IDE)
内联建议使用了针对该任务专门优化的微调语言模型。 他们会分析你当前正在处理的代码周边内容,以及来自代码库和用户系统的上下文。 根据此分析,系统可以完成代码、生成新块或建议对现有代码进行编辑(包括删除),方法是预测应进行哪些更改,以及应在代码库中发生的位置。 系统仅用于协助编码任务。
拉取请求文本完成(GitHub.com)
拉取请求文本完成使用简单的提示流,利用具有泛型大型语言模型的 Copilot API。 当你在输入拉取请求描述时停顿下来,系统会结合拉取请求标题、现有描述文本、提交标题、部分差异内容,以及最近查看的拉取请求和议题标题,建议能够延续你当前思路的文本内容。 支持的主要语言是英语。
7. 限制
了解 GitHub Copilot 内联建议的局限性,对于确保其使用处于安全且有效的边界内至关重要。 虽然我们鼓励客户在其创新解决方案或应用程序中利用Copilot内联建议,但请务必注意,Copilot内联建议并非针对每种可能的方案而设计。 我们建议用户在选择用例时参考 GitHub 条款 以及以下注意事项:
- 适用范围有限:内联建议虽然基于海量代码进行训练,但其适用范围仍然有限,可能无法处理更复杂的代码结构或较冷门的编程语言。 对于每种语言,建议的质量取决于该语言的训练数据的量和多样性。 例如,JavaScript 在公共存储库中表示良好,是受支持的最佳语言之一。 在公共存储库中得到较少支持的语言,可能更难以提供协助。 此外,内联建议只能根据正在编写的代码上下文提出代码建议,因此可能无法识别更宏观的设计或架构问题。 内联建议旨在生成代码和与代码相关的输出,而不是自然语言输出。
- 潜在偏差:Copilot 的训练数据来源可能包含偏差和错误,而这些偏差和错误可能会被该工具延续下去。 此外,内联建议可能偏向于某些编程语言或编码样式,这可能会导致代码建议欠佳或不完整。
- 安全风险:Copilot基于所编写代码的上下文生成代码,如果未仔细使用,可能会公开敏感信息或漏洞。 使用Copilot为安全敏感应用程序生成代码时,应小心谨慎,并始终全面查看和测试生成的代码。
- 与公共代码匹配:内联建议能够生成新代码,而这一过程是以概率方式进行的。 虽然概率较低,但Copilot可能会生成与训练集中的代码匹配的代码建议。
- 不准确的代码:Copilot 可能会生成看似有效的代码,但这些代码实际上不一定在语义或语法上正确,也可能无法准确反映开发者的意图。 若要降低代码不准确的风险,应仔细评审和测试生成的代码,尤其是在处理关键或敏感应用程序时。 还应确保生成的代码遵循最佳做法和设计模式,并符合代码库的整体体系结构和样式。
- 较大的拉取请求可能会降低建议质量:对于非常大的拉取请求,Copilot 用于文本补全所依赖的部分拉取请求内容可能无法包含在 API 调用中。 因此,你原本预期会出现的某些建议可能不会显示出来,或者与上下文的契合度没那么高。
- 拉取请求文本补全中的幻觉风险:由于拉取请求文本补全由大型语言模型生成,因此存在幻觉风险——也就是说,Copilot 可能会生成看似合理但与事实不符的表述。 在发布之前仔细查看生成的文本至关重要。
- 拉取请求内容的复用:拉取请求文本补全基于拉取请求本身的内容。 如果拉取请求内容中出现有害或冒犯性术语(如提交消息或差异),则建议也可能包含这些条款。
- 语言支持:拉取请求文本完成的主要支持语言是英语。 行内建议支持多种编程语言,其质量取决于各语言可用训练数据的数量和多样性。
8. 评估
性能和安全评估通过检查基础性、相关性和一致性等因素来评估 AI 应用程序是否安全可靠地运行,同时识别生成有害内容的风险。 以下评估是在安全组件已就位的情况下进行的,这些组件也在9. 安全组件和缓解措施中进行了说明。
性能和质量评估
GitHub Copilot 的内联建议通过一个多层次的离线和在线评估体系进行评估,该体系旨在评估建议的质量、相关性以及对开发者的价值。 该系统还旨在实现快速模型迭代,同时保持高质量标准。
性能和质量评估方法
对于脱机评估,我们使用一组特选的测试套件,涵盖跨多种编程语言的关键内联建议方案。 根据预期输出评估模型,以检测核心行为(如代码正确性和上下文相关性)中的回归。 我们还通过评估输出质量、一致性和与开发人员意图的一致性,将候选模型与生产基线进行比较。
对于联机评估,我们将候选模型部署到受控用户段,以测量验收率、显示速率、编辑质量和保留期。
我们的评估将跟踪延迟、令牌使用情况和计算占用量以及质量指标,以确保模型在操作约束中提供价值。
我们还借助 Microsoft 和 GitHub 内部开发人员的实际经验,在真实开发条件下评估候选模型,并在更广泛推广之前,就边缘情况行为提供定性反馈和早期预警信号。
风险和安全评估
评估与 AI 生成内容相关的潜在风险对于防范不同程度严重性的内容风险至关重要。 这包括评估 AI 应用程序生成有害内容或测试越狱攻击漏洞的倾向。 对于 GitHub,我们会进行性能评估,其中包括从 Microsoft Foundry 改编而来、用于编码的评估:
- 仇恨和不公平
- 性行为
- 暴力
- 自残
- 受保护的材料
- 越狱
- 代码漏洞
风险和安全评估方法
对抗测试:当基础模型更新或对训练数据源(如合并新类型的数据集)进行重大更改时,模型将接受安全测试,其中故意对旨在引发有害、不安全或违反策略的输出的输入提出质疑。 此测试涵盖多种风险类别,包括有害内容、知识产权风险和不安全的代码生成。 结果与生产基线进行比较,如果存在任何回归,则会进行手动评审以评估真正的风险。
质量和安全的评估数据
我们的评估数据是定制的,用于评估 AI 应用程序在安全和****质量的关键领域的性能,模拟实际场景和风险。 首先,我们根据多学科研究和专家的意见,确定相关的评估关注点。 这些关注点转化为有针对性的评估目标,并指导制定评估指标。 在安全性方面,我们会设计对抗性提示,以诱导产生不良或边缘情况响应,随后由经过训练、能够评估是否符合 GitHub 标准的 AI 辅助标注人员对这些响应进行评分。 对于质量,我们设计了基于评分标准的提示词,适用于评估检索增强生成(RAG)应用和智能体等场景。 数据集由各种来源(包括合成数据集和公共数据集)进行策展,以模拟真实用户方案。 使用特选数据集,评估都经过迭代优化和人工对齐,以提高指标有效性和可靠性。 此方法构成了可重复的严格评估的基础,这些评估反映了客户如何使用评估来构建更好的 AI。
自定义评估
Copilot 内联建议已经过 RAI 红队测试,以识别并解决潜在的安全风险。 我们将继续监视功能随时间推移的有效性和安全性。 有关详细信息,请参阅 Microsoft 安全博客上的 Microsoft AI Red Team 打造更安全 AI 的未来。
9. 安全组件和缓解措施
GitHub Copilot 内联建议采用多层安全防护架构,为整个建议生成流程提供多层保护。
- 输入和输出处理:代码上下文——包括编辑历史、周边代码和光标位置——在送达语言模型之前,会先进行结构化处理并限定范围。 该模型受限于窄任务(预测定义窗口中的下一个代码编辑),并且必须遵循严格的输出格式,只生成代码编辑而不是自由格式响应。 系统提示还会强制遵守内容策略,并强制对可能违反准则的请求做出强制拒绝响应。
- Content 和代码安全筛选器:GitHub Copilot包括旨在减少有害或不当输出的安全筛选器,并阻止滥用。 用户在使用这些建议之前,仍应先查看。
- 公共代码匹配:GitHub Copilot使用重复检测系统来识别建议何时匹配公开可用的代码。 组织和个人可以对此进行配置,以阻止匹配的建议,或提供包含存储库和许可证信息的代码引用。
- 人工监督:内联建议遵循人机循环原则,建议在视觉上与周围的内容不同,并且仅在用户明确接受它们时才应用。 没有故意的用户操作,就不会出现任何代码更改。 建议用户查看、测试和验证所有生成的建议。
10. 部署和采用GitHub Copilot内联建议的最佳做法
负责任的 AI 是GitHub与其客户之间的共同承诺。 虽然 GitHub 在构建 AI 应用时以安全、公平和透明为核心,但客户在各自的应用场景中负责任地部署和使用这些技术也发挥着关键作用。 为了支持这种合作关系,我们为部署人员和最终用户提供以下最佳做法,帮助客户有效地实现负责任的 AI。
- 在将 Copilot 建议用于重大决策或敏感领域时,请谨慎行事并评估结果: 后果性决定是可能对某人获得教育、就业、金融平台、政府福利、医疗保健、住房、保险、法律平台或可能导致身体、心理或经济伤害的人产生法律或重大影响的决定。 敏感领域(如金融平台、医疗保健和住房)需要特别照顾,因为可能会对不同人群产生不成比例的影响。 在这些领域使用 AI 做出决策时,请确保受影响的利益干系人能够了解如何做出决策、对决策提出上诉,并更新任何相关的输入数据。
- 评估法律和法规注意事项: 客户在使用任何 AI 平台和解决方案时需要评估潜在的特定法律和法规义务,这些义务可能不适合在每个行业或方案中使用。 此外,AI 平台或解决方案不设计用于适用的服务条款和相关行为准则禁止的使用方式,也不得以这些禁止的方式使用。
- 确保提示内容紧扣主题:Copilot 内联建议仅用于生成代码或与代码相关的建议。 将编辑器中的内容限制为代码或编码相关信息可以提高建议的质量。
- 为拉取请求文本完成提供良好的上下文:拉取请求文本完成建议的质量取决于请求标题的质量、提交消息以及说明中已有的任何文本。 提供清晰的描述性标题和提交消息将提高建议的相关性。 你仍有责任审查和评估你创建的拉取请求中信息的准确性。
- 将Copilot内联建议用作工具,而不是替换:虽然Copilot可能是生成代码的强大工具,但请务必将其用作工具,而不是作为人工编程的替代工具。 在接受建议之前,应始终查看Copilot的建议,并在接受建议之前对其进行进一步验证,以确保它满足你的要求,并且没有错误或安全问题。
- 适当时执行人工监督:在与 AI 应用程序交互时,人工监督是一个重要的保障措施。 虽然我们不断改进 AI 应用程序,但 AI 仍可能会出错。 生成的输出可能不准确、不完整、有偏见、未对齐或与预期目标无关。 这可能是由于各种原因导致的,例如输入不明确或基础模型的限制。 因此,用户应查看Copilot内联建议生成的响应,并验证它们是否符合预期和要求。
- 请注意过度关注的风险: 当用户接受不正确的或不完整的 AI 输出时,AI 的过度依赖会发生,这主要是因为 AI 输出中的错误可能难以检测到。 对于最终用户来说,过度信赖可能导致生产力下降、信任丧失、应用程序放弃、经济损失、心理伤害、身体伤害等。 (例如,医生接受错误的 AI 输出) 。
- 在敏感域中设计代理 AI 时,请谨慎操作: 在代理操作不可逆或高度后果的敏感域中设计和/或部署代理 AI 应用程序时,用户应谨慎行事。 创建自治代理 AI 时,还应采取其他预防措施,如 GitHub 条款 中所述。
- 使用安全编码和代码评审做法:虽然内联建议可以生成语法正确的代码,但它并不总是安全的。 应始终遵循安全编码的最佳做法,例如避免硬编码的密码或 SQL 注入漏洞,以及遵循代码评审最佳做法。
- 最新:Copilot内联建议仍是一项不断发展的技术。 应随时了解工具的任何更新或更改,以及可能出现的任何新安全风险或最佳做法。 默认情况下,在 Visual Studio Code、Visual Studio 和 JetBrains IDE 套件中启用自动扩展更新。
重要
用户须自行承担与生成代码相关的所有风险,包括但不限于安全漏洞、bug 及知识产权侵权。
11. 详细了解 GitHub Copilot 内联建议
有关负责任地使用Copilot内联建议的其他指导,建议查看以下文档: