作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《系统掌握大语言模型提示词 - 从理论到实践》 作者、《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
热门专栏推荐:
- (1)《系统掌握大语言模型提示词 - 从理论到实践》
热门文章推荐:
- (1)《为什么很多人工作 3 年 却只有 1 年经验?》
- (2)《一文掌握大模型提示词技巧:从战略到战术巧》
- (3)《AI 时代,程序员的出路在何方?》
- (4)《如何写出高质量的文章:从战略到战术》
- (5)《我的技术学习方法论》
- (6)《我的性能方法论》
- (7)《AI 时代的学习方式: 和文档对话》
GitHub Copilot 是一个代码补全工具,它会分析你的代码并在你输入时提供行内建议。
它还提供一个聊天界面,帮助你询问代码库的问题、生成文档、重构代码等。你可以在这里阅读博客。
在这篇博客中,我们将深入探讨在你编写代码时发生了什么,试图了解其工作原理。了解 Copilot 的内部工作机制可以帮助你更高效地使用它。
我们将把系统分为三个组件:代码编辑器、代理服务器(GitHub 服务器)和模型,并逐一了解每个组件。
代码编辑器
在代码补全的情况下,Copilot 不断监控光标位置并分析周围的代码,将所有代码拆分为标记,并对打开的所有其他标签执行 Jacobian 差分算法。
Jacobian 差分算法基本上是比较两段内容的维恩图,这有助于 Copilot 知道哪些代码部分高度重叠或引用相同的变量名和方法名,从而能够组装一个混合了相关内容的提示。编写一个好的提示至关重要,因为它有助于模型获得领域专长。
在聊天界面的情况下,可以在提示中添加其他信息以生成更好的代码建议和聊天回复。一些有用的上下文包括:
- 目录树:项目中文件和文件夹的层次结构和组织
- 终端信息:执行的命令、构建日志、系统输出
- 构建输出:编译结果、错误消息、警告
Copilot 还允许你使用 @Workspace 等标签将这些来源的信息拉入提示中。在即将到来的部分中,我们将看到更多有用的附加上下文。
代理服务
代理服务执行两项操作:
- 预处理
- 后处理
预处理
从代码编辑器获取相关数据后,这些数据会发送到 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
作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《系统掌握大语言模型提示词 - 从理论到实践》 作者、《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。
热门专栏推荐:
- (1)《系统掌握大语言模型提示词 - 从理论到实践》
热门文章推荐:
- (1)《为什么很多人工作 3 年 却只有 1 年经验?》
- (2)《一文掌握大模型提示词技巧:从战略到战术巧》
- (3)《AI 时代,程序员的出路在何方?》
- (4)《如何写出高质量的文章:从战略到战术》
- (5)《我的技术学习方法论》
- (6)《我的性能方法论》
- (7)《AI 时代的学习方式: 和文档对话》
GitHub Copilot 是一个代码补全工具,它会分析你的代码并在你输入时提供行内建议。
它还提供一个聊天界面,帮助你询问代码库的问题、生成文档、重构代码等。你可以在这里阅读博客。
在这篇博客中,我们将深入探讨在你编写代码时发生了什么,试图了解其工作原理。了解 Copilot 的内部工作机制可以帮助你更高效地使用它。
我们将把系统分为三个组件:代码编辑器、代理服务器(GitHub 服务器)和模型,并逐一了解每个组件。
代码编辑器
在代码补全的情况下,Copilot 不断监控光标位置并分析周围的代码,将所有代码拆分为标记,并对打开的所有其他标签执行 Jacobian 差分算法。
Jacobian 差分算法基本上是比较两段内容的维恩图,这有助于 Copilot 知道哪些代码部分高度重叠或引用相同的变量名和方法名,从而能够组装一个混合了相关内容的提示。编写一个好的提示至关重要,因为它有助于模型获得领域专长。
在聊天界面的情况下,可以在提示中添加其他信息以生成更好的代码建议和聊天回复。一些有用的上下文包括:
- 目录树:项目中文件和文件夹的层次结构和组织
- 终端信息:执行的命令、构建日志、系统输出
- 构建输出:编译结果、错误消息、警告
Copilot 还允许你使用 @Workspace 等标签将这些来源的信息拉入提示中。在即将到来的部分中,我们将看到更多有用的附加上下文。
代理服务
代理服务执行两项操作:
- 预处理
- 后处理
预处理
从代码编辑器获取相关数据后,这些数据会发送到 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