大模型应用开发系列1--技术架构与常用工具

      生成式人工智能的爆发有可能颠覆很多行业,大语言模型(LLM)相关应用开发也迎来了爆炸式增长。那么大模型应用的技术架构是怎样的,都使用了什么样的工具,采取了什么样的设计模式呢?知名投资机构A16Z在《大模型应用的新兴架构》文章中做了精彩说明,参考该文章,本文对大模型应用开发的技术架构和常用工具做个简单介绍。

 

大模型应用技术架构

 

      其中,灰色框是关键组件,带箭头的代表不同的数据流:黑色虚线为应用开发者提供的用于限定输出的上下文数据,黑色实线为传给LLM的提示(即少样本例子),蓝色实线为用户查询,红色实线为返回给用户的输出。

 

      该技术架构包括三层:

数据预处理/嵌入:该阶段要将私有数据存储起来以供稍后检索。一般而言,文档会被分成块,传送给嵌入模型,然后存储在所谓的向量数据库的专用数据库之中。

提示构造/检索:当用户提交查询时,应用会构造一系列的提示,然后提交给该语言模型。编译过的提示通常会与开发者硬编码的提示模板结合;有效输出的示例叫做少样本示例;任何必要信息均通过外部 API 检索获取;以及从向量数据库检索到的一组相关文档获取。

提示执行/推理:一旦提示被编译过之后,将会被提交给预训练的 LLM 进行推理,其中包括了专有模型 API 以及开源或自训练的模型。在此阶段,部分开发者还会增加日志记录、缓存以及验证等运营性的系统。

 

数据处理/嵌入

 

(1)数据预处理,是把各种数据处理成LLM可用的数据。LLM 应用的上下文数据包括文本文档、PDF,甚至是 CSV 或 SQL 表等结构化格式。对结构化数据,可以采用传统的 ETL 工具,比方说 Databricks 或 Airflow。对非结构化数据,可以利用编排框架内置的文档加载器,比方说 LangChain (由 Unstructed 提供支持)以及 LlamaIndex (由 Llama Hub 提供支持)。

(2)嵌入,是一条信息的数字表示,例如文本、文档、图像、音频等,该表示捕获了嵌入内容的语义,使其对于许多行业应用来说都很稳健。给定文本“投票的主要好处是什么?”,句子的嵌入可以在向量空间中表示,例如,使用 384 个数字的列表(例如,[0.84, 0.42, ..., 0.02 ])。由于这个列表捕获了含义,因此我们可以做一些令人兴奋的事情,例如计算不同嵌入之间的距离以确定两个句子的含义匹配程度。

有很多嵌入模型可以供开发者使用,如OpenAI的text-embedding-ada-002 模型,Hugging Face的Sentence Transformers库等。

(3)向量数据库,要负责高效存储、比较和检索多达数十亿的嵌入(也就是向量)。向量数据库有多种选择。最常见的选择是Pinecone,完全是由云托管的,因此很容易上手,并且具备大型企业在生产当中所需的许多功能(比方说,良好的规模性能、单点登录以及正常运行时间服务等级协议)。

还有大量可用的开源向量数据库,包括:

Milvus、Weaviate 、Vespa以及 Qdrant 等:这些系统通常具有出色的单节点性能,并且可以针对特定应用进行定制,因此受到喜欢开发定制平台的经验丰富的人工智能团队的欢迎。

Chroma、Faiss等:这些库拥有丰富的开发者经验,并且对于小型应用和开发实验来说很容易启动。但这些未必能大规模替代完整的数据库。

pgvector 之类的 :将向量与传统数据库紧耦合在一起。

 

提示构建与获取

 

(1)提示是大模型LLM的输入,把提示整合上下文数据是大模型开发的关键。

简单的提示包括直接指令(零样本提示)或可能含部分示例的输出(少样本提示)。这些提示通常能生成好的结果,但达不到生产部署所需的准确性水平。

下一级别的提示技巧旨在让模型响应是基于某些事实来源的,并提供模型未受训练过的外部上下文。更高级的提示策略,包括思维链、自洽、生成知识、思维树、方向性刺激等等。

(2)编排框架,如何有效地结合使用提示和上下文,从而支持不同的 LLM 用例,比方说文档问答、聊天机器人等。这就是类似 LangChain 以及 LlamaIndex 这样的编排框架的用武之地。这些框架把提示链的许多细节都给抽象出来;与外部 API 进行交互(包括确定何时需要 API 调用);从向量数据库检索上下文数据;并在跨多个 LLM 的调用过程中维护好记忆。它们还为上述许多常见应用提供模板。其输出是提交给语言模型的一个提示或一系列提示。

 

提示执行/推理

(1)提示推理,就是调用大模型来执行提示,获取结果。可以选择Open AI接口,通常它们用的是 gpt-4 或 gpt-4-32k 模型。这为应用性能提供了最佳用例场景,并且易于使用,因为它可以使用广泛的输入域,并且通常不需要微调或自托管。也可以选择开源的大模型,来进行微调,如LLaMa2ChatGLMBaichuan等,适应应用领域的需要。

(2)LLM 的操作工具。缓存相对常见(通常基于 Redis),因为这可以缩短应用响应时间并降低成本。 Weights & Biases 与 MLflow (从传统机器学习移植过来)或 PromptLayer 与 Helicone (专为LLM构建)等工具也得到相当广泛的使用。这些工具可以记录、跟踪和评估 LLM 的输出,通常是为了改进提示构造、调整管道或选择模型的目的。还有许多用于验证 LLM 输出(比方说 Guardrails)或检测提示注入攻击(比方说 Rebuff)的新工具正在开发中。

 

智能代理

 

      大模型应用除了支持生成内容之外,更令人兴奋的是,可以执行动作,这就是智能代理。代理为人工智能应用提供了一系列的全新功能:解决复杂问题,对外部世界采取行动,以及从部署后的经验中学习。这是通过将高级推理/规划、工具使用以及记忆/递归/自我反思想结合来做到这一点的。

代理有潜力成为 LLM 应用架构的核心部分,但是现如今,大多数代理框架都还处在概念验证阶段,虽然能够提供令人难以置信的演示,但还不能够可靠地、可重复地执行任务。

 

常用工具

 

      下面是该技术架构中涉及的常用工具和系统,每个部分都可以有多种选择。这些工具和系统构成了大模型开发的生态链,使得大模型应用开发更方便,也降低了大模型应用的开发门槛。

 

展望未来

 

      预训练的人工智能模型是自互联网以来最重要的软件架构变化的体现。它们让个人开发者能够在几天内开发出令人难以置信的人工智能应用,其能力甚至超越了过去大型团队需要数月才能开发出来的有监督机器学习项目。

 

参考资料:

Emerging Architectures for LLM Applications https://a16z.com/emerging-architectures-for-llm-applications/

A16Z:大模型应用的新兴架构 https://36kr.com/p/2344827924567561

 

 

首页标题    原创    大模型应用开发系列1--技术架构与常用工具