admin管理员组

文章数量:1567642

GitHub Copilot 是一个代码补全工具,它会分析你的代码并在你输入时提供行内建议。

它还提供一个聊天界面,帮助你询问代码库的问题、生成文档、重构代码等。你可以在这里阅读博客。

在这篇博客中,我们将深入探讨在你编写代码时发生了什么,试图了解其工作原理。了解 Copilot 的内部工作机制可以帮助你更高效地使用它。

我们将把系统分为三个组件:代码编辑器、代理服务器(GitHub 服务器)和模型,并逐一了解每个组件。

代码编辑器

在代码补全的情况下,Copilot 不断监控光标位置并分析周围的代码,将所有代码拆分为标记,并对打开的所有其他标签执行 Jacobian 差分算法。

Jacobian 差分算法基本上是比较两段内容的维恩图,这有助于 Copilot 知道哪些代码部分高度重叠或引用相同的变量名和方法名,从而能够组装一个混合了相关内容的提示。编写一个好的提示至关重要,因为它有助于模型获得领域专长。

在聊天界面的情况下,可以在提示中添加其他信息以生成更好的代码建议和聊天回复。一些有用的上下文包括:

  • 目录树:项目中文件和文件夹的层次结构和组织
  • 终端信息:执行的命令、构建日志、系统输出
  • 构建输出:编译结果、错误消息、警告

Copilot 还允许你使用 @Workspace 等标签将这些来源的信息拉入提示中。在即将到来的部分中,我们将看到更多有用的附加上下文。

代理服务

代理服务执行两项操作:

  1. 预处理
  2. 后处理

预处理

从代码编辑器获取相关数据后,这些数据会发送到 GitHub 的后台服务,输入会经过清理,去除用户的有害内容、阻止与软件工程无关的提示、检查仇恨言论或黑客攻击或提示注入的证据。

完成这些步骤后,代理服务生成相关提示并送入模型。

模型

清理用户提示后,GitHub 的后台服务将其传递给 ChatGPT。对于代码补全任务(Copilot 在你编程时建议代码片段),为了提供最佳用户体验,GitHub 保持非常低的延迟(300-400 毫秒),因此他们使用 GPT-3.5。

对于对话式 AI 机器人,GitHub 可以容忍更高的延迟,并需要更多的智能,因此他们使用 GPT-4。在这一点上,提示也会从 GitHub 服务器中删除,因为他们不希望使用用户的专有数据。

后处理

从模型返回响应后,代理服务在将结果发送回代码编辑器之前执行后处理任务。

在此步骤中,服务再次检查有害数据、安全漏洞的证据等。GitHub 还编写了一个自定义模型,用于检查安全漏洞、个人可识别信息。

GitHub 在返回过程中还进行另一个重要步骤,即如果模型的响应超过 150 个字符,他们会将数据与 GitHub 中的所有数据(数十亿个文件)进行对比,以确保不违反任何代码许可证。GitHub 在 20-30 毫秒内完成这一工程奇迹。

响应生成并返回给用户显示在代码编辑器中后,如果用户选择该响应或不选择,该指标会发送到 GitHub 服务器。

扩展上下文窗口的另一种方式

除了从代码库、终端信息和构建输出中获取上下文之外,Copilot 还使用 检索增强生成 (RAG)

通过 RAG,可以从组织的资产中提取任何对提示有用的附加上下文,例如文档、代码和问题。

Copilot 计划的另一项功能是为插件扩展上下文窗口。这允许 Copilot 调用另一个 API 或服务以收集数据和执行操作。

例如,如果你收到有关服务中断的通知,可以请求 Copilot 检查 Datadog 并检索过去一小时的关键错误列表。然后,你可以请求 Copilot 查找导致这些错误的代码路径的拉取请求和作者。

使用微调的自定义模型

GitHub 还为企业提供自定义模型。更具体地说,他们可以微调 ChatGPT 以生成更好的响应。

微调有用的一些场景包括:

  • 风格偏好:团队可能有特定的编码风格、命名约定、格式指南等。使用微调版本的 ChatGPT 将使 Copilot 遵循这些规则。
  • API/SDK 版本:团队可能正在使用特定版本的 API/SDK。ChatGPT 模型可以在使用目标版本的代码库上进行微调,以提供兼容并优化特定开发环境的建议。
  • 专有代码库:一些公司有使用不公开技术的专有代码库。微调 ChatGPT 可以让它学习这些代码库的模式,从而提供更相关的建议。

参考资料:

  • YouTube
  • 维基百科
  • GitHub Copilot 计划

原文链接:https://medium/stackademic/behind-the-scenes-of-github-copilot-e3703971ea73

本文标签: 帮你高效工作原理GitHubCopilot