大模型融入推荐系统

结合项目实际给用户推荐,比如是商家项目,用户问了几个关于商品的信息,大模型就可以根据根据用户画像,给用户推荐商品。

我们现在做的是针对于用户学习的推荐,首先我们要对我们的数据进行处理,提取出我们数据的一些特征

 首先这个文件夹下可以放一些文件当做子目录,这些子目录就可以当做一些course

 

 

 遍历文件,转换为markdown,然后读取里面的标题内存,然后存储到csv文件中。此时还缺少摘要,所以我们用大模型来读取内容从而生成摘要。

def generate_csv_for_pdfs(root_dir):# 搜索指定根目录下的所有PDF文件pdf_files = glob.glob(f'{root_dir}/**/*.pdf', recursive=True)data = []for pdf_file in pdf_files:# 将 PDF 格式转化成 Markdown 格式markdown = convert_pdf_to_markdown(pdf_file)# 根据Markdown的内容结构,提取每一部分的主题内容toc_content = extract_content_by_sections(markdown)# 第一个标题部分是课程的主标题titles = list(toc_content.keys())first_title = titles[0] if titles else ""# 收集第一标题下的二级标题作为子标题first_section_content = toc_content.get(first_title, "")first_section_lines = first_section_content.split('\n')sub_titles = [line.strip() for line in first_section_lines if line.startswith('##')]sub_titles_cleaned = [re.sub(r'^##\s+', '', title) for title in sub_titles]for module_name, content in toc_content.items():# 提取二级标题作为 Tagstags = [line.strip() for line in content.split('\n') if line.startswith('##')]tags = [re.sub(r'^##\s+', '', tag) for tag in tags]  # 清理 '##'# 构建元数据data.append({'ModuleID': str(uuid.uuid4()),'Course': os.path.basename(os.path.dirname(pdf_file)),'Title': sub_titles_cleaned,'URL': os.path.basename(pdf_file),'ModuleName': module_name,'Tags': ", ".join(tags),'Content': content})df = pd.DataFrame(data)csv_file_path = os.path.join(root_dir, 'course_metadata.csv')df.to_csv(csv_file_path, index=False)print(f"CSV file generated: {csv_file_path}")

 然后生成摘要

 

 构建文档的画像,执行某些列,把这些列合并组成文档的画像,为一个新的列embedding_info,

这个embeding_info_的list是一个列表

 把这些用户画像存入到向量数据库中,执行的是do_add_file方法

 

 系统调用

之前的步骤略

     # 在同一个 model 实例上同时运行两个异步链(LLMChain)可能导致内部状态的混乱,所以为用户画像生成和聊天响应分别实例化模型# 该模型实例用于生成用户画像model_for_profile = get_ChatOpenAI(model_name=model_name,temperature=TEMPERATURE,max_tokens=MAX_TOKENS,)# 该模型实例用于生成聊天响应model_for_chat = get_ChatOpenAI(model_name=model_name,temperature=TEMPERATURE,max_tokens=MAX_TOKENS,callbacks=callbacks,)

如果用户历史对话超过5轮就生成用户画像 

 

 生成用户画像,根据用户的历史对话信息,采用这个提示模版生成用户画像

# 生成用户画像: 通过理解`用户历史行为序列`,生成`用户感兴趣的话题`以及`用户位置信息`
user_profile_prompt = """
请你根据历史对话记录:\n\n{chat_history}如上对话历史记录所示,请你分析当前用户的需求,并描述出用户画像,用户画像的格式如下:[Course]
- (Course1)[ModuleName]
- (ModuleName1)其中课程名称 [Course] 请务必从下面的列表中提取出最匹配的:\n["在线大模型课件", "开源大模型课件"]最后,一定要注意,需要严格按照上述格式描述相关的课程名称和课程的知识点,同时,[Course] 和 [ModuleName] 一定要分别处理,你最终输出的结果一定不要输出任何与上述格式无关的内容。
"""
async def generate_user_profile_and_extract_info(chat_messages: List[str], user_profile_prompt: str, model) -> Dict[str, List[str]]:"""异步生成用户画像并从中提取课程和模块信息。:param chat_messages: 聊天历史消息列表:param user_profile_prompt: 用于生成用户画像的提示:param model: 已实例化的模型对象:return: 包含课程和模块名称的字典"""# 创建聊天提示模板prompt_template = ChatPromptTemplate.from_messages([("user", user_profile_prompt),])# 创建LangChain的链user_profile_chain = LLMChain(prompt=prompt_template, llm=model)# 异步生成用户画像user_profile_result = user_profile_chain.invoke({"chat_history": chat_messages})user_profile = user_profile_result["text"]# 定义正则表达式并提取课程与模块信息def extract_course_and_module(text: str) -> Dict[str, List[str]]:course_pattern = r"\[Course\]\s+-\s+(.+)"module_name_pattern = r"\[ModuleName\]\s+-\s+(.+)"courses = re.findall(course_pattern, text)module_names = re.findall(module_name_pattern, text)return {"Course": courses, "ModuleName": module_names}# 提取信息并返回return extract_course_and_module(user_profile)

然后接下来就是根据用户画像去和向量数据库中的内容匹配,如果量很大,可以把信息存储到es中,做倒排索引

接下来走正常的处理流程 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MariaDB MaxScale实现mysql8主从同步读写分离

一、MaxScale基本介绍 MaxScale是maridb开发的一个mysql数据中间件,其配置简单,能够实现读写分离,并且可以根据主从状态实现写库的自动切换,对多个从服务器能实现负载均衡。 二、MaxScale实验环境 中间件192.168.121.51MaxScale…

【JVM详解五】JVM性能调优

示例: 配置JVM参数运行 #前台运行 java -XX:MetaspaceSize-128m -XX:MaxMetaspaceSize-128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio8 - XX:UseConcMarkSweepGC -jar /jar包路径 #后台运行 nohup java -XX:MetaspaceSize-128m -XX:MaxMetaspaceS…

畅聊deepseek-r1,SiliconFlow 硅基流动注册+使用

文章目录 SiliconFlow 硅基流动注册使用注册创建API密钥使用网页端使用代码调用api调用支持的模型 SiliconFlow 硅基流动注册使用 注册 硅基流动官网 https://cloud.siliconflow.cn/i/XcgtUixn 注册流程 切换中文 ​ 邀请码: XcgtUixn 创建API密钥 账户管理 --&g…

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

Gitlab中如何进行仓库迁移

需求:之前有一个自己维护的新仓库A,现在需要将这个仓库提交并覆盖另一个旧的仓库B,需要保留A中所有的commit信息。 1.方法一:将原有仓库A导出后再导入到新的仓库B中 适用场景:新的仓库B是一个待建仓库,相当…

CF388C Fox and Card Game

Fox and Card Game 题面翻译 桌子上有 n n n 堆牌。每张牌上都有一个正整数。Ciel可以从任何非空牌堆的顶部取出一张牌,Jiro可以从任何非空牌堆的底部取出一张牌。Ciel先取,当所有的牌堆都变空时游戏结束。他们都想最大化他所拿牌的分数(即…

Left side cannot be assigned to

Delphi XE E2064 Left side cannot be assigned to 错误解决方法-CSDN博客 Delphi XE E2064 Left side cannot be assigned to 错误解决方法 1. 起源 此问题源于[秋风人事档案管理系统]用Delphi XE重编译中所发现。 快十年了,当初Delphi 7所编写项目&#xff0c…

牛客周赛Round 80——举手赢棋 python 补题 + 题解

文章目录 前言举手赢棋easy举手赢棋hard 前言 紧跟时事的两道算法题 牛客周赛 Round 80 举手赢棋easy 题目描述 本题为《举手赢棋hard》的简单版本,两题的唯一区别在于对举手次数的限制不同,在本题中,小红有1次举手的机会。 小红获得了参加…

什么是矩阵账号?如何做矩阵账号运营?

在当今数字化浪潮中,无论是跨境电商、内容创作还是品牌推广,矩阵账号运营已成为企业与个人实现快速增长的关键策略。本文将深入探讨矩阵账号运营的核心要素,包括铺量策略、多账号管理、引流技巧以及如何应对运营中的常见问题,助力…

SpringCloud - Sentinel服务保护

前言 该博客为Sentinel学习笔记,主要目的是为了帮助后期快速复习使用 学习视频:7小快速通关SpringCloud 辅助文档:SpringCloud快速通关 源码地址:cloud-demo 一、简介 官网:https://sentinelguard.io/zh-cn/index.h…

文件和内容管理:非结构化数据的有序化

在数据管理的众多领域中,文件和内容管理专注于处理非结构化数据,如文档、图像、音频和视频等。这些数据虽然不像结构化数据那样易于管理和分析,但它们在组织的日常运营中扮演着不可或缺的角色。今天,让我们深入《DAMA数据管理知识…

2025/2/10 心得

第一题。J. C - Grand Garden (AI) 问题陈述 在一个花坛里,有 NN 朵花,编号为 1,2,\ldots,N1,2,…,N。最初,所有花的高度都是 00。你将得到一个高度序列 h{h\_1,h\_2,h\_3,\ldots\} 作为输入。你希望通过重复以下“浇水”操作来将所有花的编…

集成右键的好用软件,支持多线程操作!

今天给大家分享一个超级实用的小工具,真的能帮上大忙呢!这个软件是吾爱大神无知灰灰精心制作的,简直就是图片转换界的“小能手”。 它能一键把webp格式的图片转换成png格式,而且速度超快,完全不输那些付费的软件&#…

UPDATE 语句结合 REPLACE() 函数来批量修改 detail 字段中的 xxx 为 xxx

问题出现的背景,由于阿里云的oss服务器域名更换,所以我们需要修改数据库中detail字段中的域名,才能加载图片 您可以使用 SQL 的 UPDATE 语句结合 REPLACE() 函数来批量修改 detail 字段中的 oss.kxlist.com 为 www.crossbiog.com。 以下是 S…

【设计模式】【行为型模式】职责链模式(Chain of Responsibility)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 📫 欢迎V: flzjcsg2,我们共同讨论Java深渊的奥秘 &#x1f…

Visual Studio踩过的坑

统计Unity项目代码行数 编辑-查找和替换-在文件中查找 查找内容输入 b*[^:b#/].*$ 勾选“使用正则表达式” 文件类型留空 也有网友做了指定,供参考 !*\bin\*;!*\obj\*;!*\.*\*!*.meta;!*.prefab;!*.unity 打开Unity的项目 注意:只是看&#xff0…

云原生后端|实践?

云原生(Cloud Native)是一种构建和运行应用程序的方法,它充分利用云计算的优势,包括弹性、可扩展性、高可用性和自动化运维。云原生后端开发通常涉及微服务架构、容器化、持续集成/持续部署(CI/CD)、服务网…

《深度学习》——pytorch框架及项目

文章目录 pytorch特点基本概念 项目项目实现导入所需库下载训练数据和测试数据对训练和测试样本进行分批次展示手写图片判断pytorch是否支持GPU定义神经网络模型定义训练函数定义测试函数创建交叉熵损失函数和优化器通过多轮训练降低损失值得到最终结果注意 pytorch PyTorch 是…

深入探索人工智能的未来:DeepSeek R1与蓝耘智算平台的完美结合

在当今数字化时代,人工智能(AI)和机器学习(ML)正以前所未有的速度改变着我们的生活和工作方式。从智能语音助手到自动驾驶汽车,从精准医疗到金融风险预测,AI的应用无处不在。深度学习作为AI的核…

Qt最新热点

Qt的最新热点主要集中在以下几个方面: 跨平台开发:Qt继续强调其在跨平台开发方面的优势,支持在Windows、macOS、Linux以及移动操作系统(如Android和iOS)上的应用开发。 Qt for Python:Qt for Python(PySide2和PySide6)的发展,为Python开发者提供了更强大的工具来创建桌…