langchain历史记录管理
langchain历史记录管理输入的消息类型: 关于Message的基本介绍可用看这:langchain基本Messages 这里说说基本的用法(重在区别BaseMessage,HumanMessage,AIMessage) 如以下代码: # 先写 InMemoryMessageHistory,对获取的消息进行处理并获取历史记录列表! class InMemoryMessageHistory(BaseChatMessageHistory, BaseModel): messages: List[BaseMessage] = Field(default_factory=list) # 添加并处理对话记录 def add_message(self, message: BaseMessage) -> None: self.messages.append(message) def clear(self) -> None: ...
朴素贝叶斯分类算法
朴素贝叶斯分类理解步奏一:准备数据集 收集数据:收集与分类任务相关的数据集,比如网安数据,日常生活对话数据 数据标注:以我的aichat bot为例,为网安的数据标注为”1”,日常生活数据标注为”0” 划分数据(可选):将数据集划分为训练集和测试集。训练集用于训练模型,测试集用于评估模型的性能。通常,可按照 70% - 30% 或 80% - 20% 的比例进行划分。 步奏二:获取离散矩阵 即使用如:self.vectorizer = CountVectorizer():创建一个 CountVectorizer 对象,用于将文本数据转换为数值特征矩阵。 关于这个数字序列矩阵:X = self.vectorizer.fit_transform(texts):fit_transform 是 CountVectorizer...
numpy库学习(持续更新)
numpy库学习(持续更新array多维数组概念定义多维数组是一种包含多个维度的数据集合,每个维度可以看作是一个方向,类似于数学中的坐标轴。一维数组可以想象成一条直线上的点的集合,二维数组类似一个平面上的网格,三维数组则像是一个立体空间中的立方体网格,以此类推,可以有更高维度的数组。 特点 同质性:多维数组中的所有元素必须是相同的数据类型,例如 int、float 等。这使得 NumPy 数组在内存中存储更高效,也方便进行统一的数值计算。 固定大小:数组创建后,其形状(即各维度的大小)通常是固定的,不像 Python 列表可以动态改变大小。 创建方式使用 np.array() 函数12345678910111213import numpy as np# 创建一维数组one_d_array = np.array([1, 2, 3, 4, 5])print("一维数组:", one_d_array)# 创建二维数组two_d_array = np.array([[1, 2, 3], [4, 5, 6]])print("二维数组:\n",...
python异常捕获及处理
Python异常捕获与处理Exception例如: 1234567891011121314151617import osimport PyPDF2import docxclass DocumentReader: @staticmethod def read_pdf(file_path): try: with open(file_path, 'rb') as file: reader = PyPDF2.PdfReader(file) text = "" for page in reader.pages: text += page.extract_text() return text except Exception as e: print(f"读取PDF文件时出错:...
python杂项函数/用法积累(持续更新)
三元表达式以及其在字符串格式化中的运用 基本语法:value_if_true if condition else value_if_false 使用情况: condition是一个布尔表达式,值为true或者false 一句话说完怎么用:中间为true,返回左边,为false,返回右边 比如: 1234567891011121314151617181920212223from PyPDF2 import PdfReaderimport os# 打开文档pdf_path = os.path.abspath('text.pdf')with open(pdf_path, 'rb') as f: pdf = PdfReader(f) # 获取文档信息,注意这里原来是.getDocumentInfo,现在直接使用属性访问 information = pdf.metadata # 获取页数,原来的 getNumPages 已弃用,使用 len(pdf.pages) number_of_pages =...
新加入的token的初始化相关说明
模型嵌入层和权重矩阵关系的理解模型的词嵌入层与权重矩阵在基于 Transformer 架构的预训练模型(如 BERT、GPT 等)中,词嵌入层(Embedding Layer)是模型处理输入文本的重要组件。它的主要作用是将离散的 token(例如单词、子词等)转换为连续的向量表示,以便模型能够对其进行数值计算。 词嵌入层有一个权重矩阵(weight),这个矩阵的形状通常是 (V, D),其中 V 是词汇表的大小,即分词器所能识别的所有 token 的数量;D 是嵌入向量的维度,也就是每个 token 对应的向量的长度。这个权重矩阵的每一行都对应着词汇表中一个特定 token 的嵌入向量。 通俗理解:每个词嵌入,即word_embedding,都是一个向量,从表现形式来看本质就是向量的坐标表示:如:[0.1, 0.3,...
自然语言处理
自然语言处理有关Word2Vec 模型详细见这篇文章: Word2Vec 模型 我只说两个点: 该模型采用创新的两种CBOW和Skip-gram训练方式 前者是前后文推该词 后者是该词推前后文 使用检查上下文相关性的方法来解决多义词问题 Transformer模型和LSTM模型的比较主要来看前者的优势: Transformer 编码器相较于 LSTM 模型的进步: 并行计算能力 LSTM 的局限:LSTM 是基于序列顺序进行计算的,每个时间步的计算都依赖于前一个时间步的状态,这使得它难以进行并行计算,在处理长序列数据时计算速度较慢。例如在处理长篇小说这样的长文本时,LSTM 需要逐个时间步地处理每个词,无法同时对多个时间步进行计算。 Transformer 的优势:Transformer 编码器采用了自注意力机制,它可以并行地计算每个位置与其他位置之间的依赖关系,无需按照顺序依次处理。这使得 Transformer...
python程序运行启动代码
常规程序启动入口__name__启动程序123if __name__ = '__main__' : data : dict = load_toml() pprint(data,sort_dics=False) 代码逐行解释if __name__ == '__main__': __name__ 变量: 在 Python 中,每个模块(即.py文件)都有一个内置的__name__变量。这个变量的值取决于模块是如何被使用的。 当一个 Python 脚本作为主程序直接运行时,例如在命令行中使用 python script.py 来执行脚本,该脚本的 __name__ 变量会被自动设置为 '__main__'。 当一个 Python 脚本作为模块被其他脚本导入时,例如在 another_script.py 中使用 import script,那么 script.py 模块的 __name__ 变量会被设置为该模块的名称(即 'script')。 条件判断:if __name__ ==...
python中对模块的引入
python中对模块引入的辨析import..from和import的差异首先我们要说明: 依赖库里面是有很多个,模块的,我在今天学习的tomllib是自带模块的其中之一罢了: from tomllib import * 的情况当使用 from tomllib import * 语句时,确实会将 tomllib 模块中所有定义的公共对象(函数、类、变量等)直接导入到当前 .py 文件的命名空间中。导入之后,在当前文件里可以直接使用这些对象,无需再加上模块名作为前缀。不过,这种导入方式存在命名冲突的风险。 例如,假设 tomllib 模块中有一个 load 函数,同时你的当前文件中也定义了一个名为 load 的函数,使用 from tomllib import * 导入后,tomllib 中的 load 函数可能会覆盖你自己定义的 load 函数,或者反之,从而导致意外的结果。示例如下: 123456789# 假设 tomllib 模块中有 load 函数from tomllib import *# 假设当前文件中也定义了一个 load 函数def load(): ...