赞
踩
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 以生成更好的响应。
微调有用的一些场景包括:
参考资料:
原文链接:https://medium.com/stackademic/behind-the-scenes-of-github-copilot-e3703971ea73
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。