尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
用户画像记忆,让Agent记住用户偏好越用越懂你
用户画像记忆让Agent记住用户偏好越用越懂你你用过的最好用的App是什么。大概率是那种越用越好用的。它记住你的习惯推荐你喜欢的过滤你不感兴趣的。Agent也可以做到这一点。通过构建用户画像记住用户的偏好和习惯让每次交互都比上次更精准。这一篇我们讲怎么在Agent里实现用户画像记忆。什么是用户画像用户画像简单说就是对用户的结构化描述。记录用户的基本信息、偏好、行为模式。一个用户画像大概包含这些维度。基本信息。姓名、职业、技能水平、所在行业。这些是静态的基本不变。技术偏好。使用的编程语言、框架、工具。比如用户偏好Python用LangChain做Agent开发用VS Code做编辑器。交互偏好。喜欢什么样的回答风格。详细还是简洁代码多还是解释多中文还是英文。知识水平。对不同话题的熟悉程度。AI基础好但RAG不熟Python精通但前端不熟。这样Agent可以调整解释的深度。历史行为。之前问过什么问题做过什么项目遇到过什么问题。有了这些信息Agent就能做到个性化服务。给Python开发者推荐Python代码给新手多解释基础概念给资深开发者直接给方案。怎么构建用户画像用户画像的构建分三步。收集、整理、更新。收集。从用户和Agent的交互中收集信息。用户主动告知的比如我是Python开发者。Agent推断的比如用户经常问Python相关问题大概率是Python开发者。整理。把收集到的零散信息整理成结构化的画像。用大模型来提取和归类。更新。用户画像是动态的。用户学了新技能、换了工作、改了偏好画像要跟着更新。来看具体实现。fromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplateimportjsonfromdatetimeimportdatetimeclassUserProfile:用户画像管理def__init__(self,llm,user_iddefault):self.llmllm self.user_iduser_id self.profile{basic_info:{},tech_preferences:{},interaction_preferences:{},knowledge_level:{},history_summary:[],}defupdate_from_conversation(self,conversation_text):从对话中更新用户画像promptChatPromptTemplate.from_template(请分析以下对话提取用户的相关信息更新用户画像。 当前用户画像 {current_profile} 最新对话 {conversation} 请分析对话提取以下信息 1. basic_info: 姓名、职业、技能水平、行业等基本信息 2. tech_preferences: 编程语言、框架、工具偏好 3. interaction_preferences: 回答风格偏好简洁/详细、代码量、语言 4. knowledge_level: 各领域知识水平评估 5. history_summary: 本次对话的关键主题一句话 请输出更新后的完整用户画像JSON格式。只输出JSON不要其他内容。)chainprompt|self.llm resultchain.invoke({current_profile:json.dumps(self.profile,ensure_asciiFalse,indent2),conversation:conversation_text,})try:new_profilejson.loads(result.content)self.profilenew_profile self.profile[last_updated]datetime.now().isoformat()returnTrueexceptjson.JSONDecodeError:print(画像更新失败解析JSON失败)returnFalsedefget_profile_summary(self):获取画像摘要用于注入Promptparts[]basicself.profile.get(basic_info,{})ifbasic:parts.append(f用户信息{json.dumps(basic,ensure_asciiFalse)})techself.profile.get(tech_preferences,{})iftech:parts.append(f技术偏好{json.dumps(tech,ensure_asciiFalse)})interactionself.profile.get(interaction_preferences,{})ifinteraction:parts.append(f交互偏好{json.dumps(interaction,ensure_asciiFalse)})knowledgeself.profile.get(knowledge_level,{})ifknowledge:parts.append(f知识水平{json.dumps(knowledge,ensure_asciiFalse)})return\n.join(parts)ifpartselse暂无用户画像信息defsave_to_file(self,filepath):保存画像到文件withopen(filepath,w,encodingutf-8)asf:json.dump(self.profile,f,ensure_asciiFalse,indent2)defload_from_file(self,filepath):从文件加载画像withopen(filepath,r,encodingutf-8)asf:self.profilejson.load(f)把画像注入对话用户画像构建好了怎么在对话中使用。在每次对话开始的时候把用户画像注入到System Prompt里。Agent就知道了用户是谁、喜欢什么、什么水平。classPersonalizedAgent:带用户画像的个性化Agentdef__init__(self,llm,user_profile):self.llmllm self.profileuser_profile self.conversation_history[]self.base_prompt你是一个智能助手。请根据用户画像提供个性化服务。 用户画像 {user_profile} 个性化要求 1. 根据用户的技术偏好选择合适的语言和框架 2. 根据用户的知识水平调整解释深度 3. 根据用户的交互偏好调整回答风格 4. 如果画像信息不足按默认方式回答defchat(self,user_input):# 获取画像摘要profile_textself.profile.get_profile_summary()# 构建系统提示system_promptself.base_prompt.format(user_profileprofile_text)# 构建消息列表messages[SystemMessage(contentsystem_prompt)]messages.extend(self.conversation_history)messages.append(HumanMessage(contentuser_input))# 调用大模型responseself.llm.invoke(messages)# 更新对话历史self.conversation_history.append(HumanMessage(contentuser_input))self.conversation_history.append(response)# 控制历史长度iflen(self.conversation_history)10:self.conversation_historyself.conversation_history[-10:]returnresponse.contentdefend_session(self):会话结束时更新画像conv_text\n.join(f{用户ifisinstance(m,HumanMessage)else助手}:{m.content}forminself.conversation_history)self.profile.update_from_conversation(conv_text)self.conversation_history[]# 使用示例llmChatOpenAI(modelgpt-3.5-turbo,temperature0)# 加载或创建用户画像profileUserProfile(llm,user_iduser_001)# profile.load_from_file(user_001_profile.json) # 如果已有画像# 创建个性化AgentagentPersonalizedAgent(llm,profile)# 对话print(agent.chat(我想做一个AI客服系统))# Agent会根据画像调整回答比如用PythonLangChain来回答print(agent.chat(怎么实现记忆管理))# Agent知道用户在做AI客服会结合上下文回答# 会话结束时保存画像agent.end_session()profile.save_to_file(user_001_profile.json)画像的渐进式构建用户画像不是一次成型的是渐进式构建的。第一次对话画像可能是空的。Agent按默认方式回答。聊了几次以后画像慢慢丰富起来。知道了用户的职业、偏好、水平。Agent开始个性化回答。聊了几十次以后画像已经很完善了。Agent对用户的了解很深回答精准度很高。这个过程不需要用户刻意做什么。Agent在正常对话的过程中自动提取信息、更新画像。用户感觉到的就是这个助手越来越懂我了。画像的隐私和透明度用户画像涉及隐私需要注意几点。让用户知道你记了什么。最好提供一个查看我的画像的功能。用户能看到Agent记了哪些信息。让用户能删除。用户不想让Agent记住某些信息应该能删除。不要记敏感信息。密码、身份证号、银行卡号这些绝对不能存。画像数据加密存储。用户画像数据应该加密存储防止泄露。多用户画像管理如果Agent服务多个用户每个用户应该有独立的画像。classUserProfileManager:多用户画像管理def__init__(self,llm,storage_dir./user_profiles):self.llmllm self.storage_dirPath(storage_dir)self.storage_dir.mkdir(exist_okTrue)self.profiles{}# 缓存defget_profile(self,user_id):获取用户画像ifuser_idinself.profiles:returnself.profiles[user_id]# 从文件加载filepathself.storage_dir/f{user_id}.jsonprofileUserProfile(self.llm,user_iduser_id)iffilepath.exists():profile.load_from_file(str(filepath))self.profiles[user_id]profilereturnprofiledefsave_profile(self,user_id):保存用户画像ifuser_idinself.profiles:filepathself.storage_dir/f{user_id}.jsonself.profiles[user_id].save_to_file(str(filepath))下一篇讲记忆的检索与更新。什么时候该回忆、什么时候该遗忘怎么管理记忆的生命周期。
RELATED

相关推荐

国产跨平台文本编辑器终极指南:Notepad--解决你的多系统编码烦恼

国产跨平台文本编辑器终极指南:Notepad--解决你的多系统编码烦恼

国产跨平台文本编辑器终极指南:Notepad--解决你的多系统编码烦恼 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad--…

📅 2026/9/10 9:49:55
RT-Thread文件系统实战:从FatFs到LittleFS的嵌入式存储管理

RT-Thread文件系统实战:从FatFs到LittleFS的嵌入式存储管理

1. 项目概述:为什么嵌入式开发绕不开文件系统?在嵌入式开发领域,尤其是涉及数据记录、固件升级、配置存储等场景时,直接操作Flash或SD卡的原始扇区不仅繁琐,而且极易出错。这就好比让你直接管理一个巨大的、没有目录和…

📅 2026/9/1 19:43:06
MySQL集群技术解析:从原理到高可用实践

MySQL集群技术解析:从原理到高可用实践

1. MySQL集群技术概述 MySQL集群技术是数据库领域最核心的高可用解决方案之一,它通过多节点协同工作的方式,实现了数据的高可用性、负载均衡和横向扩展能力。我在金融行业做数据库架构的十年间,亲手部署过从传统主从复制到现代MGR的各种集群方…

📅 2026/9/4 17:20:30
MORE NEWS

更多资讯

📰

智能体模仿学习:用轨迹蒸馏提升小模型任务拆解能力

1. 这不是“抄作业”,而是智能体进化的底层逻辑最近在多个技术社区和模型评测榜单上,频繁看到一句话:“【Agent】涨 19 分,一半来自模仿一个更强的模型”。它不像传统算法优化那样强调参数调优或数据增强,而是在描述一…

📰

Unity第三人称Starter Asset代码深度解析与工业级改造

1. 项目概述:为什么从Starter Asset开始学第三人称代码,比直接写Move脚本更高效 “Unity笔记:第三人称Starter Asset代码学习”——这个标题看似平实,但背后藏着一条被90%新手忽略的高效成长路径。我带过二十多个Unity实习项目&am…

📰

C++编译原理课设实战:词法分析与语法分析器实现

简介:这份资源面向计算机专业学生、编译器初学者及对程序语言处理感兴趣的开发者,提供用C实现编译器前端的完整实践项目,帮助理解从源代码到抽象语法树的转换过程。包内共9个文件,以cpp源码、txt文法与token说明、exe可执行程序及…

📰

JDK动态代理原理与实战:从InvocationHandler到Spring AOP

1. 动态代理到底解决了什么问题——从静态代理的痛点说起先从一个真实的场景说起。前几年我在维护一个老项目,里面十几个Service类、上百个业务方法,每次改动都要往方法里塞日志。最开始我是这么干的:在方法开头打一行System.out.println(&qu…

📰

Kev小型决策模型:从自训练到私有化部署的完整指南

1. Kev是什么:一个能自己训、自己部署的小型决策模型最近开源圈子里热度不低的一个话题,就是Kev这套小型决策模型。我第一时间把它拉下来跑了一遍,又翻了社区里不少人的实操反馈,今天这篇就把我的上手体验、部署踩坑、以及自训练的…

📰

从源码到 CPU:详解 C++、Java、Python 的编译与执行机制

后端文档教程 【免费下载链接】system-design-101 Explain complex systems using visuals and simple terms. Help you prepare for system design interviews. 项目地址: https://gitcode.com/GitHub_Trending/sy/system-design-101 点击查看 免费下载 本指南以 …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬