GitHub Copilot 的工作原理

今天我们要讲的是

Index 是为想要了解大规模构建搜索、分析和人工智能应用程序的后端工程师举办的会议。

今年的一些会谈将涵盖:

  • 元是如何构建的 FAISS (流行的矢量搜索库) 作者:Matthijs Douze,Meta AI Research 研究科学家、FAISS 联合创始人

  • DoorDash 的购物推荐系统如何运作 作者:Sudeep Das,DoorDash 机器学习和人工智能主管

  • Netflix 用于为主页提供服务的在线数据系统背后的技术 作者:Shriya Arora,Netflix 工程经理

  • Uber Eats 优食推荐系统的架构 作者:Bo Ling,Uber 高级软件机器学习工程师

您可以通过 Zoom 虚拟参加会议,也可以亲自前往加利福尼亚州山景城的计算机历史博物馆参加。

如果您是一名后端工程师并且也是一名出色的工程师,那么这将是一次奇妙的学习经历 交流机会

加入完全免费!

GitHub copilot 是一款代码补全工具,可帮助您提高工作效率。 它会分析您的代码并在您键入时为您提供内联建议。 它还具有一个聊天界面,您可以使用它询问有关代码库的问题、生成文档、重构代码等。

Copilot 被超过 30,000 个组织的超过 150 万开发人员使用。 它可以作为编辑器的插件; 您可以将其添加到 VSCode、Vim、JetBrains IDE 等,

Ryan J. Salva 是 GitHub 的产品副总裁,四年多来他一直在帮助领导公司的人工智能战略。 几个月前,他在 YOW! 大会上发表了精彩的演讲! 会议上,他深入研究了 Copilot 的工作原理。

我们将总结这次演讲并添加一些额外的背景信息。

GitHub Copilot 的工作原理

GitHub 与 OpenAI 合作,使用 GPT-3.5 和 GPT-4 API 来生成代码建议和处理问答任务。

GitHub 团队需要解决的关键问题是如何从这些 GPT 模型中获得最佳输出。

Copilot 需要执行几个步骤来执行此操作

  1. 使用代码编辑器中的上下文创建输入提示:Copilot 需要收集所有相关的代码片段并将其合并到提示中。 它持续监视您的光标位置并分析其周围的代码结构,包括光标所在的当前行以及相关的函数/类范围。

    Copilot 还将分析任何打开的编辑器选项卡,并通过执行雅可比差分算法来识别相关代码片段。

  2. 将输入提示发送到代理进行清理: 一旦 Copilot 收集了提示的相关内容,就会将其发送到 GitHub 上的后端服务。 该服务通过删除用户的任何有毒内容、阻止与软件工程无关的提示、检查提示黑客/注入等来清理输入。

  3. 将清理后的输入提示发送到 ChatGPT API:清理用户提示后,Copilot 将其传递给 ChatGPT。 对于代码完成任务(Copilot 在您编程时建议代码片段),GitHub 要求非常低的延迟,目标是在 300-400 毫秒内响应。 因此,他们为此使用了 GPT-3.5 Turbo。

    对于对话式AI机器人,GitHub可以容忍更高的延迟,并且他们需要更多的智能,因此他们使用GPT-4。

  4. 将 ChatGPT 的输出发送到代理以进行额外的清理ChatGPT 模型的输出首先发送到 GitHub 上的后端服务。 该服务负责检查代码质量并识别任何潜在的安全漏洞。

    它还会获取任何超过 150 个字符的代码片段,并检查它们是否是 GitHub 上任何存储库的逐字副本(检查他们没有违反任何代码许可证)。 GitHub 为所有存储库中存储的所有代码建立了索引,以便他们可以非常快速地运行此搜索。

  5. 在代码编辑器中将清理后的输出提供给用户 – 最后,GitHub 将代码建议返回给用户,并显示在他们的编辑器中。

扩展上下文窗口

在上一节中,我们刚刚讨论了使用代码编辑器中打开的不同选项卡中的上下文。

然而,有 一吨 可以添加到提示中的其他信息,以便生成更好的代码建议和聊天回复。 有用的上下文还可以包括诸如

  • 目录树 – 项目内文件和文件夹的层次结构和组织

  • 航站楼信息 – 执行的命令、构建日志、系统输出

  • 构建输出 – 并发症结果、错误消息、警告

Copilot 允许您使用诸如以下元素的标记 @workspace 将这些来源的信息提取到您的提示中。

还有大量其他上下文可能会有所帮助,例如文档、其他存储库、GitHub 问题等。

为了将此信息合并到提示中,Copilot 使用 检索增强生成 (RAG)

使用 RAG,您可以获取可能对提示有用的任何其他上下文,并将其存储在数据库(通常是矢量数据库)中。

当用户输入 LLM 的提示时,系统首先在数据库语料库中搜索任何相关信息,并将其与原始用户提示相结合。

然后,组合提示被输入到大语言模型中。 这可以带来明显更好的反应,也大大减少法学硕士的幻觉(LLM只是编造一些东西)。

Copilot 计划的另一个功能是扩展上下文窗口,即插件。 这允许 Copilot 调用另一个 API/服务来收集数据并执行操作。

例如,假设您收到有关服务中断的通知。 您可以要求 Copilot 检查 Datadog 并检索过去一小时内的严重错误列表。 然后,您可能会要求 Copilot 查找拉取请求以及导致这些错误的代码路径的作者。

注意 – 这是 Ryan 在演讲中谈论的内容,但我不确定 Copilot 中特工的当前状态。 我个人无法使用它,也无法在文档中找到与此相关的任何内容。 如果您有这方面的经验,请告诉我,我可以更新帖子!

具有微调功能的定制模型

之前我们讨论的是 提示 – 生成更好的提示,ChatGPT 可使用该提示生成更相关的响应。

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

一些场景进行微调是有用的,包括

  • 风格偏好 – 团队可能有特定的编码风格、命名约定、格式指南等。使用 ChatGPT 的微调版本将使 Copilot 能够遵循这些规则。

  • API/SDK版本 – 团队可能正在使用特定版本的 API/SDK。 ChatGPT 模型可以在使用目标版本的代码库上进行微调,以提供针对特定开发环境兼容和优化的建议。

  • 专有代码库 – 一些公司拥有专有代码库,但使用了公众无法获得的技术。 微调 ChatGPT 使其能够学习这些代码库的模式,以获得更相关的建议。

Index 是为想要了解大规模构建搜索、分析和人工智能应用程序的后端工程师举办的会议。

今年的一些会谈将涵盖:

  • 元是如何构建的 FAISS (流行的矢量搜索库) 作者:Matthijs Douze,Meta AI Research 研究科学家、FAISS 联合创始人

  • DoorDash 的购物推荐系统如何运作 作者:Sudeep Das,DoorDash 机器学习和人工智能主管

  • Netflix 用于为主页提供服务的在线数据系统背后的技术 作者:Shriya Arora,Netflix 工程经理

  • Uber Eats 优食推荐系统的架构 作者:Bo Ling,Uber 高级软件机器学习工程师

您可以通过 Zoom 虚拟参加会议,也可以亲自前往加利福尼亚州山景城的计算机历史博物馆参加。

如果您是一名后端工程师并且也是一名出色的工程师,那么这将是一次奇妙的学习经历 交流机会

加入完全免费!

订阅 Quastor Pro,获取有关系统设计和后端工程概念的长篇文章。

往期文章内容包括

  • 衡量可用性

  • API网关

  • 数据库复制

  • 负载均衡

  • API范式

  • 数据库分片

  • 缓存策略

  • 事件驱动系统

  • 数据库一致性

  • 混沌工程

  • 分布式共识

  • 雷迪斯

  • Postgres

  • 卡夫卡

  • 动态数据库

  • 远程过程调用

  • 阿帕奇火花

  • HTTP协议

  • 域名系统

  • B 树和 LSM 树

  • 联机分析处理数据库

  • 数据库引擎

订阅时,您还将获得间隔重复 (Anki) 抽认卡,用于回顾过去 Quastor 文章中讨论的所有主要概念

《高效执行官》是彼得·德鲁克的一本精彩著作,书中充满了关于专业人士如何最大限度地提高效率的永恒智慧。 该书于20世纪60年代首次出版,50年来不断被推荐和阅读。

我们将总结本书中的原则并提供一些额外的背景信息。

“衡量什么就完成什么”

彼得·德鲁克

有效性是可以学习的

本书的首要原则之一是“有效性”以及它如何 不是天生的。 相反,“高效”是需要学习和培养的,就像任何其他习惯一样。

高效取决于几个关键能力

  1. 了解你的时间都去哪儿了

  2. 调整你的行动以取得结果

  3. 专注于优势

  4. 专注于回报丰厚的领域

了解你的时间都去哪儿了

不要从你的任务/计划开始,而是从你的时间开始,弄清楚它的去向。

三步过程是

  1. 记录 – 记录您的日常活动,并记下您一天中在每项任务上花费的时间。 尝试实时执行此操作,因为在一天结束时尝试回忆可能不可靠。 尝试这样做至少一周。

  2. 管理 – 记录您的时间后,分析数据并识别模式、时间浪费和需要改进的地方。 这可能相当困难,但试着找到可以委派的领域,看看为什么你的一天会出现干扰。

  3. 巩固 – 将你的时间整合成更大的、不间断的块。 最重要的工作需要持续集中注意力,只有当你有大量的时间投入其中时,这才有可能实现。 不断地在任务之间切换使得在重要优先事项上取得有意义的进展变得极其困难。

专注于优势

将你的心态转变为寻找优势并帮助人们利用它们是至关重要的。 不要基于最小化弱点而做出人员配置决策,而是基于最大化优势。

让优势发挥作用是一种心态和一个持续的过程,而不是单一的见解或技术。 你必须勤奋地练习这一点。

专注于一项任务

这里将 总是 比可用时间更多的机会和任务。 你的工作是确定什么是真正重要的。

您需要避免陷入事件的发展之中,并让短期需求决定您的所有优先事项。 您应该挑战关于什么是真正重要或紧急的假设。 许多“危机”和火灾都是可以通过远见来预见和预防的。

随着时间的推移,你应该培养专注于一些重要优先事项的纪律,并给予他们所需的时间和注意力。

做出有效的决策

你的职位越高,你的效率就越取决于你的决策能力。 善于决策是一个系统的过程,需要随着时间的推移而磨练。

在书中,德鲁克谈到了决策过程的五个要素。

  1. 通用或特殊 – 确定这种情况是普遍情况还是特殊情况。 如果它是通用的,那么您可以依靠过去的经验或针对这种情况的规则。 否则,您将不得不花更多的心思来采取正确的行动。

  2. 目标 – 确定决策必须实现的目标。 是否有任何限制(预算、时间等)?

  3. 制定正确的行动 – 根据前两个要素,确定正确的行动方案。 您应该关注长期影响并确保它是 正确的 行动方针,而不仅仅是可以接受和“听起来不错”的事情。

  4. 确定如何实施 – 谁必须知道该决定? 究竟需要采取什么行动? 激励措施是否设置得当?

  5. 建立反馈机制 – 必须有一些明确的方法来衡量结果并查看决策的进展。 衡量的事情就完成了。

Leave a Reply

Your email address will not be published. Required fields are marked *

近期新闻​

编辑精选​