当下大语言模型(LLM)应用的架构

想要构建你的第一个大语言模型应用?这里有你需要了解的一切,以及你今天就能开始探索的问题领域。

LLM 应用架构

我们的目标是让你能够自由地使用大语言模型进行实验、打造自己的应用,并挖掘那些尚未被人注意的问题领域。为此,我们特意邀请了 GitHub 的两位机器学习领域的专家——高级研究员 Alireza Goudarzi 和首席工程师 Albert Ziegler,一起探讨了当下大语言模型的前沿架构。

在这篇文章中,我们将详细介绍五个构建大语言模型应用的关键步骤、当前大语言模型应用的新兴架构,以及一些你现在就可以着手研究的问题领域。

构建大语言模型应用的五个步骤

使用大语言模型或任何机器学习(ML)模型来构建软件,其过程与传统软件开发截然不同。最明显的区别在于,开发者需要处理数据集、嵌入技术和参数权重,而不是单纯将源代码编译成二进制文件来执行命令,以便生成一致而准确的输出。毕竟,大语言模型的输出结果具有概率性,无法像常规程序那样产生可预测的输出。

你可以通过以下链接查看图表的详细数据:点击图表可以放大并保存。

下面,我们来详细解读一下构建大语言模型应用的五个关键步骤。👇

  1. 首先,集中精力解决一个问题。找到一个适当的问题至关重要:这个问题要足够具体,以便你能快速迭代并取得进展,同时也要足够大,能够通过合适的解决方案给用户带来惊喜。

举个例子,GitHub Copilot 团队最初并没有试图用 AI 解决开发者面临的所有问题,而是专注于软件开发生命周期中的一个环节:在集成开发环境(IDE)中编写代码功能。

  1. 选择合适的大语言模型。虽然使用预训练模型构建大语言模型应用可以节省成本,但如何选择合适的模型呢?以下是一些需要考虑的因素:
  • 许可证。如果你计划最终销售你的大语言模型应用,那么你需要选择一个提供商业用途许可的 API 模型。为了帮助你开始,这里有一个社区提供的开源大语言模型列表,这些模型都有商业用途的许可。
  • 模型大小。大语言模型的大小可以从 70 到 1750 亿参数不等,有些模型如 Ada 甚至只有 3.5 亿参数。大多数大语言模型(截至撰写本文时)的大小在 70 到 130 亿参数之间。

一般认为,模型参数越多(即可以调整以改进模型输出的变量),模型在学习新信息和提供预测方面的能力就越强。然而,小型模型性能的提升正在挑战这一传统观念。小型模型通常更快、成本更低,而它们预测质量的提升使它们成为了与那些对许多应用来说可能过于庞大和昂贵的大型模型相比的有力竞争者。

寻找开源大语言模型(LLM)?

可以查看我们为开发者准备的关于开源大语言模型和生成式 AI 的指南,其中包括了 OpenLLaMA、Falcon 系列等模型的列表。
模型性能。在你使用诸如微调和上下文学习等技术对大语言模型进行个性化定制之前,先评估一下模型在生成你所需输出方面的效率、速度以及一致性。你可以通过离线评估来衡量模型的性能。

什么是离线评估?

离线评估是在模型与人类互动之前,评定模型是否达到了一定性能标准的测试。这些测试通过向模型提出问题(有正确或错误的答案,而这些答案是人类所知道的)来衡量模型输出的延迟、准确性和上下文相关性。

此外,还有一部分测试用于处理含糊不清的答案,称为增量评分。这种类型的离线评估允许你将模型输出评为部分正确(例如,80% 正确),而不是简单地判定为对或错。

  1. 定制大语言模型。训练大语言模型意味着构建支架和神经网络来实现深度学习。而定制预训练的大语言模型则是将其调整以适应特定任务,比如生成围绕特定主题的文本或者特定风格的文本。下面的部分将重点介绍后者的技术。要将预训练的大语言模型定制到你的特定需求,你可以尝试上下文学习、基于人类反馈的强化学习(RLHF)或者微调。

上下文学习,有时也被终端用户称为提示工程,是在你查询模型时向模型提供具体指令或示例,并让其根据上下文生成相关输出的过程。
上下文学习可以通过多种方式进行,如提供示例、重新表述你的查询或添加一句概述你的高层次目标的句子。

RLHF 包括为预训练的大语言模型创建一个奖励模型。奖励模型的作用是预测用户是否会接受或拒绝来自预训练大语言模型的输出。预训练大语言模型会根据奖励模型的学习成果和用户的接受率调整其输出。
RLHF 的优点在于,它无需监督学习,因此可以拓宽可接受输出的标准。随着足够多的人类反馈,大语言模型可以学会,只要用户接受概率达到 80%,就可以生成相应的输出。想尝试一下吗?可以查看包括 RLHF 代码库在内的相关资源。

微调是将模型生成的输出与预期或已知输出进行比较的过程。例如,你知道“这汤太咸了”这样的句子背后的情绪是负面的。要评估大语言模型,你需要将这句话输入模型,并查询它是将情绪标记为正面还是负面。如果模型将其标记为正面,则需要调整模型参数,并再次尝试激发它,看它是否能将情绪正确分类为负面。
微调可以使大语言模型在特定任务上表现出色,但它依赖于耗时的监督学习。也就是说,每个输入样本都需要一个标有确切正确答案的输出。这样一来,实际输出就可以与标记的输出进行比较,进而调整模型的参数。正如前文提到的,RLHF 的优势在于它不需要精确的标签。

  1. 构建应用程序的架构。搭建大语言模型应用需要的不同组件大致可分为三类:
    • 用户输入:这包括用户界面(UI)、大语言模型以及应用托管平台。
    • 输入增强和提示构建工具:涵盖了数据源、嵌入模型、向量数据库、提示构建和优化工具,还有数据过滤器。
    • 高效和负责任的 AI 工具:包括大语言模型缓存、大语言模型内容分类器或过滤器,以及用于评估大语言模型应用输出的遥测服务。
  2. 对应用进行在线评估。这些评估被认为是“在线”的,因为它们在用户交互期间评估大语言模型的性能。例如,GitHub Copilot 的在线评估是通过衡量接受率(开发者接受展示给他们的完成度有多高)以及保留率(开发者在接受完成后多久以及在多大程度上编辑它)来进行的。

为什么在线评估很重要?

尽管模型可能在离线测试中表现出色,但当应用程序交到用户手中时,其输出质量可能会发生变化。这是因为很难预测最终用户将如何与用户界面互动,因此在离线测试中难以模拟他们的行为。
大语言模型应用的新兴架构

让我们开始讨论架构。我们将回到我们的朋友 Dave 的故事,他在世界杯观看派对的当天 Wi-Fi 出了问题。幸运的是,多亏了一个由大语言模型驱动的助手,Dave 及时恢复了 Wi-Fi,赶上了比赛。

我们将使用这个例子和上面的图表来解析一个用户与大语言模型应用的交互流程,并分解出构建它所需的工具类型。👇

从右向左的流程图,展示了一个大型语言模型应用的组件及它们是如何协同工作的。

用户输入工具

当 Dave 的 Wi-Fi 出故障时,他联系了他的互联网服务提供商(ISP),并被转接到一个由大语言模型驱动的助手。助手询问 Dave 的紧急情况,而 Dave 回答说:“我的电视原本连接着 Wi-Fi,但我不小心撞到了柜台,Wi-Fi 路由器掉了下来!现在我们看不了比赛了。”

为了让 Dave 与大语言模型互动,我们需要四种工具:

  • 大语言模型 API 和主机:这个大语言模型应用是在本地机器上运行还是在云端?对于 ISP 来说,它很可能托管在云端,以处理像 Dave 这样的大量来电。Vercel 和像 jina-ai/rungpt 这样的早期项目旨在提供一个云原生解决方案,用于部署和扩展大语言模型应用。
  • 但如果你只是想搭建一个大语言模型应用来进行实验,那么在你的机器上托管模型可能更经济,因为这样你就不必每次实验时都支付启动云环境的费用。你可以在 GitHub Discussions 上找到关于像 LLaMA 这类模型的硬件要求讨论,其中两个讨论可以在这里和这里找到。
  • 用户界面(UI):Dave 的按键实际上就是用户界面,但为了让 Dave 使用按键从菜单切换到紧急线路,用户界面需要包含一个路由工具。
  • 语音转文本翻译工具:然后,Dave 的语音查询需要通过一个在后台运作的语音转文本翻译工具来处理。
  • 输入增强和提示构建工具

回到 Dave 的情况。大语言模型可以分析 Dave 语音转录的词序,将其归类为 IT 投诉,并提供上下文相关的响应。(大语言模型之所以能做到这一点,是因为它接受了包括 IT 支持文档在内的整个互联网语料库的训练。)

输入增强工具的目标是将用户的查询以一种能够激发大语言模型(LLM)产生最有效回答的方式进行上下文化处理和封装。

向量数据库则是一个存储嵌入或索引高维向量的地方,它通过提供附加信息来更好地上下文化用户的查询,从而提高大语言模型给出有用回应的可能性。
比如说,如果大语言模型助手能够接入公司的投诉搜索引擎,并且这些投诉及其解决方案都以嵌入的形式存储在向量数据库中,那么大语言模型助手就不仅能利用互联网上的IT支持文档信息,还能利用与特定ISP客户问题相关的文档信息。

但要从向量数据库中提取与用户查询相关的信息,我们需要一个嵌入模型来将查询转换成嵌入。由于向量数据库中的嵌入和Dave的查询都被转换成了高维向量,这些向量不仅捕捉到了自然语言的语义和意图,还超越了单纯的语法结构。
下面是一些开源文本嵌入模型的列表,OpenAI 和 Hugging Face 也提供了这类嵌入模型。

举个例子,Dave的上下文化查询可能是这样的:

// 请关注以下相关信息。
注意颜色和闪烁模式。

// 请关注以下相关信息。

// 这是来自Dave Anderson,一位IT支持专家的IT投诉。
对Dave问题的解答可以展示ISP对其客户所提供的优质支持。

*Dave: 哦,太糟糕了!今天是重要的比赛日。我的电视原本连接着Wi-Fi,但我不小心撞到了柜台,Wi-Fi盒子掉下来摔坏了!现在我们看不了比赛了。
这些提示不仅把Dave的问题定位为IT相关的投诉,还结合了公司投诉搜索引擎中的相关上下文,比如常见的网络连接问题及其解决方案。

MongoDB 最近发布了向量图集搜索的公开预览版,它能在MongoDB中对高维向量进行索引。此外,Qdrant、Pinecone 和 Milvus 也提供了免费或开源的向量数据库。

想了解更多关于向量数据库的信息?可以阅读一下 GitHub Copilot 团队是如何实验性地使用它们来打造定制化编程体验的。

https://github.blog/2023-05-17-how-github-copilot-is-getting-better-at-understanding-your-code/#improving-semantic-understanding

数据过滤器的作用在于确保大语言模型不处理未经授权的数据,例如个人可识别信息。像 amoffat/HeimdaLLM 这样的初步项目正在努力确保大语言模型只访问授权的数据。
接下来,提示优化工具将协助整合最终用户的查询和所有相关上下文。也就是说,这个工具会帮助确定哪些上下文嵌入最为相关,以及这些嵌入应以何种顺序排列,以便大语言模型能够产生最具上下文相关性的响应。这个过程被机器学习研究人员称为提示工程,通过一系列算法来创建提示(注意这与最终用户进行的提示工程不同,后者也被称为上下文学习)。
像 langchain-ai/langchain 这样的提示优化工具能帮你为最终用户编排提示。如果自己动手,你需要设计一系列算法,从向量数据库中检索嵌入,提取相关上下文片段,并进行合理排序。在这个过程中,你可以借助 GitHub Copilot Chat 或 ChatGPT 进行协助。

想了解 GitHub Copilot 团队是如何使用杰卡德相似度来判断哪些上下文片段最适合用户的查询的吗?

https://github.blog/2023-07-17-prompt-engineering-guide-generative-ai-llms/

高效且负责任的AI工具

为了避免 Dave 因为等待大语言模型(LLM)助手的回复而更加焦虑,LLM 可以迅速从缓存中提取答案。并且,如果 Dave 情绪失控,我们可以利用内容分类器确保 LLM 应用不会做出同样的反应。此外,遥测服务还能分析 Dave 如何与用户界面(UI)互动,帮助开发者你根据他的行为来优化用户体验。

大语言模型的缓存功能可以存储回复。这意味着对于重复的查询(比如像 Dave 这样的用户并不是第一次遇到网络故障),LLM 可以直接从缓存中取出以前用于类似问题的答案,而不必重新生成。这样做可以减少响应时间、计算成本,同时使建议更加稳定。
你可以试用像 zilliztech/GPTcache 这样的工具来缓存应用的回复。

内容分类器或过滤器能够防止你的自动助手给出可能有害或冒犯性的建议(尤其是在最终用户将挫败感发泄到 LLM 应用上时)。像 derwiki/llm-prompt-injection-filtering 和 laiyer-ai/llm-guard 这样的工具尽管还在初期阶段,但它们正朝着解决这一问题努力。

通过遥测服务,你可以评估你的应用与真实用户的互动效果。一个负责任并透明监控用户活动的服务(例如记录用户接受或修改建议的频率)可以提供有价值的数据,帮助你改善应用,使其更加实用。
例如,OpenTelemetry 是一个开源框架,为开发人员提供了在开发、测试、分阶段部署和生产环境中收集、处理和输出遥测数据的标准方法。

了解 GitHub 如何使用 OpenTelemetry 来监测 Git 的性能 >

https://github.blog/2023-10-16-measuring-git-performance-with-opentelemetry/

想要获取更多关于负责任 AI 的工具?

https://github.com/topics/responsible-ml

开发者们正在 GitHub 上开发各种与负责任 AI、AI 公平性、负责任机器学习和伦理 AI 相关的项目。
太好了!🥳 你的 LLM 助手已经成功回答了 Dave 的众多问题。他的路由器已经修好,一切就绪,他可以享受他的世界杯观赛派对了。任务完成!

大语言模型在现实世界的影响

正在寻找创新灵感或想要深入探索的领域吗?以下是一系列正在进行的项目,展示了大语言模型(LLM)在实际世界中的应用和影响。 NASA 和 IBM 最近共同开放了迄今为止最大的地理空间人工智能模型,目的是扩大人们对 NASA 地球科学数据的获取渠道。这一努力旨在加快对气候变化影响的发现和理解。 了解一下约翰霍普金斯应用物理实验室是如何开发一款对话式人工智能助手的。这款助手能够用简洁的英语向未受过专业训练的士兵提供医疗指导,这些指导基于已建立的护理流程。 Duolingo 和 Mercado Libre 等公司也在利用 GitHub Copilot 帮助更多人免费学习新语言,并分别推动拉丁美洲的电子商务民主化。

更多阅读内容

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注