【山东大学项目实训】进度汇报16

进行了带有历史记录的问答链的修改优化

Chat_QA_chain_self

from langchain.chains import ConversationalRetrievalChain
from qa_chain.model_to_llm import model_to_llm
from qa_chain.get_vectordb import get_vectordbclass Chat_QA_chain_self:""""带历史记录的问答链  - model:调用的模型名称- temperature:温度系数,控制生成的随机性- top_k:返回检索的前k个相似文档- chat_history:历史记录,输入一个列表,默认是一个空列表- history_len:控制保留的最近 history_len 次对话- file_path:建库文件所在路径- persist_path:向量数据库持久化路径- api_key:智谱都需要传递的参数- embeddings:使用的embedding模型- embedding_key:使用的embedding模型的秘钥(智谱)"""def __init__(self, model: str, temperature: float = 0.0, top_k: int = 4, chat_history: list = [],file_path: str = None, persist_path: str = None, api_key: str = None, embedding="zhipuai",embedding_key: str = None):# 初始化类实例的各个属性self.model = modelself.temperature = temperatureself.top_k = top_kself.chat_history = chat_historyself.file_path = file_pathself.persist_path = persist_pathself.api_key = api_keyself.embedding = embeddingself.embedding_key = embedding_key# 获取向量数据库实例self.vectordb = get_vectordb(self.file_path, self.persist_path, self.embedding, self.embedding_key)def clear_history(self):"清空历史记录"# 清空聊天历史记录return self.chat_history.clear()def change_history_length(self, history_len: int = 1):"""保存指定对话轮次的历史记录输入参数:- history_len :控制保留的最近 history_len 次对话- chat_history:当前的历史对话记录输出:返回最近 history_len 次对话"""# 保留最近的 history_len 次对话n = len(self.chat_history)return self.chat_history[n - history_len:]def answer(self, question: str = None, temperature=None, top_k=4):""""核心方法,调用问答链arguments: - question:用户提问"""# 如果问题为空,返回空字符串和当前聊天历史记录if len(question) == 0:return "", self.chat_history# 如果温度参数未设置,使用实例初始化时的温度if temperature == None:temperature = self.temperature# 获取语言模型实例llm = model_to_llm(self.model, temperature, self.api_key)# 获取检索器实例,使用向量数据库进行相似性检索retriever = self.vectordb.as_retriever(search_type="similarity",search_kwargs={'k': top_k})  # 默认similarity,k=4# 创建问答链实例qa = ConversationalRetrievalChain.from_llm(llm=llm,retriever=retriever)# 调用问答链,获取回答result = qa({"question": question, "chat_history": self.chat_history})  # result里有question、chat_history、answeranswer = result['answer']# 将问题和回答添加到历史记录中self.chat_history.append((question, answer))# 返回更新后的历史记录return self.chat_history


1. 导入模块:
   - `ConversationalRetrievalChain`:用于创建带有检索功能的对话链。
   - `model_to_llm`:将模型名称转换为具体的语言模型实例。
   - `get_vectordb`:获取向量数据库实例,用于检索相似文档。

2. 类定义:
   - `Chat_QA_chain_self`:这是一个自定义的问答链类,包含了与模型交互、历史记录管理、向量检索等功能。

3. 初始化方法 `__init__`:
   - 初始化类的各种参数,包括模型名称、温度、检索文档数量、历史记录、文件路径、向量数据库路径、API 密钥、embedding 模型及其密钥。
   - 调用 `get_vectordb` 获取向量数据库实例。

4. `clear_history` 方法:
   - 清空当前的聊天历史记录。

5. `change_history_length` 方法:
   - 调整历史记录的长度,仅保留最近的 `history_len` 次对话。

6. `answer` 方法:
   - 处理用户提问,调用问答链获取回答,并更新历史记录。
   - 使用 `model_to_llm` 获取语言模型实例。
   - 使用向量数据库实例进行相似性检索。
   - 创建问答链实例并调用,获取回答并更新历史记录。

提供可以记录和管理历史对话的问答系统,支持基于相似性检索的文档查询,从而提高回答的准确性和相关性

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

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

相关文章

ServBay[中文] 下一代Web开发环境

ServBay是一个集成式、图形化的本地化Web开发环境。开发者通过ServBay几分钟就能部署一个本地化的开发环境。解决了Web开发者(比如PHP、Nodejs)、测试工程师、小型团队安装和维护开发测试环境的问题,同时可以快速的进行环境的升级以及维护。S…

头歌Python作业——8.1 模拟生成身份信息及查验身份(project)

目录 第1关 第2关 第3关 第4关 第1关 import random def person_name(gender_of_id, last_name_file, male_name_file, female_name_file):"""参数 gender_of_id:性别,字符串类型参数 last_name_file:百家姓文件名&…

Chrome开发者工具学习

打开开发者工具: 可以通过在网页上点击右键并选择“检查”来打开。 或者使用快捷键Ctrl Shift I(在Windows/Linux上)或Command Option I(在Mac上)。 界面概览: 熟悉DevTools的基本面板,如“…

【精品案例】数字孪生技术与数字工厂案例(59页PPT)

引言:随着工业4.0和智能制造的快速发展,数字孪生技术和数字工厂已成为制造业转型升级的重要趋势。数字孪生技术通过构建虚拟的数字模型,实现对物理实体全生命周期的映射与仿真,为企业的产品研发、设计、制造等提供有力支持。而数字…

【AI大模型应用开发】3. RAG初探 - 动手实现一个最简单的RAG应用

0. 什么是RAG 大模型也不是万能的,也有局限性。 LLM 的知识不是实时的LLM 可能不知道你私有的领域/业务知识 RAG(Retrieval Augmented Generation)顾名思义:通过检索的方法来增强生成模型的能力。你可以把这个过程想象成开卷考…

MATLAB算法实战应用案例精讲-【数模应用】线性判别分析(附MATLAB、python和R语言代码实现)

目录 前言 算法原理 什么是判别分析 线性判别分析(LDA) 数学模型 二分类 多分类LDA ​编辑 算法思想: 费歇(FISHER)判别思想 贝叶斯(BAYES)判别思想 LDA算法流程 LDA与PCA对比 SPSSPRO 1、作用 2、输入输出描述 3、案例示例 4、案例数据 5、案例操作 …

VC++开发积累——vc++6.0中删除函数的方法,右键,Delete

目录 引出插曲:删除函数的方法多行注释的实现代码输入的自动提示搜索出来,标记和取消标记跳转到上一步的位置 ctrl TAB 总结其他规范和帮助文档创建第一个Qt程序对象树概念信号signal槽slot自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自…

SQL中limit用法记录

在SQL中,LIMIT 子句主要用于限制SELECT语句返回的结果集中的行数。这对于分页显示数据、获取固定数量的最新记录或其他需要控制输出结果规模的情况非常有用。以下是LIMIT在不同SQL数据库中的基本用法: MySQL和其他兼容SQL方言(如SQLite&…

DM达梦数据库字符串函数整理

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

python基础篇(5):None类型

1 None类型 Python中有一个特殊的字面量&#xff1a;None&#xff0c;其类型是&#xff1a;<class NoneType> 无返回值的函数&#xff0c;实际上就是返回了&#xff1a;None这个字面量 None表示&#xff1a;空的、无实际意义的意思 函数返回的None&#xff0c;就表示…

压力测试原理

压力测试的原理 压力测试是一种软件测试方法&#xff0c;其目的是评估系统或应用程序在高负载或极端工作条件下的性能、稳定性和可靠性。它的原理在于模拟真实或预期的大量用户同时或频繁地访问系统&#xff0c;以此来检测系统是否能够处理这些请求&#xff0c;是否存在瓶颈&a…

Avue-data数据大屏显示饼图(附Demo)

目录 前言1. Sql查询2. 颜色细节 前言 对于这部分知识&#xff0c;原先有过柱状图实战&#xff1a;Avue-data数据大屏显示柱状图&#xff08;附Demo讲解&#xff09; 以下直奔主题&#xff0c;以Sql数据库数据为主 1. Sql查询 以饼图为例&#xff0c;需要返回的形式如下&am…

Kafka基本架构

「kafka设计思想」 一个最基本的架构是生产者发布一个消息到Kafka的一个Topic &#xff0c;该Topic的消息存放于的Broker中&#xff0c;消费者订阅这个Topic&#xff0c;然后从Broker中消费消息&#xff0c;下面这个图可以更直观的描述这个场景&#xff1a; 「消息状态&#x…

嵌入式通信协议-----UART协议详解(基于智芯Z20k11X)

目录 一、简介 1.概念 2.结构 3.特点 4.优缺点 二、协议帧组成 1.起始位 2.数据位 3.奇偶校验位 4.停止位 三、UART通信过程 四、USART与UART区别 五、代码实现 1.硬件框图 2.软件实现 一、简介 1.概念 USART&#xff08;Universal Synchronous Asynchronous R…

2024年最新机动车签字授权人考试题库。

31."简易瞬态工况法"所使用的五气分析仪的温度范图:分析系统及相关部件应在&#xff08; &#xff09;。 A.0-40℃ B.0-50℃ C.0-60℃ D.-10-40℃ 答案:A 32.稀释氧传感器环境空气量程检测时的读数值位于&#xff08; &#xff09;%vol范围之外时&#xff0c;应…

成都百洲文化传媒有限公司助力电商品牌乘风破浪

在当今数字化时代&#xff0c;电商行业风起云涌&#xff0c;竞争异常激烈。成都百洲文化传媒有限公司凭借其对电商行业的深刻理解与实战经验&#xff0c;已然成为行业中的佼佼者。公司专注于电商服务领域&#xff0c;通过创新的营销模式和精准的市场策略&#xff0c;助力众多品…

GEE:通过代码删除Assets数据

作者:CSDN @ _养乐多_ 本文将记录如何通过代码删除 Google Earth Engine (GEE)中 Assets 中的数据,使得 Assets 中的数据可以动态更新。 文章目录 一、函数说明二、示例代码一、函数说明 下面是对 ee.data.deleteAsset(assetId, callback) 函数的解释,以表格形式呈现: …

北京互动阅读app开发,“身”临其境,阅读精彩

随着大数据与智能化的不断发展进步&#xff0c;线上阅读软件也越来越多&#xff0c;为了缓解对传统翻页阅读方式产生的疲劳&#xff0c;人们对线上阅读提出了新的要求。对此&#xff0c;与智能科技相结合的北京互动阅读app开发&#xff0c;以高互动、高体验感的优势&#xff0c…

类的默认成员函数——构造与析构函数

如果一个类中什么成员都没有&#xff0c;简称为空类。但是空类中真的什么都没有吗&#xff1f; 当然不是&#xff0c;任何类在什么都不写的情况下&#xff0c;编译器会自动生成6个默认成员函数 1.构造函数 1.1概念引入 对于以下这个Date类&#xff0c;可以通过Init公有方法给…

食品供应链管理商城系统的设计、实现和代码

上线食品供应链管理商城系统的设计与实现是一项复杂且重要的任务&#xff0c;它不仅涉及到技术层面的具体实现&#xff0c;还包括业务流程的优化和用户体验的提升。本文将从系统设计、功能模块、技术选型以及实现步骤等方面进行详细探讨。 ### 系统设计 在设计食品供应链管理…