Lazy loaded image
🔍 从零开始实现高效数据检索
Words 2060Read Time 6 min
2024-5-28
2024-12-31
type
status
date
slug
summary
tags
category
icon
password
comment
Status
从零开始实现数据检索及RAG的简单实现_哔哩哔哩_bilibili
-本视频中,我们将探讨LangChain的向量存储和抽象检索器的使用方法。无论你是新手还是经验丰富的开发者,这个教程都会为你提供宝贵的知识,帮助你理解如何从(向量)数据库和其他来源检索数据,并与大模型的工作流集成。视频内容包括:概述:介绍LangChain的基本概念,包括文档、向量存储和检索器。创建文档:展示如何创建包含元数据的文档,为向量存储提供基础数据。向量存储:解释向量存储的概念,并使用La, 视频播放量 1773、弹幕量 0、点赞数 56、投硬币枚数 31、收藏人数 134、转发人数 6, 视频作者 小灰的AI笔记, 作者简介 探索AI的无限可能,相关视频:构建一个基于SQL数据的问答链和Agent智能体,创建一个拥有上下文记忆的RAG 链和agent应用,【喂饭教程】100%实现Ollama本地大模型部署+知识库搭建!零基础也能轻松看懂的Ollama教程,基于LLamaindex轻松实现RAG多知识库智能问答,10分钟20行代码构建一个PDF文件的问答系统,【喂饭教程】基于Qwen2.5-3B本地部署LightRAG,手把手带你从原理解析+模型部署+代码解读,彻底搞懂LightRAG!,2025新版教程!从零开始到大模型RAG实战:RAG原理、应用与系统构建及项目实战教程(增强检索/知识库搭建/向量数据库),【B站最新】RAG知识库实战,清华大佬讲解基于知识图谱+知识库的大模型对话系统,从0到1实现一个大模型对话系统!简单易懂,轻松拿捏(附项目教程),【RAG实战应用】基于Ollama实现100%本地化RAG应用,构建一个将自然语言的问题转换成结构化对象并查询的RAG应用
从零开始实现数据检索及RAG的简单实现_哔哩哔哩_bilibili
 
这个文档,我们将熟悉LangChain的向量存储和抽象检索器。支持从(向量)数据库和其他来源检索数据,并与大模型的工作流集成。这对于需要检索数据以进行推理的应用程序非常重要,例如检索增强生成(retrieval-augmented generation)的情况,或者RAG(请参阅我们的RAG教程在这里)。

概念

这个指南着重于文本数据的检索。涵盖以下主要概念:
  • Documents:文本
  • Vector stores:向量存储
  • Retrievers:检索

Setup

Jupyter Notebook

这些教程和其他教程可能最方便在Jupyter笔记本中运行。请参阅此处有关安装方法的说明

Installation

这个教程需要使用 langchainlangchain-chromalangchain-openai包。
  • Pip

LangSmith

设置环境变量
如果在 notebook中,可以这样设置:

Documents

LangChain 实现了一个提取的文档,文档包括文本单元和相关元数据。它具有两个属性:
  • page_content :字符串格式的内容
  • metadata :包含任意元数据的字典。
元数据属性可以包含关于文档来源、与其他文档的关系以及其他信息。请注意,单个文档对象通常代表更大文档的一部分。
生成一些 documents 例子:

API 调用:

这里我们生成了五个包含元数据的文档,其中显示了三个不同的“来源”。

向量存储

向量搜索是一种常见的存储和搜索非结构化数据(如非结构化文本)的方法。其思想是存储与文本相关联的数值向量。给定一个查询,我们可以将其嵌入为相同维度的向量,并使用向量相似度度量来识别存储中相关的数据。
LangChain的VectorStore对象定义了用于将文本和文档对象添加到存储,和使用各种相似度度量进行查询的方法。通常使用嵌入模型进行初始化,这些模型确定了文本数据如何被转化为数字向量。
LangChain包括一套与不同矢量存储技术集成的解决方案。一些矢量存储由提供者(如各种云服务提供商)托管,并需要特定的凭据才能使用;一些(例如Postgres)在独立的基础设施中运行,可以在本地或通过第三方运行;其他一些可以运行在内存中,用于轻量级工作负载。在这里,我们将演示使用Chroma的LangChain向量存储的用法,是一个基于内存的实现。
实例化一个向量存储的时候,通常需要提供一个嵌入模型来指定文本应该如何转换为数字向量。在这里,我们将使用 OpenAI 的嵌入模型

API 调用:

调用 .from_documents 把文档添加到向量存储中。VectorStore实现了用于添加文档的方法,这些方法可以在对象实例化之后调用。大多数实现都允许您连接到现有的向量存储,例如,通过提供客户端、索引名称或其他信息。有关特定集成的更多详细信息,请参阅文档
一旦我们实例化了一个包含文档的 VectorStore,我们就可以对其进行查询。VectorStore 包括以下查询方法:
  • 同步和异步查询;
  • 通过字符串查询和通过向量查询;
  • 带有和不带有返回相似度分数的查询;
  • 通过相似度和最大边际相关性(在检索结果中平衡相似度和多样性的查询)进行查询。
这些方法会输出一个Document对象的列表。

例子

返回与字符串查询相似的文档:
异步查询:
返回分数查询:
根据嵌入的查询返回类似文档的查询:
学习更多:

Retrievers

LangChain VectorStore 对象不继承 Runnable,因此无法直接集成到 LangChain 表达式语言 chains 中。
Retrievers 继承了 Runnables,实现了一套标准方法(例如同步和异步的 invokebatch操作),并且设计为纳入LCEL链中。
我们可以自己创建一个简单的可运行对象,而无需继承 Runnables。下面我们将围绕相似性搜索方法构建一个示例:

API 调用:

Vectorstores 实现一个 as_retriever 方法,该方法将生成一个 VectorStoreRetriever。这些 retriever 包括特定的 search_typesearch_kwargs 属性,用于识别调用底层向量存储的方法以及如何给它们参数化。例如,我们可以使用以下方法复制上述操作:
VectorStoreRetriever 支持相似度(默认)、mmr(最大边际相关性)和 similarity_score_threshold 可以对输出的相似文档,设定相似度分数阈值。
Retrievers 可以很容易地整合到更复杂的应用中,比如检索增强生成(RAG)应用程序,它将给定的问题与检索到的上下文结合组成 LLM 的提示。下面我们展示一个最简单的例子。
  • OpenAI

API 调用:

总结:

本文档提供了向量存储和检索的示例代码。介绍了LangChain的向量存储和抽象检索器,包括向量存储和检索器的概念和使用。向量存储是存储和搜索非结构化数据的一种方法,LangChain的VectorStore对象定义了用于将文本和文档对象添加到存储,和使用各种相似度度量进行查询的方法。检索器继承了Runnables,实现了一套标准方法,并且可以加入LCEL链中。
从零开始实现高效数据检索
 
官网链接:
上一篇
创建一个聊天机器人 | 🦜️🔗 LangChain
下一篇
支持联网检索、连接本地知识库的问答Agent智能体创建 | 🦜️🔗 LangChain