76.解决消息重复生成bug

article/2025/6/22 22:16:47

解决完编辑用户消息相关的bug之后重新生成又出现了新的新的新新的bug(本飘心已死~)

当点击重新重新生成按钮时会出现两个气泡:

这个bug出现的原因是:在regenerateResponse方法中,我们既重置了当前消息内容,又在startStreamingResponse中创建了一个新的消息。

所以需要再次修改这两个方法:

修改regenerateResponse方法,避免重复创建消息:

async regenerateResponse(index) {try {if (!this.currentConversation?.id) return;// 准备消息历史(排除上次的AI回复)const messagesToSend = this.messages.slice(0, index).filter(msg => msg.role !== 'assistant' || msg !== this.messages[index]).map(msg => ({ role: msg.role, content: msg.content }));// 重置当前消息内容而不创建新消息this.messages[index] = {role: 'assistant',content: '',isStreaming: true,renderedContent: ''};this.currentStreamingMessage = this.messages[index];this.isGenerating = true;// 创建新的中断控制器this.abortController = new AbortController();// 调用流式API重新生成await this.startStreamingResponse({messages: messagesToSend,conversationId: this.currentConversation.id,regenerateIndex: index // 添加这个参数告诉startStreamingResponse不要创建新消息}, this.abortController.signal);} catch (error) {console.error("重新生成失败", error);if (this.currentStreamingMessage) {this.currentStreamingMessage.content = "重新生成失败: " + (error.message || "未知错误");this.currentStreamingMessage.isStreaming = false;}this.isGenerating = false;}
},

然后修改startStreamingResponse方法:

async startStreamingResponse(requestData, signal) {this.closeEventSource();// 只有在不是重新生成时才创建新消息if (requestData.regenerateIndex === undefined) {// 创建新的AI消息const newMessage = {role: "assistant",content: "",isStreaming: true,renderedContent: ""};this.messages.push(newMessage);this.currentStreamingMessage = newMessage;} else {// 如果是重新生成,使用已存在的消息this.currentStreamingMessage = this.messages[requestData.regenerateIndex];}try {const response = await fetch('http://localhost:8080/api/chat/stream', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify(requestData),signal});// 其余代码保持不变...} catch (error) {this.handleStreamError(error, rawContent);}
}

这样修改后,当用户点击"重新生成"按钮时,系统会重用原有的消息气泡而不是创建新的气泡,从而避免了重复气泡的问题。

至此已没有新的bug出现,希望这个连续剧至此完结!!!


http://www.hkcw.cn/article/KLdaYYuJMg.shtml

相关文章

【Python连接数据库基础 01】从原生驱动到ORM框架:Python数据库连接完全指南

【Python连接数据库基础 01】从原生驱动到ORM框架:Python数据库连接完全指南 关键词:Python数据库连接、原生驱动、ORM框架、SQLAlchemy、PyMySQL、psycopg2、数据库编程、连接池、事务管理 摘要:本文从零开始讲解Python连接数据库的完整流程…

Oracle授权操作

目录 一、前置知识 1.使用ipconfig查看当前电脑的IP地址 2.查看Oracle数据库链接串 二、登录Oracle数据库 三、创建新用户、修改密码并授权 1.创建新用户并解锁 2.修改用户密码 3.授权用户登录 4.查看角色的权限范围 5.授予用户角色 6.撤销CONNECT角色 7.查看哪些用…

STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解

声明:此博客是我的学习笔记,所看课程是江协科技的CAN总线课程,知识点都大同小异,我仅进行总结并加上了我自己的理解,所引案例也都是课程中的案例,希望对你的理解有所帮助! 知识点1【CAN总线的概…

贾跃亭数度哽咽:散户救了我们的命,FF重生有望

6月3日,一段贾跃亭在首届“FFAI首年度股东日”活动上的讲话视频流出。一位从乐视早期就开始追随贾跃亭投资乐视和FF的股民自费从国内飞到洛杉矶参加活动,表达了对贾跃亭东山再起的期盼。贾跃亭在现场数度哽咽,表示FF能够存活下来主要归功于散户的支持。贾跃亭坦承,FF曾一度…

荣昌端午节旅游总收入近6亿元 文旅消费创新高

在刚刚过去的5月,荣昌区推出了一系列丰富多彩的旅游产品、文化活动和惠民举措,以满足游客多元化的个性化需求,多项数据创下历史新高。据荣昌区文旅委统计,5月1日至31日,全区共接待游客673.98万人次,同比增长224.31%;旅游总收入达377428.8万元,同比增长228.39%。具体来看…

哈佛大学寻求解冻儿童艾滋病研究拨款 法庭斗争持续

6月2日,哈佛大学请求一名联邦法官发布简易判决,以解冻特朗普政府自4月14日以来冻结的25亿美元资金。这些资金与国家安全威胁、癌症和传染病等研究相关。由于拒绝了白宫提出的一系列要求,哈佛大学收到了957份命令,要求冻结这些资金。在提交给法庭的文件中,哈佛大学详细说明…

Ubuntu22.04 安装 CUDA12.8

1.下载CUDA 由于我装完 Ubuntu22.04 后就自动带了最新的显卡驱动,就没有再去配置驱动。 先查看驱动能支持的CUDA最高版本,这里显示可支持到12.8。 nvidia-smi在CUDA的 说明文档 可查看CUDA对应的驱动版本要求。 在 CUDA Toolkit Archive 查找需要的 …

TomSolver 库 | config详解及其测试

一、C 关键特性解析 1. enum class 强类型枚举 enum class LogLevel { OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL }; enum class NonlinearMethod { NEWTON_RAPHSON, LM };核心特性: 类型安全:禁止隐式转换为整数作用域限定:必须…

2025年—Comfy UI 和 Stable Diffusion底层原理

为什么要先讲SD原理 ? 逻辑理解: ComfyUI是节点式操作,需要自行搭建工作流,理解原理才能灵活定制工作流学习效率: 基础原理不懂会导致后续学习吃力,原理是掌握ComfyUI的关键核心价值: ComfyUI最有价值的功能就是自主搭建工作流&a…

分糖果 两次遍历处理左右

这个题目本来打算两次遍历来写,但是细节处理上出了问题,我想的是距离两个1的距离最大值,但是其实并不是这样的,只有值递增的时候才能递增 题目地址 class Solution:def candy(self, ratings: List[int]) -> int:n len(ratings…

【设计模式-3.6】结构型——桥接模式

说明:本文介绍结构型设计模式之一的桥接模式 定义 桥接模式(Bridge Pattern)又叫作桥梁模式、接口(Interface)模式或柄体(Handle and Body)模式,指将抽象部分与具体实现部分分离&a…

vite构建工具

文章目录 1. 什么是构建工具2. webpack的缺点在哪?3. 区分vite脚手架和vite5. vite预加载5.1 包的加载5.2. vite依赖预构建 7. vite配置文件处理8. vite环境变量和模式8.1 环境变量8.2 模式 1. 什么是构建工具 在开发项目中,我们可能会使用到vue、react…

警方通报“男子拖拽6岁女童进小巷” 嫌疑人已被拘留将追责

6月3日,湖南娄底市公安局娄星分局通报了一起事件。5月20日下午,嫌疑人刘某某酒后行至娄底市娄星区涟滨中街附近,拖拽一名六岁女童进入居民区巷子。幸好被居民及时制止并报警。接警后,民警迅速赶到现场将刘某某控制。经侦查,刘某某涉嫌寻衅滋事已被拘留,将依法追究其刑事责…

下一个假期连休8天要等4个月 国庆中秋合并放

今天是端午节假期的最后一天。很多人关心下一次休假是什么时候。根据国务院办公厅关于2025年部分节假日安排的通知,下一轮节假日将在4个月后的国庆节和中秋节。这两个节日合并放假8天。责任编辑:zx0001

成品油价将迎年内第11次调价 或迎来小幅上涨

成品油价将迎年内第11次调价 或迎来小幅上涨!油价最新消息:2025年6月1日星期日,距离油价调整窗口开启只剩下两天。预计油价将小幅上涨,虽然涨幅不大,但对车主来说能省一点是一点,请相互转告。在本轮计价周期中,开局时油价每吨上涨140元,但由于国际油价下跌的影响,到第…

C. Basketball Exercise

time limit per test 2 seconds memory limit per test 256 megabytes Finally, a basketball court has been opened in SIS, so Demid has decided to hold a basketball exercise session. 2⋅n2⋅n students have come to Demids exercise session, and he lined up th…

【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的旅游论坛系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 …

基于Android的医院陪诊预约系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

随机性的起源

文章目录 随机性的起源模型权重初始化主要影响常见做法代码示例 数据采集与重排(加载与打乱)例子注意事项代码示例 非确定性算法Dropout带来的随机性代码示例不同运行时的算法卷积操作的实现差异例子解决方法小结 硬件与驱动程序随机性与生成式AI生成式A…

12.1 GUI 事件处理

Swing简介 不同于 AWT 使用重量级组件(每个组件对应有一个本地窗口系统资源),Swing 提供了轻量级组件,它们不是直接映射到本地窗口系统组件上,而是绘制出来的。因此,Swing 组件可以在不同的平台上保持一致的…