llm chat场景下的数据同步
背景
正常的chat/im通常是有单点登录或者利用类似广播的机制做多设备间内容同步的。而且由于长连接的存在,数据同步(想起来)相对简单。而llm的chat在缺失这两个机制的情况下,没见到特别好的做到了数据同步的产品。
llm chat主要两个特点:1. chat的输出过程是耗时的,并不是正常chat的完整回复;2. 业务形态不适合跨轮长连接。
原则和场景
llm的对话历史由于会直接影响模型的下一轮推理,同时用户在流式过程中的操作和模型输出的结果会有明显时间差。故形成一个简单原则:前端无错误时以前端为准,用户看到的必须和模型看到的一致。
场景上会有两大部分:1. 前端操作,对需要对模型输出进行覆盖;2. 后端数据比前端要新,需要择机同步给前端。这部分又有几种情况:a. 多点登录的情况下,另一个设备有新聊天;b. 推理被触发,但前端没有收到数据,随后恢复。恢复可能是流中和流结束后。
解决
整体话术遵循该DDD的定义。
整体上可以认为是redis主从模式的变种,本文的数据同步已经上线,方案可以直接拿来抄,问题不大。
总体上,redis的runid与对话的thread_id对等,offset与入库时间戳对等。广义的循环不变式是数据和时间戳一一对应,前后端均根据时间戳计算出diff,相互传递数据做更新。
场景1
在发生任何前端修改消息的操作时(停止推理、修改等)。此时遵循原则前半句。前端为master,后端为slave。数据是前端在上次时间戳之后有变化的消息。这些变化可以做为run接口的额外更新数据传递到后端,或者一个独立接口。
然后转换为后端master,前端slave,要求返回后端更新和此次时间戳。
场景2.a
此时遵循原则后半句,仅在下次推理开始时同步。后端master,前端slave。在推理流的开头返回需要更新到message数据,并直接在store/model更新数据。更新后需要携带此次更新的时间戳,由前端记录。数据更新后正常进行本次推理。
场景2.b
是2a的更复杂版本,是需要续流的。如果由历史触发,只需要接受流。如果是多轮触发,还需要将本次推理做pending,等上一轮流结束后再触发新一轮的推理。
细节
- 每一个内容类step都关联一个messageid,默认支持多消息的交错更新。
- 控制类step要有创建message、结束message之类的行为,来做多轮或者multiagent。
- 借由这个更新机制,历史和推理可以直接统一成一个处理模式,甚至所有可能更新数据的都可以同一个模式,尽可能增加数据同步的时机。
- 存储和推理应该是两个模块,由node做整合。推理依赖和理解存储,其间流转的数据应该都是存储定义的格式。
- 存储分静态和流式,流式用redis的list就行。流式存储的是一个run,静态存储的是thread和message。
相关文章:
llm chat场景下的数据同步
背景 正常的chat/im通常是有单点登录或者利用类似广播的机制做多设备间内容同步的。而且由于长连接的存在,数据同步(想起来)相对简单。而llm的chat在缺失这两个机制的情况下,没见到特别好的做到了数据同步的产品。 llm chat主要两…...
机器学习经典算法
机器学习经典算法学习和分享。 k近邻算法 线性回归 梯度下降法 PCA主成分分析法 多项式回归 逻辑回归 支撑向量机SVM 决策树 随机森林 评价分类指标...
Scala中的泛型
类型参数 ---- 泛型(数据类型是变化的) (1) 可以有多个 (2) 名称合法就行,没有固定的,一般用T(Type) 在Scala中,用[]表示。在Java中用<>表示 1. 与数据类型的区别 List是数据类型,表示一个列表。[Int]表示泛型,它…...
数据分析特征标准化方法及其Python实现
数据分析特征标准化方法及其Python实现 1、概述 在数据分析中,对特征进行标准化主要是: 1、消除量纲影响 不同特征可能具有不同的量纲和数量级。 例如,一个特征可能是以米为单位的长度,而另一个特征可能是以秒为单位的时间。直接使用这些具有不同量纲的原始数据进行分析…...
UnityShaderLab 实现程序化形状(一)
1.实现一个长宽可变的矩形: 代码: fixed4 frag (v2f i) : SV_Target{return saturate(length(saturate(abs(i.uv - 0.5)-0.13)))/0.03;} 2.实现一个半径可变的圆形: 代码: fixed4 frag (v2f i) : SV_Target{return (distance(a…...
前端数据安全防护(控制台)
目录 前言 禁用右键菜单 禁用快捷键 监控控制台 完整逻辑 前言 前端的数据在浏览器中一直处于一个裸奔的状态,只要是稍微懂一点计算机的人,都可以在浏览器的控制台中拿到前端页面的所有数据,包括和后端的交互数据。为了…...
自己玩虚拟机:vagrant,virtual box,centos
vagrant 访问Vagrant官网 https://www.vagrantup.com/ 点击Download Windows,MacOS,Linux等 选择对应的版本 AMD64 (x86_64) I686 (x86) 傻瓜式安装 命令行输入vagrant,测试是否安装成功 vagrant -v 可以查看当前版本 virtual box 访…...
Frida框架HOOK RegisterNatives函数
使用Frida框架HOOK RegisterNatives函数,获取动态注册的函数地址、名称、签名、class名称、所属的so文件名称、so文件加载基址、函数在so文件中的地址。 废话不多说,上代码: 运行命令:frida -U -f in.****** -l RegisterNatives…...
[创业之路-189]:《华为战略管理法-DSTE实战体系》-2- 生存与发展的双重旋律:短期与长期、战术与战略的交响乐章
目录 生存与发展的双重旋律:短期与长期、战术与战略的交响乐章 一、生存:短期视角下的战术布局 二、发展:长期视角下的战略规划 三、短期与长期、战术与战略的融合与平衡 四、结语:在生存与发展的交响曲中奏响辉煌 生存与发展…...
TDengine 部署
TDengine是一款开源高性能的时序数据库,其部署过程可以根据不同的环境和需求进行灵活配置。以下将详细介绍TDengine的部署步骤,包括单节点部署和集群部署。 一、单节点部署 下载安装包: 访问TDengine的官方网站或GitHub仓库,下载…...
【前端】20种 Button 样式
20种 Button 样式 在前端开发中,Button 按钮的样式设计是提升用户交互体验的重要一环。以下是20种常见的Button样式,这些样式主要基于CSS实现,可以根据具体需求进行调整和组合。 1. 默认样式 CSS 样式:.button { background-co…...
机器人构建详解:售前售后服务客服机器人与广告生成机器人的微调数据处理方法
引言 大模型(如BERT、GPT等)在自然语言处理任务中展现了强大的能力,但为了使其更贴合特定应用场景,通常需要进行微调。本文将详细讲解如何为售前售后服务的客服机器人和广告生成机器人准备高质量的微调数据,并通过具体…...
mysql的执行计划分析和索引下推以及索引长度计算
1 执行计划介绍 执行计划(Execution Plan)是数据库查询优化的重要工具,用于展示数据库如何执行 SQL 查询的详细过程。它包含了查询操作的步骤、各个步骤的执行顺序、使用的索引、访问的表、连接方式、预计的成本等信息 可以显示SQL语句最终…...
C#中的string操作详解-截取、分割、连接、替换等
在C#中,string 类提供了许多用于操作字符串的方法,包括截取、分隔和连接等。以下是一些常用字符串操作的介绍和实例: 1. 截取字符串 Substring 方法 用于从字符串中截取子字符串。 语法: //从startIndex开始截取,…...
Redis Cluster 分片机制
Redis 集群是 Redis 提供的一种分布式实现,用于水平扩展数据存储能力。通过 Redis 集群,可以将数据分片存储在多个 Redis 节点上,同时提供高可用性和故障转移功能。 分片(Sharding): Redis 集群将数据划分…...
论文结论:GPTs and Hallucination Why do large language models hallucinate
GPTs and Hallucination 当一个主题有普遍共识,并且有大量语言可用于训练模型时,大模型的输出可以反映出该共识观点在没有足够关于主题的语言示例【晦涩/数据有限】,或者主题有争议,或是对主题没有明确共识的情况下,就…...
CSS在线格式化 - 加菲工具
CSS在线格式化 打开网站 加菲工具 选择“CSS在线格式化” 或者直接访问 https://www.orcc.online/tools/css 输入CSS代码,点击左上角的“格式化”按钮 得到格式化后的结果...
组件通信(父传子,子传父,跨组件通信)
组件(component)是vue.js最核心的功能,是可扩展的HTML元素。每个页面都是一个HTML。以.vue结尾的文件,都可以叫组件。 场景:将一个完整的项目,拆分成不同的功能模块。 注意:组件首字母要大写。 …...
JWT 令牌:原理、应用与安全考量
深入理解 JWT 令牌:原理、应用与安全考量 文章目录 深入理解 JWT 令牌:原理、应用与安全考量一、引言二、JWT 令牌与传统方式的区别(一)传统身份验证方式的特点与局限(二)JWT 令牌的优势 三、JWT 令牌的字段…...
YOLOv5+pyqt5+摄像头在特定条件下进行目标检测并采集原始数据
项目介绍 项目地址 GitHub - biabu0/Yolov5_D435i: 通过YOLOV5与pyqt5实现一个使用D435i深度摄像头采集特定需求与场景下的深度数据的小程序 通过YOLOV5对指定的区域进行检测,当检测到目标进入特定区域时,开始保存数据,摄像头采用D435i深度…...
3大核心优势:为什么GanttProject能让你秒懂项目管理
3大核心优势:为什么GanttProject能让你秒懂项目管理 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 你是否曾经面对复杂的项目计划感到无从下手?GanttProject这款免…...
49_《智能体微服务架构企业级实战教程》智能助手主应用服务之工具执行节点
前言 配套视频教程: 在 Bilibili课堂、CSDN课程、51CTO学堂 同步发售,提供:源码+部署脚本+文档。 bilibili课堂视频教程:智能体微服务架构企业级实战教程_哔哩哔哩_bilibili CSDN课程视频教程:智能体微服务架构企业级实战教程_在线视频教程-CSDN程序员研修院 51CTO学堂…...
办公自动化__简单日历工具
办公自动化__简单日历工具 一、概述用python编写的获取日历工具,输入年份并将在屏幕上打印全年12一个月,星期、日期、第几周对应关系。 利用到calendar、datetime、msvcrt三个库。 二、主要涉及思路 按照输入年份,循环使用clendar库显示日…...
容器镜像深度分析:Quaid工具的设计原理与DevOps实践
1. 项目概述:Quaid,一个为现代开发者打造的容器镜像分析利器如果你和我一样,日常工作中需要频繁地处理Docker镜像,无论是进行安全审计、优化镜像体积,还是单纯地想搞清楚一个镜像里到底“藏”了什么,那你一…...
别再为LocalDateTime头疼了!SpringBoot 3.x全局配置Jackson与表单提交的完整避坑指南
SpringBoot 3.x日期处理终极指南:从Jackson到表单提交的全链路解决方案 每次看到控制台抛出Failed to convert from type [java.lang.String] to type [java.time.LocalDateTime]异常时,我都想对着屏幕大喊:"我知道日期格式应该是yyyy-M…...
告别依赖地狱:手把手教你用Docker一键部署带GUI的Kettle(避坑libwebkitgtk)
告别依赖地狱:用Docker容器化部署Kettle的终极实践指南 每次在Linux服务器上安装Kettle时,你是否也经历过这样的噩梦?先是提示缺少libwebkitgtk库,然后发现yum仓库里根本没有这个包,接着开始疯狂搜索各种第三方源&…...
[NLP]Huggingface模型与数据集高效下载全攻略:告别网络瓶颈
1. 为什么你需要这篇Huggingface下载指南 作为一名NLP工程师,我太理解那种盯着进度条干着急的感受了。记得上个月我在复现一个对话模型时,光是下载6B参数的模型就花了整整一上午——不是因为模型太大,而是公司网络时不时抽风,每次…...
北航毕业论文LaTeX模板终极指南:快速掌握专业排版技巧
北航毕业论文LaTeX模板终极指南:快速掌握专业排版技巧 【免费下载链接】BUAAthesis 北航毕设论文LaTeX模板 项目地址: https://gitcode.com/gh_mirrors/bu/BUAAthesis 还在为北航毕业论文的格式要求而烦恼吗?手动调整页边距、页眉页脚、参考文献格…...
Diablo Edit2:解放暗黑破坏神II角色定制的终极免费工具
Diablo Edit2:解放暗黑破坏神II角色定制的终极免费工具 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 还在为暗黑破坏神II中无尽的刷怪升级感到疲惫吗?想要快速体验不同职…...
coinbasepro-python安全最佳实践:保护你的API密钥和交易数据
coinbasepro-python安全最佳实践:保护你的API密钥和交易数据 【免费下载链接】coinbasepro-python The unofficial Python client for the Coinbase Pro API 项目地址: https://gitcode.com/gh_mirrors/co/coinbasepro-python 在使用coinbasepro-python进行加…...
