langchain中的Document类

  在Langchain-Chatchat的上传文档接口(upload_docs)中有个自定义的docs字段,用到了Document类。根据发现指的是from langchain.docstore.document import Document。本文简要对Document类进行介绍。

1.上传文档接口upload_docs

def upload_docs(file: List[UploadFile] = File(..., description="上传文件,支持多文件"),knowledge_base_name: str = Form(..., description="知识库名称", examples=["samples"]),override: bool = Form(False, description="覆盖已有文件"),to_vector_store: bool = Form(True, description="上传文件后是否进行向量化"),chunk_size: int = Form(CHUNK_SIZE, description="知识库中单段文本最大长度"),chunk_overlap: int = Form(OVERLAP_SIZE, description="知识库中相邻文本重合长度"),zh_title_enhance: bool = Form(ZH_TITLE_ENHANCE, description="是否开启中文标题加强"),docs: Json = Form({}, description="自定义的docs,需要转为json字符串",examples=[{"test.txt": [Document(page_content="custom doc")]}]),not_refresh_vs_cache: bool = Form(False, description="暂不保存向量库(用于FAISS)"),
) -> BaseResponse:

  这里的docs是Json数据类型,本质上可以理解为dict数据类型。pydantic 中的 Json 类用于表示包含 JSON 数据的字段。它可以接受任何合法的 JSON 数据,然后在验证时将其解析为 Python 字典。以下是一个使用 Json 类的简单示例:

from typing import List
from pydantic import BaseModel, Jsonclass MyModel(BaseModel):json_data: Json# 实例化 MyModel 类
data = {'key1': 'value1', 'key2': [1, 2, 3]}
my_model_instance = MyModel(json_data=data)# 输出实例
print(my_model_instance)

  在这个例子中,定义了一个 MyModel 类,其中有一个字段 json_data,它的类型是 Json。然后创建一个包含 JSON 数据的字典 data,并用它实例化 MyModel 类。在输出实例时,Json 类会将传入的 JSON 数据解析为 Python 字典。请注意,Json 类并不关心具体的 JSON 数据结构,它接受任何合法的 JSON 数据。

2.Document类源码
  该类的引用包为from langchain.docstore.document import Document。简单理解就是包括文本内容(page_content)、元数据(metadata)和类型(type)的类。源码如下所示:

class Document(Serializable):"""Class for storing a piece of text and associated metadata."""page_content: str"""String text."""metadata: dict = Field(default_factory=dict)"""Arbitrary metadata about the page content (e.g., source, relationships to otherdocuments, etc.)."""type: Literal["Document"] = "Document"@classmethoddef is_lc_serializable(cls) -> bool:"""Return whether this class is serializable."""return True@classmethoddef get_lc_namespace(cls) -> List[str]:"""Get the namespace of the langchain object."""return ["langchain", "schema", "document"]

3.Document类例子
  代码定义了一个 Document 类,该类继承自 Serializable,使用了 Python 的类型提示和注解。在 Document 类中,有 page_contentmetadatatype 三个属性,并定义了一些方法。

  下面实例化 Document 类,并输出实例的内容:

from typing import List, Literal
from langchain_core.load.serializable import Serializable
from pydantic import Fieldclass Document(Serializable):page_content: strmetadata: dict = Field(default_factory=dict)type: Literal["Document"] = "Document"@classmethoddef is_lc_serializable(cls) -> bool:return True@classmethoddef get_lc_namespace(cls) -> List[str]:return ["langchain", "schema", "document"]# 实例化 Document 类
custom_doc = Document(page_content="custom doc")# 输出实例
print(custom_doc)

  输出结果,如下所示:

page_content='custom doc' metadata=FieldInfo(annotation=NoneType, required=False, default_factory=dict)

  在这个例子中,创建了一个名为 custom_docDocument 类的实例,并通过 print(custom_doc) 将其输出。确保环境中已经安装了 pydanticlangchain_core模块,可以使用 pip install pydantic langchain_core -i https://pypi.tuna.tsinghua.edu.cn/simple 进行安装。

参考文献:
[1] 文档加载器:https://python.langchain.com/docs/integrations/document_loaders/copypaste
[2] https://docs.pydantic.dev/latest/concepts/fields/
[3] https://github.com/chatchat-space/Langchain-Chatchat/blob/master/server/api.py

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

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

相关文章

检测到目标SSL证书已过期怎么回事?

在浏览网站时,有时会遇到一个警告,提示目标SSL证书已过期。这是一个令人担忧的信号,意味着网站的安全性可能存在问题。那么,为什么会出现目标SSL证书过期的情况?我们该如何应对呢? 首先,我们需要…

LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机

目录 背影 极限学习机 LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机 主要参数 MATLAB代码 效果图 结果分析 展望 完整代码下载链接:LCD-LMD-PSO-ELM的电能质量分类,LCD特征提取,LMD特征提取,粒子群算法优化极限学习机资源-CSDN文库…

【C语言进阶】预处理详解

引言 对预处理的相关知识进行详细的介绍 ✨ 猪巴戒:个人主页✨ 所属专栏:《C语言进阶》 🎈跟着猪巴戒,一起学习C语言🎈 目录 引言 预定义符号 #define定义常量 #define定义宏 带有副作用的宏参数 宏替换的规则 …

理解LSTM一种递归神经网络(RNN)

1 递归神经网络结构 一个简单的传统神经网络结构如下图所示: 给他一些输入x0,x1,x2 … xt, 经过神经元作用之后得到一些对应的输出h0,h1,h2 … ht。每次的训练,神经元和神经元之间不需要传递任何信息。 递归神经网络和传统神经网络不同的一个点在于&am…

Linux 网络传输学习笔记

这篇是混合《Linux性能优化实战》以及 《Wireshark网络分析就这么简单》的一些关于Linux 网络的学习概念和知识点笔记 ,主要记录网络传输流程以及对于TCP和UDP传输的一些影响因素 Linux 网络传输流程 借用一张倪朋飞先生的《Linux性能优化实战》课程中的图片 接收流…

利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(2.1) —— 任务挂起和恢复

前言 (1)FreeRTOS是我一天过完的,由此回忆并且记录一下。个人认为,如果只是入门,利用STM32CubeMX是一个非常好的选择。学习完本系列课程之后,再去学习网上的一些其他课程也许会简单很多。 (2&am…

SpringBoot整合FreeMarker

FreeMarker FreeMarker 是一个模板引擎&#xff0c;可以将模板与数据结合生成文本输出。以下是 Java FreeMarker 常用的语法及示例&#xff1a; 输出变量值 使用 ${} 输出变量值&#xff0c;如&#xff1a; ${user.name}条件判断 使用 <#if> 和 <#else> 进行条…

IDEA内置HTTP CLIENT

使用IDEA进行HTTP测试两种方法&#xff1a; a. 在controller层的方法中点击小地球跳转&#xff08;因为方法上带有RequestMapping注解&#xff0c;IDEA识别到这是一个handler&#xff09; b. 在全局任意位置新建右键新建一个HTTP Request&#xff0c;即自动新建一个测试文件。每…

Windows 下ffmpeg安装及实践

Windows 下ffmpeg安装及实践 背景安装实践其他 背景 最近负责音频文件处理相关的业务&#xff0c;涉及到 ffmpeg 对一些音频文件格式的校验&#xff0c;记录一下安装过程及踩坑过程。 安装 如图1所示&#xff0c;进入官网&#xff0c;在windows下任选一个文件&#xff1a;h…

C# 创建多线程的函数

C#中&#xff0c;创建子线程与Task任务相比&#xff0c;能够循环执行特定操作&#xff0c;可以用于长期监听TCP消息&#xff0c;发送心跳等。 本文对C#的多线程简单封装一下&#xff0c;哎&#xff0c;以方便线程的创建和命名。 文章目录 多线程定义应用 多线程 定义 using S…

git如何导出提交记录及修改的文件清单?

导出git提交日志及修改文件 # 所有人的提交记录 git log --pretty=format:"%ai,%an:%s" --since="10 day ago" >> ~/Desktop/commit10.log#某一个人的提交记录 git log --pretty=format:"%ai,%an:%s" --since="30 day ago" |

基于核极限学习机的回归分析,基于极限学习机的预测

目录 背影 极限学习机 基于核极限学习机的回归分析 主要参数 MATLAB代码 效果图 结果分析 展望 完整代码下载链接:(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88768798 背影 极限学习机是在BP神经网络上改进的一种网络,拥有无…

EMC、磁珠、磁环、ESD

1.EMC 1.1概念 EMC-电磁兼容性&#xff0c;是指设备在其电磁环境中符合要求运行并且不对其环境中的任何设备产生无法忍受的电磁干扰的能力。 EMC包括两个方面的要求&#xff1a; ①、设备在正常运行过程中对所在环境产生的电磁干扰不能超过一定的限值 ②、设备对所在环境中…

互联网摸鱼日报(2024-01-22)

互联网摸鱼日报(2024-01-22) 开源中国资讯 Stability AI 推出更小、更高效的 1.6B 语言模型 X 正面向 Android 推出音频和视频通话 Extism —— WebAssembly 插件实现框架 Gitee 推荐 | 龙蜥社区最佳安全加固实践指南 security-benchmark 每日一博 | 得物云原生容器技术探…

day01 深度学习介绍

目录 1.1深度学习介绍 1.2神经网络NN 1、概念&#xff1a; 2、神经元 3、&#xff08;单层&#xff09;神经网络 4、感知机&#xff08;两层&#xff09; 5、多层神经网络 6、激活函数 &#xff08;1&#xff09;饱和与非饱和激活函数 &#xff08;2&#xff09;饱和激活…

写着玩的程序:pycharm实现无限弹窗程序(非病毒程序,仅整蛊使用)

运行环境 PyCharm 2023.2.1 python3.11 具体内容 源代码 import tkinter as tk from tkinter import messagebox import threadingclass PopupGenerator:def __init__(self):self.root tk.Tk()self.root.geometry("200x120")self.root.title("无限弹窗&qu…

Docker容器中安装Tomcat

要在Docker容器中安装Tomcat&#xff0c;您可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;安装Docker并启动Docker服务。 创建一个新的目录&#xff0c;用于存放Tomcat相关文件&#xff0c;例如tomcat-container。 在该目录下创建一个名为Dockerfile的文件&#xff…

LeetCode---380周赛

题目列表 3005. 最大频率元素计数 3006. 找出数组中的美丽下标 I 3007. 价值和小于等于 K 的最大数字 3008. 找出数组中的美丽下标 II 一、最大频率元素计数 这题就是个简单的计数题&#xff0c;正常遍历统计数据即可&#xff0c;关键是你要会写代码逻辑。 代码如下&…

Java设计模式-代理模式(7)

馆长准备了很多学习资料,其中包含java方面,jvm调优,spring / spring boot /spring cloud ,微服务,分布式,前端,js书籍资料,视频资料,以及各类常用软件工具,破解工具 等资源。请关注“IT技术馆”公众号,进行关注,馆长会每天更新资源和更新技术文章等。请大家多多关注…

steam游戏搬砖项目还能火多久?

最近放假回到老家&#xff0c;见了不少亲戚朋友&#xff0c;大家不约而同都在感叹今年大环境不好&#xff0c;工作不顺&#xff0c;生意效益不好&#xff0c;公司状况不佳&#xff0c;反问我们生意如何&#xff1f;为了让他们心里好受一点&#xff0c;我也假装附和道:也不咋地&…