langChain存储文档片段,并进行相似性检索

https://python.langchain.ac.cn/docs/how_to/document_loader_pdf/#vector-search-over-pdfs

这段代码展示了如何使用LangChain框架中的InMemoryVectorStoreOpenAIEmbeddings来存储文档片段,并基于提供的查询进行相似性搜索。下面是对每一行代码的详细解释:

1. 导入必要的模块

from langchain_core.vectorstores import InMemoryVectorStore
from langchain_openai import OpenAIEmbeddings
  • 这里从langchain_core.vectorstores模块中导入了InMemoryVectorStore类,它用于在内存中创建一个向量存储,以便对文本数据执行相似性搜索。
  • 同时从langchain_openai模块中导入了OpenAIEmbeddings类,用于生成文本的嵌入(即向量化表示),这些嵌入将被用来计算文本之间的相似度。

2. 创建并填充向量存储

vector_store = InMemoryVectorStore.from_documents(pages, OpenAIEmbeddings())
  • 使用InMemoryVectorStore.from_documents()方法创建了一个名为vector_store的实例。这个方法接受两个参数:
    • pages: 这是一个包含之前加载的PDF文档页面的对象列表(假设pages变量已经被正确初始化)。
    • OpenAIEmbeddings(): 这是用来生成文本嵌入的对象。通过调用OpenAIEmbeddings(),我们创建了一个对象,该对象可以将文本转换为向量形式,便于后续的相似性比较。
  • 此步骤的结果是将pages中的每一页转换成向量,并存储在内存中的向量数据库里。

3. 执行相似性搜索

docs = vector_store.similarity_search("What is LayoutParser?", k=2)
  • 调用了vector_store对象上的similarity_search方法,以执行基于文本的相似性搜索。
  • 参数"What is LayoutParser?"是我们要查询的问题或关键词。
  • k=2指定了返回最相似的前2个结果。这里的k值可以根据需要调整,以返回更多或更少的相关文档片段。

4. 输出搜索结果

for doc in docs:
    print(f'Page {doc.metadata["page"]}: {doc.page_content[:300]}\n')
  • 这段代码遍历了由similarity_search方法返回的所有文档片段(docs),并逐个打印出来。
  • 对于每个文档片段doc,它首先打印出该片段所属的PDF页码(通过访问doc.metadata["page"]获取),然后截取并显示该片段的前300个字符(doc.page_content[:300]),以便快速查看内容概览。
  • \n用于在每个文档片段输出后添加一个空行,使得输出更加清晰易读。

综上所述,这段代码演示了如何利用LangChain框架将一组文档转换为向量表示,并基于特定查询执行相似性搜索,最后展示与查询最相关的文档片段。这对于信息检索、问答系统等应用场景非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值