【高速缓存】RedisVL管理 LLM 对话消息历史指南
引言大语言模型LLM本质上是无状态的 —— 它不会记住之前对话中的任何内容。这在多轮对话中会带来挑战因为后续的问题往往依赖前文提供的上下文。为了让 LLM “记住” 之前聊过什么我们必须在每次调用时把整个对话历史重新传递给模型。但如果每次都传递全部历史随着对话变长token 数量会迅速膨胀导致延迟增加、成本飙升。我们需要一种聪明的方法来存储、检索和管理对话历史既能保证上下文完整又能控制开销。Redis 凭借其高性能、灵活的数据结构非常适合承担这一角色。本指南将带你全面了解 RedisVL 提供的MessageHistory和SemanticMessageHistory工具它们能帮你轻松管理 LLM 对话历史并实现基于语义相关性的智能上下文筛选。前置条件已安装 RedisVLpip install redisvl一个运行中的 Redis 实例推荐 Redis 8 或 Redis Cloud概要使用MessageHistory存储和检索对话消息通过session_tag管理多用户、多会话使用SemanticMessageHistory基于语义相似度获取相关上下文降低 token 消耗从历史中删除错误或不合适的消息保持上下文干净基本概念与初始化RedisVL 的MessageHistory类为对话历史提供了一个简单的键值存储接口。每条消息都由role角色和content内容组成这与主流 LLM API如 OpenAI的消息格式一致。支持的角色有system系统提示设定对话背景或行为规则user用户输入llm模型的回复fromredisvl.extensions.message_historyimportMessageHistory# 初始化一个名为 student tutor 的对话历史chat_historyMessageHistory(namestudent tutor)存储消息你可以单条添加也可以批量添加。# 添加一条系统消息chat_history.add_message({role:system,content:你是一个乐于助人的地理老师用简洁的短句回答关于欧洲国家的问题。})# 批量添加多条消息用户提问 模型回答chat_history.add_messages([{role:user,content:法国的首都是哪里},{role:llm,content:首都是巴黎。},{role:user,content:那西班牙的首都呢},{role:llm,content:首都是马德里。},{role:user,content:英国的人口是多少},{role:llm,content:截至2023年英国人口约为6700万。},])如果你习惯使用“一问一答”的方式MessageHistory还提供了store()便捷方法一条指令即可同时存储用户提示和模型响应prompt与葡萄牙相比英格兰的面积有多大response英格兰的陆地面积比葡萄牙大约大15000平方英里。chat_history.store(prompt,response)检索消息使用get_recent()可以按时间顺序获取最近的对话消息默认返回所有消息。contextchat_history.get_recent()formessageincontext:print(message)输出示例注意顺序由旧到新{role: user, content: 那西班牙的首都呢} {role: llm, content: 首都是马德里。} {role: user, content: 英国的人口是多少} {role: llm, content: 截至2023年英国人口约为6700万。} {role: user, content: 与葡萄牙相比英格兰的面积有多大} {role: llm, content: 英格兰的陆地面积比葡萄牙大约大15000平方英里。}注意系统消息system默认不会在get_recent()中返回除非你通过参数显式指定。这符合常见做法——系统消息通常作为静态上下文不在对话列表中重复展示。管理多用户和多会话当应用程序需要同时服务多个用户或同一用户的多个独立对话时使用session_tag可以为每条消息打上标签从而实现隔离。# 为学生二创建代数辅导会话chat_history.add_message({role:system,content:你是一个乐于助人的代数老师用简单的语言解答数学问题。},session_tagstudent_two)chat_history.add_messages([{role:user,content:方程 2x 3 7 中 x 的值是多少},{role:llm,content:x 的值是 2。},{role:user,content:方程 3y - 5 7 中 y 的值是多少},{role:llm,content:y 的值是 4。}],session_tagstudent_two)# 只检索该会话的消息formsginchat_history.get_recent(session_tagstudent_two):print(msg)输出将只包含student_two的代数对话不会混入地理对话。问题长上下文的挑战随着对话轮次增多历史消息列表越来越长。按照传统方式每次调用 LLM 时我们都需传递整个历史whileTrue:promptinput(请输入你的下一个问题)contextchat_history.get_recent()# 获取全部历史responsellm_api_call(prompt,context)# 将全部历史传给 LLMchat_history.store(prompt,response)这种方法虽然简单但存在两个严重问题Token 膨胀每次请求携带的历史消息越长消耗的 token 越多直接推高 API 费用。延迟增加模型处理长输入需要更长时间影响用户体验。一种常见的优化是截断历史只保留最近 N 条消息但这可能导致早期的重要上下文丢失。例如用户问“我之前问过的人口问题答案是什么”如果早期那条关于人口的问题已经被截断模型就无从回答。解决方案语义消息历史SemanticMessageHistory更智能的方法不是按时间截断而是按语义相关性筛选上下文。也就是说对于当前问题我们只从整个历史中提取那些与当前问题语义最相关的消息。RedisVL 的SemanticMessageHistory正是为此而生。它在存储消息时会同时生成向量嵌入查询时计算当前问题与历史消息的余弦距离只返回距离小于阈值的消息即最相关的那些。初始化与使用fromredisvl.extensions.message_historyimportSemanticMessageHistory semantic_historySemanticMessageHistory(nametutor)# 将之前的历史消息导入语义历史也可以直接从空开始semantic_history.add_messages(chat_history.get_recent(top_k8))获取相关上下文现在当用户提问时我们不是拿回全部历史而是获取最相关的部分prompt关于英格兰的面积我学到了什么semantic_history.set_distance_threshold(0.35)# 设置相似度阈值越小越严格contextsemantic_history.get_relevant(prompt)formsgincontext:print(msg)输出可能仅包含那条关于英格兰面积的问题因为它与当前问题语义最接近。其他不相关的消息如首都问题、人口问题被过滤掉了。调整阈值阈值决定了“相关性”的严格程度。余弦距离范围是 [0, 2]0.0要求几乎完全相同的语义匹配极其严格2.0包含所有消息相当于无筛选你可以根据场景灵活调整semantic_history.set_distance_threshold(0.7)# 放宽阈值得到更多相关消息larger_contextsemantic_history.get_relevant(prompt)formsginlarger_context:print(msg)此时可能会返回更多消息包括人口问题等因为它们与“英格兰”有一点关联。下面这张流程图清晰地对比了传统全量历史与语义筛选历史的差异语义筛选方式是否用户提问将问题向量化在历史消息向量库中搜索相似项距离 阈值将相关消息纳入上下文忽略将筛选后的上下文 新问题传给 LLM得到回答且 token 更少传统方式用户提问获取全部历史消息将全部历史 新问题传给 LLM得到回答对话控制删除错误消息LLM 有时会“幻觉”hallucinate给出不正确的信息。如果不及时纠正这些错误信息会持续被当作上下文传递污染后续回答。SemanticMessageHistory提供了删除指定消息的功能。# 存储一个错误信息摩纳哥不是欧洲最小国家梵蒂冈才是semantic_history.store(prompt欧洲最小的国家是哪个,response摩纳哥是欧洲最小的国家面积仅0.78平方英里。# 错误)# 获取最近消息的原始数据包含 entry_idcontextsemantic_history.get_recent(top_k1,rawTrue)bad_keycontext[0][entry_id]# 获取该消息的唯一标识符# 删除该消息semantic_history.drop(bad_key)# 再次查看历史错误消息已消失corrected_contextsemantic_history.get_recent()formsgincorrected_context:print(msg)删除后错误消息不再出现在上下文中后续 LLM 调用就不会受到误导。统计消息数量使用count()方法可以获取当前会话中的消息总数可指定session_tag。print(f会话中共有{chat_history.count()}条消息)# 输出会话中共有 7 条消息总结MessageHistory提供基础的消息存储、检索和多会话隔离适合简单的对话管理。长上下文的挑战全量传递历史会导致 token 浪费和成本上升。SemanticMessageHistory基于向量相似度智能筛选与当前问题最相关的历史消息大幅降低 token 消耗同时保留关键信息。对话修复支持按entry_id删除错误消息保持上下文干净。统计与监控使用count()了解对话规模。

相关新闻

速卖通违反欧盟《数字服务法》,被处 5.5 亿欧元罚款!需在 2026 年 10 月 20 日前整改

速卖通违反欧盟《数字服务法》,被处 5.5 亿欧元罚款!需在 2026 年 10 月 20 日前整改

速卖通因产品管控不力领欧盟巨额罚单速卖通(AliExpress)因未能阻止非法、不安全或假冒产品在其电商平台上销售,违反了欧洲《数字服务法》(DSA)规定,被处以 5.5 亿欧元(约合 6.29 亿美元&#xf…

2026/7/22 23:06:06阅读更多 →
OpenHarmony API23 四层HAR+HSP分层架构实战

OpenHarmony API23 四层HAR+HSP分层架构实战

一、前言:为什么不要再写单模块鸿蒙项目?很多鸿蒙初学者、在校毕设项目、小型Demo 全部采用 单 Entry 单体开发,看似写得快,实则隐患极大:所有工具、页面、业务逻辑全部堆在 entry,代码极度混乱无分层、无规…

2026/7/22 23:06:06阅读更多 →
边缘AI主控测评:飞凌RV1126B核心板凭什么更稳更省

边缘AI主控测评:飞凌RV1126B核心板凭什么更稳更省

边缘AI落地加速背景下,核心板作为设备“大脑”,直接决定项目成败。对于中小企业和项目方而言,选型核心是在千元内同价位区间,找到“稳定可靠、成本可控”的高性价比方案。目前千元内边缘AI核心板市场竞争激烈,飞凌嵌入…

2026/7/22 23:06:06阅读更多 →
LangChain Agent开发入门:从零构建智能决策AI

LangChain Agent开发入门:从零构建智能决策AI

1. 项目概述:LangChain Agent开发入门最近在AI应用开发领域,LangChain的Agent功能引起了广泛关注。作为一个让大语言模型(LLM)具备自主决策能力的框架,它能让开发者构建出真正"会思考"的AI应用。今天我就带大家从零开始&#xff0c…

2026/7/23 0:00:28阅读更多 →
AI训推一体化平台架构设计与工程实践

AI训推一体化平台架构设计与工程实践

1. 项目概述"AI模型训练与推理一体化平台"是当前企业级AI应用落地的核心基础设施。作为一名在AI工程化领域深耕多年的从业者,我见证了这个领域从早期的训练与推理分离架构,到如今训推一体化的完整演进过程。这种平台本质上是通过统一的软硬件架…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
PostgreSQL refint 允许栈缓冲区溢出和 SQL 注入HGVE-2026-E014

PostgreSQL refint 允许栈缓冲区溢出和 SQL 注入HGVE-2026-E014

文章目录环境BUG/漏洞编码症状触发条件解决方案环境 系统平台:N/A 版本:9.0.3,9.0.4,9.0.5,4.5.8,4.5.10,4.5.11,6.0.4 BUG/漏洞编码 HGVE-2026-E014 症状 PostgreSQL refint 模块中的栈缓冲区溢出,允许非特权数据库用户以运行数据库的操…

2026/7/22 23:58:28阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:00:28阅读更多 →
从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:28阅读更多 →
油泥处理设备哪里能买到

油泥处理设备哪里能买到

油泥处理设备哪里有?这是许多从事油田、炼化、清罐业务的从业者最关心的问题。根据河南三丰环保设备有限公司的行业经验,选购油泥处理设备的核心在于设备能否适配当地环保法规与原料特性,而非单纯看价格。该公司总经理王钦田先生指出&#xf…

2026/7/23 0:00:28阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/22 22:56:18阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/22 18:55:50阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/22 18:55:50阅读更多 →