构建大模型应用的技术栈浅析

733 阅读5分钟

RAG相关的技术学习暂时告一段落了,接下来尝试探索新的学习方向。这就引入一个问题:接下来该做什么?为了能进一步推进,我需要有一个整体的视角,从更上层来看整个技术栈,从而确定接下来感兴趣的方向。本文主要探索从更上层的视角来看构建大模型的技术栈,从而进一步确定研究学习方向。

前言

技术最终是为业务服务的,基于新兴的大模型技术,最近涌现出各种有意思的应用。从我的视角,这部分应用通常可以被分为两类:问答式应用和生成式应用。典型的问答式应用包括:chat应用、智能助手、企业知识库等;典型的生成式应用包括:文本创作、文生图、文生视频等。那么,这些应用是如何构建的呢?如何基于大模型来构建起这样的一个私人/企业级的应用呢?本文接下来的部分将探索构建这样应用的流程和所涉及到的技术栈。

整体架构

先来看一下,如果我们想要构建一个常见的大模型应用,那么它的架构应该是怎样的呢?下面是一张基于个人理解的大模型应用的整体架构图:

image.png 图中按照前端和后台进行了整体的划分,对于后台,这里进行了更细致的按层划分:

  • 网关层:网关层是前后端交互的入口。主要负责请求路由的识别和分发、安全防护、协议适配等功能。在大模型应用的场景下,还需要额外考虑一些流量特性。后续内容中说明。
  • 应用层:应用层主要是负责应用的构建。在这一层上利用底层大模型的能力+应用要完成的业务规则,共同构建起对外提供服务的应用。(其实也包含了业务层的内容,实现业务逻辑,在这里进行粗粒度的划分)
  • 中间件:中间件主要负责应用层到模型层的一些中间内容的实现,比如cache。
  • 基座:大模型基座主要提供大模型的能力并对外提供服务。

流程

基于以上架构,构建一个大模型应用的完整流程可以如下:

image.png

  1. 准备需要的语料,比如垂类应用的领域知识。
  2. 利用准备好的语料对LLM进行训练或者微调,是LLM学习到垂类应用/领域上的知识。
  3. (可选)如果大模型比较大,可能需要对模型进行量化技术以减小模型体积。
  4. 选择合适的大模型部署框架对准备好的大模型进行部署,以对外提供可访问的稳定的服务。
  5. 应用层基于业务,利用大模型应用框架, 使用大模型基座提供的能力实现大模型的应用功能。例如RAG、Agent
  6. 应用层将构建好的服务部署到服务器上,并通过网关层对外提供服务。
  7. 用户通过前端来访问应用功能。

接下来,将对流程中涉及到的主流技术/工具/框架进行总结。

前端

前端主要是将大模型应用的能力吐出去给用户进行使用,相比于传统的前端应用,其交互方式上可能更加凸显异步的特点:比如常见的chat应用中,前端并不是一次获得所有的回答,而是像打字机的样子一点点的将最终结果呈现在屏幕上。为了实现打字机的效果,前后台之间可能不会像传统应用一样使用http协议,而是使用SSE(Server-Sent Events) 或者 WebSockets协议。在大模型应用的范围中,常见的大语言模型前端交互前端界面工具有:Open WebUI, 它提供一个简单的web用户界面来和大语言模型进行对话。

后端

网关层

相比于传统网关的能力,对于大模型应用,可能还需要考虑一些AI应用流量的特点:比如有WebSocket/SSE协议决定的长连接,相比于传统应用的高延迟(模型推理)、LLM上下文来回传输带来所需要的大带宽等。目前主流的一些网关层实现包括:阿里云开源的Higress、腾讯云 EdgeOne AI 网关、Portkey AI Gateway等。关于网关层的具体内容,后续如果深入再进行扩展。

image.png

应用层

应用层会包含比较多我们经常听到的概念,比如RAG、Agent、Langchain等。应用层这里的技术可以分为两类:框架和应用技术。常用的框架包括Langchain、LlamaIndex、AutoGPT、AutoGen、ModelScope-Agent。 常用的应用技术包括 :RAG、Agent。

image.png

中间件

中间件这里目前了解到的主要是cache, 关于cache的实现,目前了解到的包括:GPTCache、CodeFuse ModelCache、LangCache、RedisAI。

image.png

基座

基座中涉及到的技术相对比较多,先从整体看下这里涉及到的部分:

image.png

其中,数据清洗根据业务需要收集数据并转换成训练需要的格式。这部分暂时不扩展。

模型训练和微调

image.png

模型量化

image.png

模型部署

image.png

总结

本文主要从上层的视角分析了大模型应用的架构和基本流程,并基于流程梳理了每个流程中涉及到的技术/工具/框架,为后续继续探索打下了基础。本文中没有对涉及到的技术/工具的更深层原理进行探讨,因为本文更倾向于构建更上层的认知,在之后的文章中,我会以此为出发点,对于我感兴趣的部分进行更深入的研究和学习。读者也可以以此为出发点找到自己感兴趣的方向继续深入学习。

文中内容如有错漏欢迎评论留言补充~ 转载请注明出处