大模型多轮对话功能开发全过程
一、学习路线梳理多轮对话背景知识、基础工作原理动手编写多轮对话入门 Demo使用 Redis 完成对话消息持久化保存聊天记录开发核心接口创建会话、会话列表、发送消息、查询历史消息多轮对话逻辑优化滑动窗口 历史消息压缩解决上下文 token 过长问题提示词组成原理、提示词工程实战二、核心代码片段FastAPI Redis简易示例1. Redis 存储聊天消息消息持久化import redis import json from typing import List, Dict # 连接本地Redis部署到服务器后修改host redis_client redis.Redis( host127.0.0.1, port6379, db0, decode_responsesTrue ) # 保存单条聊天消息 def save_message(session_id: str, role: str, content: str): :param session_id: 会话唯一ID :param role: user / assistant :param content: 对话内容 msg_item json.dumps({ role: role, content: content }) # 列表存储有序保存对话 redis_client.rpush(fchat:session:{session_id}, msg_item) # 获取会话全部历史消息 def get_history(session_id: str) - List[Dict]: raw_list redis_client.lrange(fchat:session:{session_id}, 0, -1) return [json.loads(item) for item in raw_list] # 清空某个会话历史 def clear_history(session_id: str): redis_client.delete(fchat:session:{session_id})# 连接redisr redis.Redis(host127.0.0.1, port6379, db0, decode_responsesTrue)保存消息 将对话放到我们定义的列表中将2. 创建会话、获取会话列表简单接口新建会话本质就是生成唯一 ID每一个聊天窗口对应一个 session_id。from fastapi import FastAPI import uuid from redis_util import redis_client app FastAPI(title多轮对话学习Demo) # 创建新会话 app.post(/session/create) def create_new_session(): session_id str(uuid.uuid4()) return { code: 200, msg: 创建会话成功, data: {session_id: session_id} } # 获取当前所有会话列表 app.get(/session/list) def get_session_list(): # 匹配所有会话key all_keys redis_client.keys(chat:session:*) session_ids [k.replace(chat:session:, ) for k in all_keys] return { code: 200, data: session_ids }3.发送消息 查询历史对话接口实现用户提问拼接历史上下文传给大模型拿到回复并存入 Redisfrom redis_util import save_message, get_history import openai # 配置大模型API密钥 openai.api_key 你的key openai.base_url 模型接口地址 # 查询会话历史消息 app.get(/chat/history/{session_id}) def query_chat_history(session_id: str): history get_history(session_id) return {code: 200, data: history} # 用户发送消息获取AI回复 app.post(/chat/send) def send_message(session_id: str, user_content: str): # 1. 保存用户消息 save_message(session_id, user, user_content) # 2. 读取完整历史 history get_history(session_id) # 3. 请求大模型 resp openai.ChatCompletion.create( modelgpt-3.5-turbo, messageshistory ) ai_reply resp[choices][0][message][content] # 4. 保存AI回复 save_message(session_id, assistant, ai_reply) return { code: 200, reply: ai_reply }调用大模型 将我们前面输出的内容全部放到redis缓存中 这样对话输出的时候可以直接从redis中来获取我们回答的数据 以此实现对话的效果4 滑动窗口优化限制上下文长度重点直接把所有历史传给大模型存在严重问题对话轮次越多上下文越长token 消耗飙升甚至超出模型最大上下文限制。 课程提供两种方案滑动窗口截断 历史消息摘要压缩。 先实现简易滑动窗口只保留最近 N 轮对话。def get_window_history(session_id: str, max_round: int 6): 滑动窗口只保留最近max_round轮问答 full_history get_history(session_id) if len(full_history) max_round: return full_history # 截取末尾最新消息 return full_history[-max_round:]二、知识点学习总结多轮对话的原理1.大模型本身没有记忆能力所谓的上下文就是将历史记录放大redis中 然后再从redis中去获取之前的记录来实现上下文联动的效果的我们将每条用户的问题 以及 ai的回答每次成功后编组 发送到redis中 记录单挑的回答 最后将redis整个数据输出出来一个列表 就能看见什么时候问的什么问题 ai的回答内容了2.提示词的重要性同样的提问系统提示词不同AI 回答风格、准确性差距非常明显。学习了提示词基础组成角色定义、任务要求、输出格式、约束条件。后续还需要持续练习提示词工程。3.消息存储ai无法存储那么多数据的时候 就可以用到我们的临死数据库 redis———————————————————————————————————————————本文介绍了一个基于FastAPI和Redis的多轮对话系统实现方案。主要内容包括1学习路线从多轮对话原理到Redis消息持久化再到接口开发和优化2核心代码实现使用Redis存储聊天记录提供创建会话、发送消息、查询历史等接口3性能优化采用滑动窗口和历史消息压缩解决token过长问题4关键知识点大模型无记忆需依赖外部存储提示词工程的重要性以及Redis作为临时数据库的优势。该系统实现了基本的对话功能并通过Redis有效管理上下文为构建更复杂的对话系统奠定了基础。

相关新闻

从商品推荐到 Agent:RAG 与长期记忆为什么都像一套召回排序系统

从商品推荐到 Agent:RAG 与长期记忆为什么都像一套召回排序系统

做商品推荐时,我们面对的是一个经典问题:商品很多,但用户在当前时刻真正感兴趣的只有少数几个。系统需要从海量商品中找出候选,过滤无效内容,按用户兴趣排序,并通过后续点击和购买持续修正结果。 RAG 和 Ag…

2026/8/9 5:27:28 阅读更多 →
别再死记复杂度!手把手带你推导所有经典案例 —数据结构壹

别再死记复杂度!手把手带你推导所有经典案例 —数据结构壹

你好,我是林森lsjs 我的Github 地址:sqyCoder (Qiyang) GitHub 以博文记录成长,用心打磨代码与思维 目录 一、集合类引入 1.与数据结构的联系 二、时间复杂度 1.概念 2.计算 1.1 例1:O (N) 1.2 例2:O(MN) 1.3…

2026/8/9 5:27:28 阅读更多 →
RK3568笔记131:正点原子RK3568开发板蓝牙音箱完整实现指南

RK3568笔记131:正点原子RK3568开发板蓝牙音箱完整实现指南

若该文为原创文章,转载请注明原文出处。 一、前言 基于正点原子RK3568开发板的硬件平台,结合BlueALSA音频桥接方案,将开发板打造成一个功能完整的蓝牙音箱。实现手机蓝牙连接、A2DP音频播放,并优化了音质与连接稳定性。 技术架构 二、环境确认 项目 信息 开发板 正点原子…

2026/8/9 5:27:28 阅读更多 →

最新新闻

不只是Wiki:zyplayer-doc如何统一管理Office、接口文档、流程图、文件和知识问答

不只是Wiki:zyplayer-doc如何统一管理Office、接口文档、流程图、文件和知识问答

不只是Wiki:zyplayer-doc如何统一管理Office、接口文档、流程图、文件和知识问答 不少团队理解的知识库,仍然是“建目录、写页面、搜关键词”。 这种轻量 Wiki 可以承载制度和说明文档,但企业真实资料远不止富文本页面:研发有 API…

2026/8/9 6:21:52 阅读更多 →
GPT 和 Claude Code 同写一个需求:贵的那个让我返工 3 次

GPT 和 Claude Code 同写一个需求:贵的那个让我返工 3 次

GPT 和 Claude Code 同写一个需求:贵的那个让我返工 3 次 深度解析:AI代码生成工具的实战选择与优化策略(完整版) 引言:当紧急需求遇上AI助手 在灰度上线的第二天凌晨2点15分,产品经理的钉钉消息打破了深夜的宁静--用户行为分析模块需要增加实时特征计算功能,且必须在36小时内…

2026/8/9 6:21:52 阅读更多 →
如何实现天猫自动化上架自动化?独占IP+Profile固化,从创建到销毁零关联

如何实现天猫自动化上架自动化?独占IP+Profile固化,从创建到销毁零关联

如何实现天猫自动化上架自动化?独占IPProfile固化,从创建到销毁零关联 做电商这么多年,最大的感悟就是:天猫的自动化上架,是店群运营中最耗人力也最容易出错的环节。 手动上架一个商品从填写标题、上传主图、设置SKU…

2026/8/9 6:21:52 阅读更多 →
智慧旅游景区管理系统开发实战:Python+Django技术解析

智慧旅游景区管理系统开发实战:Python+Django技术解析

1. 智慧旅游景区管理系统的核心需求解析智慧旅游景区管理系统是当前旅游产业数字化转型的重要基础设施。作为从业十余年的全栈开发者,我认为这类系统的核心价值在于解决传统景区管理的三大痛点:游客体验碎片化、运营数据孤岛化、管理决策滞后化。从技术架…

2026/8/9 6:20:52 阅读更多 →
Python实现Linux命令行网络抓包工具开发指南

Python实现Linux命令行网络抓包工具开发指南

1. 项目概述在Linux系统上开发网络抓包工具是每个网络工程师和开发者的必修课。不同于Windows平台上有Wireshark这样成熟的图形化工具,Linux环境下我们往往需要更轻量级的解决方案。今天我要分享的是如何用Python在Linux系统上从零开始构建一个实用的命令行抓包工具…

2026/8/9 6:20:52 阅读更多 →
HCIE AI认证值不值得考?适合哪些人?一文讲透华为AI专家认证含金量

HCIE AI认证值不值得考?适合哪些人?一文讲透华为AI专家认证含金量

如果你正在考虑要不要考一张HCIE AI认证,别急着下结论。作为华为AI认证体系中的专家级“天花板”,HCIE AI(华为认证AI解决方案架构专家)近年来热度持续走高,但网上对它的评价两极分化——有人说是“硬通货”&#xff0…

2026/8/9 6:20:52 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/8 17:02:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/8 17:02:44 阅读更多 →