写点什么

大模型应用的 10 种架构模式

  • 2024-03-27
    北京
  • 本文字数:3371 字

    阅读完需:约 11 分钟

大小:1.65M时长:09:36
大模型应用的 10 种架构模式

在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重要技能。然而,当我们转向大模型应用和人工智能领域,情况可能会有所不同。面对新兴技术,例如生成式 AI,我们尚缺乏成熟的设计模式来支撑这些解决方案。


作为一位老码农,我在这里整理总结了一些针对大模型应用的设计方法和架构模式,试图应对和解决大模型应用实现中的一些挑战,如成本问题、延迟问题以及生成的不准确性等。


1. 路由分发模式


当用户输入一个查询时,该查询会被发送到控制中心,而控制中心则扮演着对输入进行分类的角色。



如果查询是可以识别的,那么它会被路由到小语言模型进行处理,这通常是一个更准确、响应更快且成本更低的操作。然而,如果查询无法被识别,那么它将由大型语言模型来处理。尽管大型语言模型的运行成本较高,但它能够成功返回更多种类型查询的答案。通过这种方式,人工智能产品可以在成本、性能和用户体验之间实现平衡。

2. 大模型代理模式


想象一个生态系统,其中多个专门针对特定任务的生成式 AI 模型各自作为其领域内的专家,并行工作以处理查询。这种多路复用模式能够生成一系列不同的响应,然后将这些响应整合在一起,形成一个全面的答案。



这样的设置非常适合复杂的问题解决场景,在这种场景中,问题的不同方面需要不同的专业知识,就像一个由专家组成的小组,每个专家负责处理更大问题的一个方面。


更大的模型(如 GPT-4)负责理解上下文,并将其分解为特定的任务或信息请求,这些任务或信息请求被传递给更小的代理。这些代理可能是较小的语言模型,它们已经接受过特定任务的训练,或者是具有特定功能的通用模型,如 GPT、Llama、上下文提示和函数调用。


3. 多任务微调模式


在这种架构模式中,我们对大型语言模型进行了微调,使其能够同时处理多个任务,而非仅仅针对单个任务。这是一种跨领域知识和技能迁移学习的方法,大大增强了模型的多功能性。



这种多任务学习方法对于那些需要应对各种复杂任务的平台来说尤其有用,例如虚拟助理或是人工智能驱动的研究工具。这极大地简化了面向复杂领域的训练和测试工作流程。


在训练大型语言模型(LLM)时,我们可以利用一些资源和软件包,如 DeepSpeed,以及 Hugging Face 的 Transformer 库。

4. 面向微调的分层缓存策略模式


我们将缓存策略和相关服务引入到大模型应用架构中,可以成功地解决成本、数据冗余以及训练数据等组合问题。



通过储存这些初始结果,系统能够在后续查询中迅速提供答案,从而显著提高了效率。当我们累积了足够的数据后,微调层级将启动,利用早期交互的反馈,进一步完善一个更为专业化的模型。


专有大模型不仅简化了操作流程,也使人工智能专业知识更好地适应特定任务,使其在需要高度精确性和适应性的环境中,如客户服务或个性化内容创建,表现得更为高效。


对于刚入门的用户,可以选择使用预先构建的服务,如 GPTCache,或者使用常见的缓存数据库,如 Redis、Cassandra、Memcached 来运行自己的服务。在向混合服务中添加其他服务时,一定要记得监控并测量延迟情况。


5. 混合规则模式


许多现行的商业系统和企业应用在一定程度上仍然依赖于基于规则的架构。通过将大模型与基于规则的逻辑结合,我们能够融合结构化的精确性,旨在创造出既富有创意又遵循规范的解决方案。



对于那些必须严格遵守标准或法规的行业或产品而言,这是一个非常有效的架构模式,它确保了人工智能在保持创新的同时,仍能遵守既定的理想参数。例如,这种架构可以应用于生成电话 IVR 系统或基于规则的传统(非 LLM)聊天机器人的意图和消息流。

6. 知识图谱模式


将知识图谱与生成型人工智能模型结合,赋予了它们面向事实的超级能力,使得输出不仅具有上下文情境,而且更加符合事实。



对于要求内容真实性和准确性不容忽视的应用来说,这种方法至关重要,比如在教育内容创作、医疗咨询或任何误导可能带来严重后果的领域。


知识图谱及其本体能够将复杂主题或问题分解成结构化格式,为大型语言模型提供深层上下文基础。我们甚至可以借助语言模型,以 JSON 或 RDF 等格式创建本体。


可用于构建知识图谱的图数据库服务包括 ArangoDB、Amazon Neptune、Google Dgraph、Azure Cosmos DB 以及 Neo4j 等。此外,更广泛的数据集和服务也能用于访问更全面的知识图谱,包括开源的企业知识图谱 API、PyKEEN 数据集以及 Wikidata 等等。

7. 智能体蜂巢模式


智能体蜂巢架构模式运用了大量 AI Agent,这些代理共同协作以解决一个问题,每个代理都从各自独特的视角出发进行贡献。



由此产生的综合结果展示了一种集体智慧的体现,其效果超越了任何一个单独的 AI 个体所能达到的成果。在需要大量创新解决方案的场景中,或者在处理复杂的数据集时,这种模式尤其有效。


例如,我们可以利用多个 AI Agent 来共同审查一篇研究论文,整合他们的所有数据和观点。对于处理能力要求较高的蜂巢系统,我们可以考虑部署消息队列服务,比如 Apache Kafka,以便更好地处理代理和服务间的消息传递。

8. 智能体组合模式


该架构模式强调了灵活性,通过模块化的人工智能系统,能自我重新配置以优化任务性能。这就像一个多功能工具,可以根据需求选择和激活不同的功能模块,对于需要为各种客户需求或产品需求定制解决方案的企业来说,这是非常有效的。



我们可以通过使用各种自主代理框架和体系结构来开发每个 Agent 及其工具,例如 CrewAI、Langchain、LLamaIndex、Microsoft Autogen 和 superAGI 等。


通过组合不同的模块,例如一个 Agent 可以专注于预测,另一个处理预约查询,还有一个专注于生成消息,最后一个 Agent 来更新数据库。将来,随着专业 AI 公司提供的特定服务的增多,我们可以将一个模块替换为外部或第三方服务,以处理特定的任务或领域的问题。

9. 记忆认知模式


这种架构为人工智能引入了类似于人类记忆的元素,允许模型回忆并基于过去的交互进行学习,从而产生更细腻的反应。



这对于正在进行的对话或学习场景非常有用,因为随着时间的推移,人工智能会形成更深的理解,就像一个专业的个人助理或者在线机器学习平台。随着时间推移,记忆认知模式能够将关键事件总结并储存到一个向量数据库中,进一步丰富 RAG 系统。


为了保持汇总计算量的合理性,我们可以通过使用更小的自然语言处理库来进行汇总和摘要。所使用的是向量数据库,并在提示阶段进行检索,以检查短期记忆,并通过最近邻搜索来定位关键的“事实”。有一个遵循这种模式的开源解决方案是 MemGPT。

10. 双重安全模式


围绕大型语言模型(LLM)的核心安全性至少包含两个关键组件:一是用户组件,我们将其称为用户 Proxy 代理;二是防火墙,它为模型提供了保护层。



用户 proxy 代理在查询发出和返回的过程中对用户的 query 进行拦截。该代理负责清除个人身份信息(pII)和知识产权(IP)信息,记录查询的内容,并优化成本。


防火墙则保护模型及其所使用的基础设施。尽管我们对人们如何操纵模型以揭示其潜在的训练数据、潜在功能以及当今恶意行为知之甚少,但我们知道这些强大的模型是脆弱的。


在安全性相关的技术栈中,可能还存在其他安全层,但对于用户的查询路径来说,Proxy 代理和防火墙是最关键的。

没有结束


老码农认为,这些大模型应用的架构模式不仅仅是一种范式,很可能成为未来智能系统赖以成长的框架。随着我们们继续探索和创新,还会涌现出很多新的架构模式,而且这里的 10 个架构模式以及新涌现的架构模式可能成为人工智能服务的表现形态。


20 年前,当我第一次阅读《设计模式》一书的时候(参见《三本书影响一个人》一文),爱不释手,如今,老码农开始持续探讨并实践 AI 应用,本文中的这些架构模式是老码农自己命名的,不妥之处请大家斧正。我希望能够持续更新本系列,也希望对此有兴趣的朋友联系我, 共同研究探索,致力于大模型应用的架构模式。


 作者简介:

曹洪伟,百度 DuerOS 原首席布道师,渡鸦科技原 CTO,目前任联想诺谛智能首席架构师,从事基于大模型的应用系统研发。20 多年软硬件产研经验,拥有 50 多项国内外专利,著有《BREW 进阶与精通》,《一书读懂物联网》和《深入分布式缓存》的联合作者,《持续架构》《精益 DevOps》《语音优先》《计算机网络问题与解决方案》《区块链应用开发实战》《基于混合方法的自然语言处理》等书的共同译者,日常维护着公众号 wireless_com 和 CSDN 同名博客。

2024-03-27 16:407173

评论 1 条评论

发布
用户头像
总结的不错
2024-03-29 08:30 · 浙江
回复
没有更多了
发现更多内容

用手机写代码:基于Serverless的在线编程能力探索

刘宇

百度助力人工智能教育创新:教育部产学合作协同育人项目申报进行中!

百度大脑

人工智能

【Flutter 专题】63 图解 Flutter 集成极光 JPush 小结

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

20张图带你了解JVM运行时数据区(上)

阿Q说代码

JVM 8月日更 pc寄存器 虚拟机栈 本地方法栈

netty系列之:内置的Frame detection

程序那些事

Java Netty 程序那些事

JNI 提示

Changing Lin

8月日更

Swift 实现聚光灯动效

fuyoufang

swift 8月日更

你真的了解二叉树吗?(树形结构基础篇)

有道技术团队

技术 二叉树 网易

LeetCode题解:27. 移除元素,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

fil为什么会暴涨?fil暴涨还会持续吗?

区块链 分布式存储 IPFS fil币价行情 fil币会大涨吗?

抖音快手短视频询盘系统开发

fil价格走势分析?fil为什么会大涨?

区块链 分布式存储 IPFS fil价格走势 fil大涨

神策数据微信小程序 SDK 架构解析

神策技术社区

大前端 后端 数据 代码 数据采集

接口测试的时候如何一键获取cookie,并在其他接口引用

与风逐梦

软件测试 接口测试 Cookie

基于Serverless架构的社区文章管理小工具

刘宇

模块五作业 - 微博评论的高性能高可用计算架构

君子意如何

「架构师训练营第 1 期」

模块五作业

VE

架构实战营

JavaScript 数组元素的一些操作

HoneyMoose

四种引用类型在Springboot中的使用

4ye

Java spring 后端 springboot 8月日更

iOS开发:Xcode报错“Could not insert new outlet connection:Could not find any...”问题的解决方法

三掌柜

8月日更 8月

开发一个分布式IM(即时通信)系统!

小傅哥

Netty DDD 小傅哥 即时通信

【LeetCode】反转字符串中的元音字母Java题解

Albert

算法 LeetCode 8月日更

架构训练营模块五作业

喻高咏        

vue入门:定制自定义指令和过滤器

小鲍侃java

8月日更

SpringApplication启动run了啥

Rubble

8月日更

从源码角度解析线程池中顶层接口和抽象类

华为云开发者联盟

Java 线程 软件开发 高并发 线程池

李欲晓:加强关键信息基础设施安全保护的法治基石

郑州埃文科技

一文带你了解NB-IoT标准演进与产业发展

华为云开发者联盟

物联网 IoT NB-IoT

手撸二叉树之第二小的节点

HelloWorld杰少

数据结构与算法 8月日更

前端基础四之JavaScriptDOM与事件

ベ布小禅

8月日更

测试开发之系统篇-Docker常用操作

禅道项目管理

Docker 容器 测试开发

大模型应用的 10 种架构模式_生成式 AI_曹洪伟_InfoQ精选文章