当前位置: 首页 > article >正文

大语言模型应用的业务架构点

背景

在国内某小龙干了一段时间了,困于时间、资本、人力等等原因,其实应用在工程侧的业务架构建模并没有做好。但是,随着业务迭代和读论文,对于大语言模型的应用(自认为)有一定的认知了,那么业务建模或者架构的重点是可以梳理一下的了。主要关注业务逻辑和前端的架构(我负责的部分)。

整体认知

  1. AGI不一定是单一模型搞定一切。短期更可能是在多个垂类模型前加一个路由。这个路由可能是意图模型,也可能是MOE的gate。但是,这些都应该反馈到工程侧,形成一定的路径差异。在模型规模/能力远超现在的大小之前,组合小模型会比单一模型的效果好很多;只有要求极强的迁移能力时,单一巨型模型才是合理的。
  2. 接1,有一些意图是应该让用户主动选择的(豆包等的智能体中心很大一部分是在明确意图而不是选模型能力)。
  3. 不同形态的问题,执行的逻辑是不一样的,pe的逻辑也是不一样的。
  4. 输出部分不一定是和模型本体耦合的,而是可以以风格、功能来做特殊训练和插拔的(ChatGPT的json api)。
  5. 特殊token一定是后面做工程化中极为重要的手段,而且是要求从业务需求角度出发,反向向模型训练数据中插入大量的业务化token。
  6. 模型的应用开发流程大概是:模式定义->生成对应的数据->ft->测评,跟传统应用开发能对应上:产品定义->技术设计->coding->测试。

PE认知

PE是为了治疗模型的智障。智障来源于问题不清晰、思考不正确、信息不全、迁移和杂糅等。解决问题主要几个路径:

  1. x-shot这种想办法给例子的。
  2. COT这种引导模型多思考的,这里会有COT这种单路径的,也有TOT这种多分支的,还有ReAct这种。
  3. tooling。
  4. 反思,包括多条的选择(self-consistency)和单条内的修改(reflection)。
  5. 分而治之,planner类或我的POT bot。
  6. 整合,包括多种角色的(ChatDev)、多种知识背景的或者只有超参差异的(ER)。

可能出现的非传统流式形态

最传统形态就是模型一个文本流直接展示到端上,只做一些展示上的优化。

  1. 隐藏模型输出。对于COT、ReAct这些方式,模型输出的很大一部分是思路,这些思路又一定要输出(模型不会思考,只是next token)。所以标记(特殊token)和隐藏这些内容是非常重要的工程能力。
  2. 结构化思考过程。planner、POT这种,甚至人肉的chain规则,这些都是有可能被以结构化的方式来展示的。这些展示的合理、巧妙能极大的提升产品体验。包括了特殊token、特殊格式的规定和展示;chain的建模(openai assistant api的run-step)。
  3. 方法调用。这个包括了后端、前端的方法调用。之前文章的微服务部分简单提到过。细化下来,需要有一个双工长信道来做IPC,传统的trunk或者sse其实都不如websocket靠谱(经典面试题,如何设计跨语言的callback)。同样可以适配到run-step的体系下。
  4. 多流。所有整合类的模式,都需要多流的展示,因为所有这种模式如果只输出整合步骤的内容,首token时间会让产品直接不可用。
  5. 修改。流的每个部分都是可能被重新生成的(reflection)。需要有一个地方持有当前流内容、每段内容用特殊token标记出来,模型的反思以“将token1之后的内容替换为xxx”的形式输出。这里的替换直接反馈到流本体上。注意这里和隐藏输出会有交错,潜在bug会很多。

关键点

  1. 意图分流,以及对于意图->推理过程的管理。以及遍布产品形态内部的意图明确方式:比如重新生成时询问意图、生成样式等。意图作为核心context存在于整个产品生命周期中。
  2. 插件化,两级插件化:特殊token作为纯文本标记,调起特殊逻辑;run-step中的step,直接在流式中打断纯文本行为。
  3. 流累积和管理,不只是端需要做累积+展示,而是后端需要完整管理模型输出,且可能出现全量replace的情况。
  4. 双向流。websocket,这里有个不太懂的,是不是一分钟左右的websocket是不是工程上合理的。
  5. 流式信息样式的极大复杂化。特别是可能会出现各种浮层/子页面+浮层内流式输出的case,毕竟多流直接在正常流式中输出肯定是各种问题的。还要做飞书聊天卡片量级的卡片内样式的横向扩展的设计。

与前端无关的

  1. x-shot的选取和推荐。根据用户反馈、任务相似度、用户相似度做例子的选取(面向模型的推荐系统),以期大幅提高模型回答满意度。
  2. 部分模型层的插拔。以按照用户喜好切换输出模式(面向用户的推荐系统)。

http://www.kler.cn/a/314257.html

相关文章:

  • 进入未来城:第五周游戏指南
  • [pyspark] pyspark中如何修改列名字
  • 批量从Excel某一列中找到符合要求的值并提取其对应数据
  • 408笔记合集
  • 【JAVA基础】JVM是什么?
  • 前端面试笔试(二)
  • Transformer模型-7- Decoder
  • MATLAB绘图基础8:双变量图形绘制
  • Day25笔记-普通文件读写with上下文二进制文件csv文件
  • hadoop大数据平台操作笔记
  • 消息队列选型参考:Top5消息队列组件
  • Qt:智能指针QScopedPointer 的使用(以及如何写一个QScopedPointer )
  • [SDX35+WCN6856]SDX35 开启class/gpio子系统配置操作说明
  • 在Python中,类是用于定义对象的蓝图或模板,而对象则是根据类创建的具体实例
  • 【RPA私教课:UIPath】RPA 赋能科技企业,登录时验证码自动截取
  • SpringBoot 消息队列RabbitMQ 消息可靠性 数据持久化 与 LazyQueue
  • pytorch 同步机制
  • docker desktop windows stop
  • @EnableScheduling 和 @Scheduled 实现定时任务的任务延期问题
  • Linux:login shell和non-login shell以及其配置文件
  • MQ入门(4)
  • kubernetes基础命令
  • 论文阅读--Planning-oriented Autonomous Driving(一)
  • “华为杯”第十二届中国研究生数学建模竞赛-D题:面向节能的单/多列车优化决策问题研究(续)(附MATLAB代码实现)
  • IPsec-VPN中文解释
  • 数据结构:二叉树(一)