如何构建企业级大模型应用:GitHub Copilot的经验教训

在我们正式向大众推出GitHubCopilot之前,我们花了三年时间进行开发,从构思到实际生产,我们遵循了 “找到它,搞定它,扩展它” 的创业产品开发框架,具体来说,分为以下三个阶段:

找到它:为您的LLM应用确定一个有影响力的问题领域;

搞定它:创建一个流畅的人工智能产品体验;

扩展它:准备您的LLM应用,使其适用于广大用户(GA)。

让我们开始吧。

01

找到它:确定您要解决的问题

有时,创建解决方案中最困难的部分是界定问题领域的范围。问题应该足够聚焦,以快速产生影响,但也应该足够大,以便合适的解决方案能够令用户印象深刻。此外,您希望找到一个问题,其中使用LLM是正确的解决方案(而不仅仅是为了推动产品参与度而集成)。

明确您想要帮助的人群

我们发现AI可以提高效率,因此我们希望优先帮助那些时间紧迫的开发人员,使他们能够在减少上下文切换的情况下更快地编写代码。

首先专注于一个单一问题

与试图用AI解决所有开发人员问题不同,我们将注意力集中在软件开发生命周期的一个部分上:在集成开发环境(IDE)中编写函数。当时,大多数AI编码助手只能完成单行代码。

平衡产品的雄心与质量

尽管GitHub Copilot团队最初尝试生成整个提交,但当时的LLM技术状态无法以足够高的质量支持这一功能。通过进行额外的测试,团队最终选择了在“整个函数”级别提供代码建议。

迎合用户的使用习惯

在为开发人员设计产品时,LLM应用程序应该增强现有工具或融入现有工作流程。GitHub Copilot团队的座右铭是:“如果你在使用GitHub Copilot时不得不改变编码方式,那就是一个缺陷。”实际上,这意味着使开发人员能够在不改变他们的工作方式的情况下接收到代码建议。

02

搞定它:迭代以打造流畅的人工智能产品体验

利用新兴技术进行产品开发,比如生成式人工智能,通常更像是一条曲折的道路而不是线性的旅程,因为有很多不确定性,领域内的快速进展可能迅速开辟新的可能性。将快速迭代周期纳入产品开发流程中,使团队能够快速失败并快速学习。在GitHub,我们进行快速迭代的主要机制是A/B实验平台。

根据GitHub Next的研究高级总监伊丹·加兹特(Idan Gazit)的说法:“我们不仅必须为需要由人类评估输出的模型设计应用程序,还必须为正在学习如何与人工智能互动的人类设计应用程序。”

站在用户的角度考虑

GitHub的员工文化是在产品发布之前和之后通过“狗粮测试”来身临其境地考虑最终用户的需求。在实际操作中,这意味着GitHub Copilot团队创建了一个简单的Web界面,用于研究基础模型并探索如何在他们自己的开发者工作流中利用这些模型。

我们很快发现,Web界面并不是正确的工作平台,因为这意味着开发人员必须在编辑器和Web浏览器之间不断切换。因此,团队决定将GitHub Copilot集成到集成开发环境(IDE)中,并使AI功能成为非模态的,即在后台运行。

我们团队的开发人员还注意到,在编码时他们经常会在IDE中引用多个打开的标签页。这一观察启发了他们尝试使用邻近标签页技术,即GitHubCopilot会处理开发人员IDE中打开的多个文件,而不仅仅是他们正在工作的单个文件。邻近标签页有助于将GitHub Copilot建议的接受率提高了5%。

评估您的测试工具

随着我们的实验继续,我们不得不扩展我们的内部测试工具,使其更加多功能和强大。尽管最初我们依赖我们自己的工具进行测试,但最终我们转向了微软实验平台,以根据大规模反馈和互动来优化功能。

避免沉没成本谬误

这种情况发生在你不愿意放弃某种行动方案,因为你已经在其中投入了大量资源,即使明显转变方向更有益也不愿意。

GitHub和OpenAI团队最初认为每种编程语言都需要其自己的经过精细调优的AI模型。但生成式AI领域发展迅速,我们的假设被证明是不正确的。最终,OpenAI的LLM显著改进,一个模型可以处理多种编程语言和任务。

养成重新审视旧想法的习惯

在一个快速发展的领域,今天的LLM可能无法实现的功能,明天可能是可能的。

一开始,我们探索了一个用于开发人员提问编程问题的聊天界面。然而,在早期测试中,用户对编码建议的功能和质量的期望远高于当时GitHub Copilot所能提供的。因此,我们将这个功能降低了优先级。但随着客户在ChatGPT的出现后对AI聊天机器人的熟悉度提高,以及LLM的不断发展,一种迭代的聊天体验,如GitHub Copilot Chat,变得可能。

03

扩展它:优化AI的质量、可用性和负责任的使用,以达到GA

早期反馈和技术预览对于推动产品改进并将您的应用程序推向GA至关重要。下面是我们在推出GitHub Copilot技术预览之前采取的步骤,以及我们如何管理技术预览并优化用户反馈,以及如何准备我们的内部基础设施以处理大规模需求。

1、优化质量和可用性

确保结果的一致性

由于LLM是概率性的——意味着它们不总是产生相同的可预测结果——与它们的实验需要基于统计数据。其中一个解决方案涉及建立一个质量管道,以应对使用LLM构建的这一独特挑战。

例如,当GitHub Copilot团队首次决定提供整个函数编码建议时,我们还必须确保输出的可预测性和一致性,即相同的提示和上下文会从AI模型产生相同的建议。

为了实现这一点,团队采用了两种策略:更改参数以减少输出的随机性和缓存响应。此外,使用缓存的响应而不是生成新的响应来响应相同的提示,不仅减少了建议的变化,还提高了性能。

为技术预览实施等待名单

等待名单使GitHubCopilot团队能够管理问题、反馈和评论,并确保我们可以有效地解决它们。这种方法还有助于确保我们在各种经验水平的开发人员中拥有各种不同的早期采纳者,以提供反馈。

充分利用真实用户反馈

在一个例子中,开发人员分享了一次更新对模型的编码建议质量产生了负面影响。作为回应,GitHub Copilot团队实施了一个新的保护性指标——多行与单行建议的百分比——并调整了模型以确保客户继续获得高质量的建议。

虽然GitHub团队积极使用GitHub Copilot进行“狗粮测试”以了解对开发人员的体验是如何的,但我们还受益于GitHub之外的开发人员在真实应用场景中提供多样化的反馈。GitHub Copilot团队与技术预览用户早期、经常、以及在用户首选平台上进行互动。这使我们能够实时积极地回应问题和反馈。

致力于在扩展规模时进行迭代

当GitHub Copilot正式发布时,团队不仅需要改进产品,还需要改进其基础设施。当我们尝试并迅速迭代GitHub Copilot时,它直接与OpenAI API一起工作。随着产品的增长,我们扩大了对Microsoft Azure基础设施的使用,以确保GitHub Copilot具备大规模企业级产品的质量、可靠性和负责任的保护措施。

定义产品的关键性能指标

为了优化GitHub Copilot,我们使用了早期开发人员的反馈来确定正确的性能指标,如代码接受率,以及最终的代码保留率(衡量开发人员保留或编辑原始代码建议的程度)。

优化成本

团队致力于优化提供GitHubCopilot建议的成本,同时平衡了对开发人员的影响。例如,在我们决定使用“幽灵文本”之前——即在您键入时一次显示一个编码建议的灰色文本——该工具会急切地生成10个建议并立即显示出来。这导致了建议二到十的前期计算成本,尽管大多数人选择第一个建议,但这也带来了用户体验成本,因为这10个建议将开发人员从其工作流程拉出,并进入了评估思维模式。“这就像付费计算出现在搜索引擎的第二页的结果,让第二页吸引您的注意,尽管大多数人最终使用顶部结果。”加兹特说。

优化成本是一个持续的项目,我们正在探索新的方法来降低成本,同时改善用户体验。

2、优化AI的负责任使用

优先考虑安全和信任

GitHub Copilot技术预览期间的反馈强调了建议安全的代码的重要性。作为回应,团队集成了代码安全功能,以过滤可能包含安全漏洞(例如SQL注入和硬编码凭据)的建议,并使用Azure OpenAI服务的自然语言过滤器来过滤冒犯性内容。

允许社区帮助您

在GitHub,我们非常重视广大开发人员社区对我们产品的反馈,并与他们合作改进我们的产品。对于GitHub Copilot,我们的开发人员社区对于理解AI的潜力以及一些相关担忧至关重要。

例如,开发人员社区担心GitHubCopilot的建议可能与公开代码匹配。作为回应,GitHub Copilot团队创建了一个过滤器,用于阻止与GitHub公共存储库中长于150个字符的公开源代码匹配的建议。

基于社区的意见,GitHubCopilot团队还开发了一个代码参考工具,其中包括链接到可能与GitHub Copilot建议匹配的公开代码,以便开发人员可以查看潜在匹配(以及相关的许可信息),并做出明智的选择。

3、制定上市策略

与产品布道者一起推出您的产品

在2021年推出GitHub Copilot技术预览之前,团队向软件开发社区和GitHub Stars的有影响力的成员展示了原型。这使我们能够以现有的支持基础来推出技术预览,并将预览的范围扩展到更广泛的用户群体。

在针对企业之前,将产品放在个人用户面前

团队决定首先直接向开发人员出售许可证,这些开发人员显然会受益于AI编码助手。我们将这一方法与免费试用计划和基于用户调查结果的月度定价相结合,因为调查发现个人用户更喜欢简单而可预测的订阅方式。在个人用户中获得动力有助于建立支持的基础,并推动企业级产品的采用。

04

关键要点

我们仍处于生成式人工智能的早期阶段,因此我们密切关注对这项新技术的需求和需求。尽管每家公司和产品都需要定义自己构建LLM应用程序的方法,但以下是我们在GitHub Copilot产品旅程中学到的一些关键经验教训:

确定一个聚焦的问题,并慎重地确定AI的用例

这将确保您的应用具有更大的影响力和更快的上市时间。

在设计过程中整合实验和紧密的反馈循环

这在使用LLM时尤为关键,因为输出是概率性的,而大多数最终用户只是在学习如何与AI模型互动。

在扩展规模时,继续利用用户反馈并优先考虑用户需求

这将确保您的产品能够提供一致的结果和真正的价值。

源于硅谷、扎根中国,上海殷泊信息科技有限公司 (MoPaaS) 是中国领先的人工智能(AI)平台和服务提供商,为用户的数字转型、智能升级和融合创新直接赋能。针对中国AI应用和工程市场的需求,基于自主的智能云平台专利技术,MoPaaS 在业界率先推出新一代开放的AI平台为加速客户AI技术创新和应用落地提供高效的算力优化和规模化AI模型开发、部署和运维 (ModelOps) 能力和服务;特别是针对企业应用场景,提供包括大模型迁移适配、提示工程以及部署推理的端到端 LLMOps方案。MoPaaS AI平台已经服务在工业制造、能源交通、互联网、医疗卫生、金融技术、教学科研、政府等行业超过300家国内外满意的客户的AI技术研发、人才培养和应用落地工程需求。MoPaaS致力打造全方位开放的AI技术和应用生态。MoPaaS 被Forrester评为中国企业级云平台市场的卓越表现者 (Strong Performer)。