Python 如何管理 AI 多轮对话上下文:消息窗口、摘要与历史记录
聊天功能看起来只是不断发送 messages但真正做成可维护的多轮对话需要处理历史消息、上下文长度和会话隔离。为什么要管理上下文单轮请求只需要发送当前问题多轮对话则需要让模型知道之前发生过什么。如果每次都把所有历史消息完整发送可能出现请求内容越来越长响应速度变慢上下文超过限制无关历史影响当前回答不同用户的会话互相混淆因此多轮对话的核心不是无限保存消息而是保留当前任务真正需要的信息。一、用列表保存一段会话最简单的方式是使用列表messages[{role:system,content:你是一个专业的技术助手。}]defadd_message(role:str,content:str):messages.append({role:role,content:content})每次用户提问时先保存用户消息再调用模型最后保存模型回答。二、封装一次完整对话fromopenaiimportOpenAI clientOpenAI(api_keyyour-api-key,base_urlhttps://your-api-domain.com/v1,)messages[{role:system,content:你是一个专业的技术助手。}]defchat(user_input:str)-str:messages.append({role:user,content:user_input})responseclient.chat.completions.create(modelyour-model-name,messagesmessages,)answerresponse.choices[0].message.content messages.append({role:assistant,content:answer})returnanswer这样可以保留上下文但消息会不断增长所以还需要设置窗口大小。三、只保留最近几轮消息deftrim_messages(messages:list[dict],max_messages:int10)-list[dict]:system[itemforiteminmessagesifitem[role]system]history[itemforiteminmessagesifitem[role]!system]returnsystemhistory[-max_messages:]调用前处理messagestrim_messages(messages,max_messages10)这种方法实现简单适合短对话和上下文关系不复杂的场景。四、为什么简单截断有时不够如果较早的消息包含重要信息直接删除可能导致模型忘记用户的目标已经确定的方案项目约束已完成的步骤这时可以把较早内容压缩成摘要再保留最近几轮原始消息。五、使用摘要保存长期信息可以设计一个会话对象classConversation:def__init__(self):self.summaryself.recent_messages[]defbuild_messages(self):messages[]ifself.summary:messages.append({role:system,content:f历史摘要{self.summary}})messages.extend(self.recent_messages)returnmessages摘要中建议只保留当前目标已确认事实关键约束待处理事项不要把所有原文重新复制进去否则摘要就失去了作用。六、给每个用户单独保存会话多用户应用不能共用一个全局messages列表。可以使用会话 IDsessions{}defget_session(session_id:str)-list[dict]:ifsession_idnotinsessions:sessions[session_id][{role:system,content:你是一个专业的技术助手。}]returnsessions[session_id]调用时messagesget_session(user-001)messages.append({role:user,content:我的问题})实际项目中session ID 应该来自登录用户、会话令牌或业务请求而不是直接使用用户输入作为唯一标识。七、会话持久化如果只保存在内存中程序重启后历史会丢失。小型项目可以使用 SQLite 保存消息CREATETABLEmessages(idINTEGERPRIMARYKEYAUTOINCREMENT,session_idTEXTNOTNULL,roleTEXTNOTNULL,contentTEXTNOTNULL,created_atREALNOTNULL);查询某个会话时按created_at排序再根据窗口策略取最近消息。八、上下文管理的几个注意点1. 系统提示词不要重复堆叠每次构建消息时保持一份清晰的系统提示即可。2. 不要无限保存原始消息要设置窗口、摘要或过期策略。3. 会话之间必须隔离不要让不同用户共享同一个消息列表。4. 摘要要定期更新历史变长后再生成一次更短的摘要。5. 注意隐私数据保存前应考虑脱敏、权限和过期删除。九、推荐的管理顺序可以按这个顺序实现列表保存消息保留最近几轮增加会话 ID使用摘要保存长期信息用 SQLite 或其他存储持久化增加过期和清理机制先解决会话隔离和长度控制再考虑复杂的记忆系统。十、结语多轮对话上下文管理的核心是保存有用的信息删除无关的历史控制消息长度隔离不同会话必要时使用摘要对于 Python AI 项目来说合理的上下文管理可以让聊天功能更稳定也方便后续接入数据库、缓存和权限控制。免责声明本文内容仅用于技术交流与经验分享具体实现请结合项目实际情况调整。

相关新闻

Hive数组高阶应用:从建模到性能优化的实战指南

Hive数组高阶应用:从建模到性能优化的实战指南

1. 项目概述:为什么Hive数组值得你花时间研究?如果你在数据仓库里摸爬滚打过一阵子,肯定对Hive不陌生。处理海量数据时,我们常常会遇到一种情况:一条记录里,某个字段不是单一值,而是一组值。比如…

2026/8/2 4:38:25阅读更多 →
220V交流电PCB设计:安规距离、布局布线与EMC防护实战指南

220V交流电PCB设计:安规距离、布局布线与EMC防护实战指南

1. 项目概述:直面高压的挑战在电子设计领域,处理220V交流市电的PCB设计,是一个既基础又充满挑战的门槛。它不像低压数字电路那样可以“随意挥洒”,每一次走线、每一个元件的摆放,都直接关系到产品的安全、可靠与合规。…

2026/8/2 4:38:25阅读更多 →
3种方法彻底移除Windows Defender:从基础隐藏到完全卸载的完整指南

3种方法彻底移除Windows Defender:从基础隐藏到完全卸载的完整指南

3种方法彻底移除Windows Defender:从基础隐藏到完全卸载的完整指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh…

2026/8/2 4:38:25阅读更多 →
[具身智能-702]:ROSMASTER-M1 的 WIFI 是终端,还是热点?

[具身智能-702]:ROSMASTER-M1 的 WIFI 是终端,还是热点?

ROSMASTER-M1(亚博智能,搭载 RDK X5 版本)WiFi 模式说明术语先厘清:AP 模式 热点(发射 WiFi,别人连小车)STA 模式 无线终端(小车去连接路由器 WiFi)1、出厂默认状态✅ …

2026/8/2 5:58:47阅读更多 →
微信小程序连接本地MySQL数据库:正确架构与全栈开发实战

微信小程序连接本地MySQL数据库:正确架构与全栈开发实战

1. 项目缘起:为什么要在小程序里连接本地数据库?最近在社区里看到不少朋友在问,微信小程序能不能直接连自己电脑上的MySQL数据库做开发测试。乍一听,这想法挺自然的——本地环境跑得快,调试也方便,不用折腾…

2026/8/2 5:58:47阅读更多 →
macOS下载、安装uv-0.12.0(附安装包uv-aarch64-apple-darwin.tar.gz)

macOS下载、安装uv-0.12.0(附安装包uv-aarch64-apple-darwin.tar.gz)

文章目录1. uv 简介2. 0.12.0 版本亮点3. 获取安装包4. 快速开始常用命令1. uv 简介 uv 是一款使用 Rust 编写的极速 Python 包与项目管理器(package and project manager),由 Astral 团队(知名 Python 代码检查工具 Ruff 的缔造…

2026/8/2 5:58:47阅读更多 →
Visual C++ Redistributable AIO:终极解决方案,一键搞定Windows运行库问题 [特殊字符]

Visual C++ Redistributable AIO:终极解决方案,一键搞定Windows运行库问题 [特殊字符]

Visual C Redistributable AIO:终极解决方案,一键搞定Windows运行库问题 🚀 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你…

2026/8/2 5:58:47阅读更多 →
Linux下载、安装uv-0.12.0(附安装包uv-x86_64-unknown-linux-gnu.tar.gz)

Linux下载、安装uv-0.12.0(附安装包uv-x86_64-unknown-linux-gnu.tar.gz)

文章目录1. uv 简介2. 0.12.0 版本亮点重要变更安全性增强稳定化功能破坏性变更速览3. 获取安装包4. 快速开始常用命令1. uv 简介 uv 是 Astral 团队(也是 Ruff 的创建者)打造的极速 Python 包与项目管理器,使用 Rust 编写。由 Charlie Mars…

2026/8/2 5:58:47阅读更多 →
动画角色塑造技术:权杖象征与悲剧反派的情感构建

动画角色塑造技术:权杖象征与悲剧反派的情感构建

《小马宝莉》这部动画看似是面向儿童的奇幻作品,但其中蕴含的角色深度和情感张力,往往让成年观众也为之动容。在众多反派角色中,有一位角色的故事线特别值得深入探讨——她手中的权杖,表面上是一件强大的魔法道具,实际…

2026/8/2 5:56:47阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/2 0:00:10阅读更多 →
限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

限时公开!某头部SaaS公司内部AI模板工厂架构文档(含5类行业模板源码+性能压测报告)

更多请点击: https://intelliparadigm.com 第一章:AI模板批量生成的核心价值与落地全景 AI模板批量生成正从实验性工具演进为现代软件工程的关键基础设施。它通过语义理解、上下文感知与结构化约束,将重复性高、模式明确的代码/文档/配置生成…

2026/8/2 0:00:12阅读更多 →
如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南

如何快速找回消失的网页:Web Archives浏览器扩展终极指南 【免费下载链接】web-archives Browser extension for viewing archived and cached versions of web pages, available for Chrome, Edge and Safari 项目地址: https://gitcode.com/gh_mirrors/we/web-a…

2026/8/2 0:00:13阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/2 1:29:34阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/2 2:32:55阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/2 2:09:20阅读更多 →