Langchain的向量存储 - Document示例代码里的疑问

文章目录

  • 前言
  • 一、语句分析
  • 二、 举例解释
  • 三、 完整代码
  • 总结


前言

之前的代码里有下面这句话,可能有看不明白的读者。

vectors = [embeddings.embed(doc.page_content) for doc in docs]

今天一起来看下这句话。

一、语句分析

这句话实际上是一个列表推导式,它的作用是遍历 docs 列表中的每个 Document 对象,并将每个 Document 对象的 page_content 属性通过 embeddings.embed 方法转换为向量,然后将所有这些向量组成一个新的列表 vectors

具体的步骤如下:

  1. 遍历 docs 列表for doc in docs 表示依次取出 docs 列表中的每个 Document 对象并赋值给 doc
  2. 提取 page_content:对于每个 Document 对象 doc,提取其 page_content 属性(即文档的文本内容)。
  3. 嵌入转换:将提取到的文本内容通过 embeddings.embed 方法转换为向量。embeddings.embed(doc.page_content) 返回的是一个向量表示。
  4. 生成向量列表:将所有转换得到的向量组成一个新的列表,并将该列表赋值给 vectors 变量。

这句话不会替换原来的 doc 值,而是生成一个新的向量列表。每个向量对应于 docs 列表中每个 Document 对象的 page_content 的向量表示。

二、 举例解释

假设我们有以下 docs 列表:

docs = [Document(page_content="Machine learning is a method of data analysis.", metadata={"title": "ML Intro"}),Document(page_content="LangChain is a powerful framework.", metadata={"title": "LangChain Overview"})
]

执行这句代码后:

vectors = [embeddings.embed(doc.page_content) for doc in docs]

假设 embeddings.embed 方法将文本转换为一个简单的数值向量,那么 vectors 可能是:

vectors = [[0.1, 0.2, 0.3, 0.4],  # 向量表示 "Machine learning is a method of data analysis."[0.5, 0.6, 0.7, 0.8]   # 向量表示 "LangChain is a powerful framework."
]

三、 完整代码

以下是一个完整的示例,展示了从文档到向量转换的过程,大家可以一起练一练:

from langchain_core.documents import Document
from langchain.embeddings import OpenAIEmbeddings# 创建文档对象列表
docs = [Document(page_content="Machine learning is a method of data analysis.", metadata={"title": "ML Intro"}),Document(page_content="LangChain is a powerful framework.", metadata={"title": "LangChain Overview"})
]# 初始化嵌入模型
embeddings = OpenAIEmbeddings()# 将文档内容转换为向量
vectors = [embeddings.embed(doc.page_content) for doc in docs]# 输出向量列表
for i, vector in enumerate(vectors):print(f"Vector for doc {i+1}: {vector}")

总结

这句话的主要目的是将每个 Document 对象的文本内容转换为向量,并将所有这些向量组成一个新的列表 vectors,方便后续的向量存储和检索操作。它不会修改原来的 Document 对象,而是生成一个新的向量列表。

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

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

相关文章

【C++20工程实战】自己动手实现纯头文件日志库

文章目录 一、std::format二、std::source_location三、detail名字空间四、X-macro技术五、cpp20的log参考 一、std::format GCC 13, CLANG 14 and MSVC 16.10/VS 2019 all have the {fmt} based std::format available in respective standard libraries. 基本字符串格式化&am…

《精通ChatGPT:从入门到大师的Prompt指南》附录A:常用Prompt示例

附录A:常用Prompt示例 在《精通ChatGPT:从入门到大师的Prompt指南》的附录A中,我们将展示一系列常用的Prompt示例,帮助读者更好地理解和应用Prompt技术。每个示例将包含Prompt的描述、使用场景、预期结果以及实际输出。希望这些示…

LLVM Cpu0 新后端10

想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

Centos修改默认端口22

修改Centos服务器ssh链接的默认端口22到任意端口,主要两个步骤: 修改配置文件,添加端口开放防火墙 一、 vim /etc/ssh/sshd_config 在文件中 #Port 22 行下增加 # Port 22 Port [修改后端口]注意: 这里 先将其中的#Port 22前的…

ffmpeg视频解码原理和实战-(5)硬件加速解码后进行渲染并输出帧率

头文件&#xff1a; xvideoview.h #ifndef XVIDEO_VIEW_H #define XVIDEO_VIEW_H #include <mutex> #include <fstream> struct AVFrame;void MSleep(unsigned int ms);//获取当前时间戳 毫秒 long long NowMs();/// 视频渲染接口类 /// 隐藏SDL实现 /// 渲染方案…

【电机控制】FOC算法验证步骤

【电机控制】FOC算法验证步骤 文章目录 前言一、PWM——不接电机1、PWMA-H-50%2、PWMB-H-25%3、PWMC-H-0%4、PWMA-L-50%5、PWMB-L-75%6、PWMC-L-100% 二、ADC——不接电机1.电流零点稳定性、ADC读取的OFFSET2.电流钳准备3.运放电路分析1.电路OFFSET2.AOP3.采样电路的采样值范围…

归并排序——逆序数对的统计

逆序数对的统计 题目描述 运行代码 #include <iostream> using namespace std; #define LL long long const int N 1e5 5; int a[N], tmp[N]; LL merge_sort(int q[], int l, int r) {if (l > r)return 0; int mid l r >> 1; LL res merge_sort(q, l,…

IAR仿真调试

1. 硬件连接 JTAG与SWD接口&#xff1a;IAR支持JTAG和SWD两种下载器和单片机之间的连接方式。JTAG使用标准的20Pin接口&#xff0c;而SWD则更为简化&#xff0c;只需要四根线&#xff08;GND、TCK、TMS、RST&#xff08;可选&#xff09;&#xff09;。连接方法&#xff1a;如…

华为OD刷题C卷 - 每日刷题 21(按身高和体重排队,解密犯罪时间)

三段代码分别解决了三个不同的算法问题&#xff0c;下面是对它们的概述&#xff1a; 1、&#xff08;按身高和体重排队&#xff09;&#xff1a; 这段代码是解决“按身高和体重排队”的问题。它提供了一个Java类Main&#xff0c;其中包含main方法&#xff0c;用于根据学生的身…

【数据结构(邓俊辉)学习笔记】图07——最短路径

文章目录 0. 概述1. 问题2. 最短路径2.1 最短路径树2.1.1 单调性2.1.2 歧义性2.1. 3 无环性 2.2 Dijkstra 算法2.2.1 贪心迭代2.2.2 实现2.2.3 实例2.2.4 复杂度 0. 概述 学习下最短路径和Dijistra算法 1. 问题 给定带权网络G (V, E)&#xff0c;以及源点&#xff08;source…

4.大模型微调技术LoRA

大模型低秩适配(LoRA)技术 现有PEFT 方法的局限与挑战 Adapter方法,通过增加模型深度而额外增加了模型推理延时。Prompt Tuning、Prefix Tuning、P-Tuning等方法中的提示较难训练,同时缩短了模型可用的序列长度。往往难以同时实现高效率和高质量,效果通常不及完全微调(f…

Vue2事件处理(v-on)

1.事件处理 &#xff08;1&#xff09;指令的语法格式 <标签 v-指令名:事件名"表达式">{{插值语法}}</标签>&#xff08;2&#xff09;"表达式"位置都可以写什么&#xff1f; 常量、JS表达式、Vue实例所管理的XXX 1.1 事件绑定 &#xff0…

51单片机单击按键,数码管显示学号;双击按键,数码管显示全8

1、功能描述 单击按键&#xff0c;数码管显示学号&#xff1b;双击按键&#xff0c;数码管显示全8 2、实验原理 按键输入检测:通过检测按键的电平变化来识别按键是否被按下。当按键被按下时&#xff0c;电平从高变低,单片机通过外部中断或轮询方式检测这一变化。 数码管显示…

Debian常用命令有哪些?

Debian是一种流行的Linux发行版&#xff0c;它提供了一组强大的命令行工具来帮助用户管理系统和文件。以下是一些Debian中常用的命令&#xff0c;按照不同的功能分类进行了归纳&#xff1a; 文件与目录操作 ls 功能&#xff1a;列出目录内容。常用选项&#xff1a; -l&#xf…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及电力不平衡风险的配电网分区协同规划》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

LLVM Cpu0 新后端6

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

【MySQL】 深入了解 MySQL 存储过程:定义、优势及示例

我已经从你的 全世界路过 像一颗流星 划过命运 的天空 很多话忍住了 不能说出口 珍藏在 我的心中 只留下一些回忆 &#x1f3b5; 牛奶咖啡《从你的全世界路过》 在数据库管理系统中&#xff0c;存储过程&#xff08;Stored Procedure&#xff09;是一种重…

探究IOC容器刷新环节初始化前的预处理

目录 一、IOC容器的刷新环节快速回顾 二、初始化前的预处理prepareRefresh源码分析 三、初始化属性源 &#xff08;一&#xff09;GenericWebApplicationContext初始化属性源 &#xff08;二&#xff09;StaticWebApplicationContext初始化属性源 四、初始化早期事件集合…

汇川CodeSysPLC教程03-2-4 RS485

前情回顾 在前面介绍串口通讯的视频当中&#xff0c;我们提到了RS232&#xff0c;也顺带提到了RS485&#xff0c;本期将会对RS485做比较全面的比较和盘点。 什么是RS485&#xff1f; RS485是一种用于串行通信的标准&#xff0c;通常用于工业自动化和远距离数据传输。它在电气…

3.大模型高效微调PEFT

大模型高效微调(PEFT)技术 预训练模型的背景 预训练与微调:传统的微调方法通常涉及对整个预训练模型的参数进行再训练,以适应特定任务。这虽然有效,但计算成本高,且需要大量的标记数据。模型结构:像BERT或GPT这样的模型通常包含数亿甚至数十亿个参数,构成一个深层次的…