把握行业变革关键节点,12 月 19 日 - 20 日,AICon北京站即将重磅启幕! 了解详情
写点什么

GitHub 基于大语言模型构建 Copilot 的经验和教训

作者:Matt Saunders

  • 2023-10-10
    北京
  • 本文字数:1375 字

    阅读完需:约 5 分钟

大小:748.24K时长:04:15
GitHub基于大语言模型构建Copilot的经验和教训

GitHub在一篇文章中分享了他们在构建和扩展GitHub Copilot——一个使用大语言模型的企业应用——过程中所学到的经验教训。


在 GitHub 的一篇博文中,GitHub 的 AI 产品负责人Shuyin Zhao描述了他们如何在三年多的时间里历经三个阶段——“Find it”、“Nail it”和“Scale it”——成功推出了 GitHub Copilot。


在“Find it”阶段,他们专注于找到 AI 可以有效解决的问题,通过一种足够专注的方式快速推向市场,并且足以产生影响。


这包括确定到底是为了谁而解决问题——帮助开发人员更快地编写代码,减少上下文切换。此外,他们只关注SDLC的一部分:IDE中的编码功能,并结合当下的 LLM 的能力。这样他们就可以专注于让工具提供代码建议,而不是生成全部代码。他们还致力于确保他们所做的是对现有工具进行增强,不要求开发人员改变已有的工作流程。


“在设计产品时,我们不仅要考虑输出需要人类进行评估的模型,也要考虑正在学习如何与 AI 互动的人类。”


——Idan Gazit,GitHub Next 高级研发总监


在“Nail it”阶段,他们基于从A/B测试中获得的真实用户反馈进行迭代式产品开发。他们进行快速迭代、试错和学习。在使用 Copilot 的 Web 接口进行了简短的实验后,他们将重点转向了 IDE,以减少在编辑器和 Web 浏览器之间切换,并让 AI 在后台运行。在进一步的迭代中,通过观察开发人员在编码时打开的多个 IDE 选项卡,GitHub Copilot 可以同时处理多个文件。


随着生成式 AI 的迅速发展,他们开始重新审视过去所做出的决策,技术的进步和用户对它的熟悉程度有时会让过去的决策变得过时。于是,提供交互式聊天的想法开始活跃起来,他们需要基于沉没成本谬论改变决策,例如,当大语言模型的进步允许一个模型处理多种语言时,就需要改变为每种语言构建 AI 模型的想法。


最后,在“Scale it”阶段,他们致力于确保 AI 模型结果的一致性、管理用户反馈,并定义了关键性能指标,以实现应用程序的普遍可用性(GA)。他们还考虑了安全性和 AI 责任问题,使用过滤器来避免为用户建议不安全或具有冒犯性的代码。


改进质量和可靠性方面的工作包括缓解大语言模型的幻觉,即答案可能是不可预测的,并且每次查询都有所不同。解决这个问题的策略包括修改发送给大语言模型的参数,以减少响应的随机性,并缓存频繁的响应以减少变化和提高性能。


GitHub 使用等待列表来管理技术预览版的早期用户。这意味着他们可以获得来自一小群早期采用者的评论和反馈。对真实用户反馈的深入分析使得 GitHub 团队能够识别出有问题的更新,并改进产品的关键性能指标,例如开发人员保留了多少由 Copilot 生成的代码。


最后,他们确保开发人员生成的代码是安全的,并通过过滤器来拒绝可能引入安全问题(如 SQL 注入)的代码建议。社区也提出了一些问题,例如 Copilot 的代码建议与公开的代码相重叠可能会产生许可问题或其他影响。他们为此提供了一个代码参考工具,帮助开发人员做出明智的选择。


在市场策略方面,他们向一些有影响力的社区成员展示了技术预览版,并且面向的是个人用户而不是企业。这有助于在正式发布时获得广泛的支持,从而促使企业采用它。


关键在于展示专注于特定问题的重要性、整合实验结果和用户反馈,以及在应用扩展时优先考虑用户需求。


由于生成式 AI 的采用仍处于早起阶段,GitHub 也在密切关注市场对生成式 AI 工具的需求。感兴趣的读者可在 GitHub 的博客上阅读全文


原文链接

https://www.infoq.com/news/2023/10/github-copilot-lessons/

2023-10-10 09:448031

评论

发布
暂无评论
发现更多内容

字节跳动:高级人才的五个基本素质

池建强

人才培养

LeetCode 1048. Longest String Chain

liu_liu

LeetCode

ARTS 01 - 为什么写作在远程工作中那么重要?

Calvin

ARTS 打卡计划

Java 火焰图

wong

Java flamegraph

leetcode练级-只出现一次的数字

幸福三寸日光

算法 LeetCode js

Lucene的Smart CN实现分词、停用词、扩展词

Page

中文分词 lucene 停用词 扩展词 SmartCN

LeetCode 241. Different Ways to Add Parentheses

liu_liu

LeetCode

leetcode练级-只出现一次的数字 升级版

幸福三寸日光

算法 LeetCode js

职位拆解:互联网-运营

小鲸数据

行业资讯 移动互联网 运营 AARRR

你所不知道的淘宝325秘密

Geek_i59t1w

ios 淘宝 325

Kubernetes 资料集合

倪朋飞

学习 Kubernetes 架构模式

Service Provider Interface介绍

Skysper

spi

【ARTS】Week 1

Amos

ARTS 打卡计划

Linux如何调试内存泄漏

泰伦卢

c c++ C#

我的读书生涯-小学到大学: 没有成长, 只有不断加深的疑惑

lmymirror

人生 读书 经历 半虚构

修改Tomcat窗口的名称

阡陌r

Java tomcat 踩坑 实施

“数据资产”究竟是“数据”还是“资产”

马踏飞机747

大数据 数据中台 数据治理 数据资产

【应用异常监控利器Sentry搭建与学习笔记】

卓丁

Docker Sertry Fasthttp CI/CD Go 语言

Python 3.6.1 官方文档练习——初入江湖(三)

小匚

Python python教程

ARTS 第一周

onee

ARTS 打卡计划

ARTS打卡 week 1

猫吃小怪兽

ARTS 打卡计划

鄙视链 & 全栈

伯薇

学习 能力提升 全栈

向往优雅的代码

Janenesome

编码习惯 读书

我的 Windows Terminal 配置

FeiLong

Windows Terminal

转行程序员浅谈Linux下的多线程编程

WB

Linux 程序员 多线程

Mobileye如何在云上进行深度学习模型训练

Randy

自动驾驶 学习 AI AWS

John 易筋 ARTS打卡Week 01

John(易筋)

ARTS 打卡计划

手把手透析C语言堆内存申请malloc及扩容realloc

卓丁

c 堆内存管理 heap memory malloc realloc

Spring Data R2DBC 入门

稻草鸟人

MySQL WebFlux springboot R2DBC

ARTS week 1

刘昱

游戏夜读 | 刀塔选手比较老吗?

game1night

GitHub基于大语言模型构建Copilot的经验和教训_生成式 AI_InfoQ精选文章