ChatGLM3-6B Streamlit定制用户身份识别个性化对话记忆1. 项目简介你的本地专属智能大脑想象一下你有一个24小时在线的智能助手它不仅能秒懂你的问题还能记住你是谁、你之前聊过什么甚至能根据你的喜好调整回答风格。这听起来像是科幻电影里的场景但现在通过一个简单的本地部署项目你就能拥有它。本项目基于智谱AI开源的ChatGLM3-6B-32k大语言模型并利用Streamlit框架进行了深度定制开发。我们不是在调用某个遥远的云端API而是将这个拥有“超长记忆”的智能大脑直接部署在你自己的电脑上——特别是如果你有一张RTX 4090D或类似性能的显卡。核心目标很明确打造一个零延迟、高稳定、且能记住“你”的私有对话系统。它彻底摆脱了网络延迟、云端隐私担忧和公共模型“千人一面”的局限成为一个真正懂你的个人助手。2. 核心功能亮点不止于聊天与标准对话机器人不同本项目在基础问答之上增加了两项关键能力用户身份识别和个性化对话记忆。这让每一次交互都变得独特而有价值。2.1 用户身份识别知道在和谁说话传统聊天机器人是“脸盲”的对所有用户一视同仁。我们改变了这一点。会话级身份绑定系统会自动为每个浏览器会话创建一个唯一身份标识。这意味着只要你从同一个浏览器标签页访问系统就知道是“你”回来了。身份信息初始化可选在首次对话时你可以选择性地告诉助手一些基本信息例如“我是张伟一名软件工程师主要用Python开发。” 助手会将这些信息存入你的专属记忆上下文。多用户隔离如果你的家人或同事用另一台设备或浏览器访问他们会有自己独立的对话空间和记忆互不干扰充分保障隐私。2.2 个性化对话记忆拥有持续记忆的对话这是项目的灵魂。我们充分利用了ChatGLM3-6B-32k模型的32k超长上下文能力但不仅仅是用来处理长文档。跨会话记忆持久化你的对话历史和个人资料不会在关闭页面后消失。它们被安全地存储在本地下次访问时自动载入对话可以无缝衔接。记忆提炼与摘要为了避免宝贵的上下文长度被琐碎对话占满系统会智能地对较早期的聊天记录进行摘要保留核心信息从而为新的对话腾出空间实现“长期记忆”效果。基于身份的个性化响应当系统知道你的身份和过往兴趣后它的回答会更具针对性。例如如果你曾告诉它你是初学者它在解释技术概念时会用更通俗的语言如果你提到过喜欢简洁的答案它可能会减少背景铺垫。2.3 极速稳定的Streamlit架构功能强大的基础是流畅的体验。我们摒弃了笨重的组件进行了轻量化重构。界面秒开采用Streamlit原生组件界面加载速度相比常见方案有显著提升交互如丝般顺滑。模型常驻内存通过st.cache_resource装饰器大模型在首次加载后便驻留内存。无论你如何刷新页面都无需等待模型重新加载真正做到“即开即聊”。流式打字机效果回答内容像真人打字一样逐词流出无需等待整个答案生成完毕交互体验自然流畅。3. 快速上手指南三步开启专属对话让我们开始实践。部署过程已极大简化你只需关注如何与你的智能助手互动。3.1 访问与初始化启动应用在项目环境中运行命令streamlit run app.py。打开浏览器根据终端提示通常是http://localhost:8501在浏览器中打开对应地址。身份初始化可选在侧边栏或首次对话的输入框中你可以输入类似以下的指令来设置身份/profile 我是李华一名数据分析师对机器学习和可视化比较感兴趣。系统会确认你的身份信息已记录。3.2 开始你的第一次智能对话现在你可以像和朋友聊天一样开始提问了。试试不同风格的问题感受它的记忆能力。示例1基础问答与连续追问你介绍一下Python中的列表推导式。 助手给出详细解释和示例 你那我刚才问的列表推导式和生成器表达式有什么区别 助手它能联系上文直接对比两者区别而不会问你“刚才指的是什么”示例2利用身份信息的个性化回答假设你已设置身份为“新媒体运营” 你帮我写一个关于夏日防晒产品的短视频文案。 助手生成的文案可能会更偏向电商口播、社交媒体热点风格因为它“知道”你的职业背景。3.3 查看与管理你的记忆对话历史所有对话记录会自动保存在侧边栏或可展开的面板中方便随时回溯。记忆摘要在高级设置中你可以查看系统自动生成的对话摘要了解长期记忆的核心内容。重置记忆如果需要开始一个全新话题而不受之前影响可以使用/clear指令来清空当前会话的记忆上下文身份信息可选是否保留。4. 技术实现浅析如何让AI记住“你”如果你对背后的原理感兴趣这里有一个简单的技术拆解。核心在于状态管理和上下文构建。4.1 用户会话与记忆存储我们利用Streamlit的会话状态st.session_state来管理用户数据。每个独立的浏览器会话都会拥有自己的一套状态字典。import streamlit as st # 初始化用户专属的会话状态 if user_id not in st.session_state: st.session_state.user_id generate_unique_id() # 生成唯一用户ID if conversation_history not in st.session_state: st.session_state.conversation_history [] # 存储对话历史 if user_profile not in st.session_state: st.session_state.user_profile {} # 存储用户身份档案4.2 构建带身份的对话上下文在调用ChatGLM3模型进行推理前我们需要将用户身份、历史对话和当前问题组合成一个完整的“提示词”Prompt。def build_prompt_with_memory(user_input, conversation_history, user_profile): 构建包含用户身份和记忆的提示词。 system_message 你是一个智能助手。 # 1. 注入用户身份信息 if user_profile: system_message f 用户的基本信息如下{user_profile}。请根据这些信息提供更贴切的回答。 # 2. 注入最近的历史对话例如最近5轮 history_context for turn in conversation_history[-5:]: # 取最近5轮对话作为短期记忆 history_context f用户{turn[user]}\n助手{turn[assistant]}\n # 3. 组合成最终给模型的提示词 full_prompt f{system_message}\n\n以下是最近的对话历史\n{history_context}\n\n请根据以上信息回答用户的新问题。\n用户{user_input}\n助手 return full_prompt4.3 记忆的持久化与加载为了跨会话记忆我们需要将会话状态保存到本地文件或小型数据库中。这里以本地JSON文件为例import json import os USER_DATA_FILE user_data.json def save_user_data(user_id, data): 保存用户数据到文件 all_data {} if os.path.exists(USER_DATA_FILE): with open(USER_DATA_FILE, r) as f: all_data json.load(f) all_data[user_id] data with open(USER_DATA_FILE, w) as f: json.dump(all_data, f) def load_user_data(user_id): 从文件加载用户数据 if os.path.exists(USER_DATA_FILE): with open(USER_DATA_FILE, r) as f: all_data json.load(f) return all_data.get(user_id, {}) return {}当用户再次访问时系统会先尝试通过user_id加载其历史数据和档案并恢复到st.session_state中从而实现记忆的连续性。5. 应用场景与想象空间拥有了一个能识别身份并保有记忆的本地AI助手你可以做很多事情个性化学习伴侣告诉它你的专业水平和学习目标它能为你定制学习路径并记住你哪些知识点已经掌握哪些需要加强。高效工作副驾驶作为程序员它可以记住你项目的技术栈和代码风格提供更精准的代码建议作为文案它能记住品牌调性保持输出风格一致。私人创意顾问在持续的聊天中培养它对你创意偏好的理解无论是写故事、想策划案它都能提供更对你胃口的点子。研究分析助手上传多篇文献或资料在超长上下文中进行交叉分析、提问和总结它能在整个会话期间记住所有文档内容。6. 总结通过将ChatGLM3-6B-32k的强大推理与记忆能力与Streamlit的轻量交互和灵活状态管理相结合我们成功构建了一个超越简单问答的智能对话系统。它不仅仅是一个工具更是一个能够逐渐了解你、适应你的数字伙伴。项目的核心价值在于隐私与可控所有数据在本地处理完全自主。体验与性能流式响应、模型常驻内存带来桌面应用般的流畅感。智能与个性用户身份识别与个性化记忆机制让AI的回复更有深度和温度。你可以直接使用这个项目作为起点也可以基于其架构探索更多定制化功能比如集成知识库、连接外部工具等打造一个真正专属的、无所不能的智能工作台。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。