Retrievers 检索器¶
Retrievers(检索器)是 LangChain 中用于根据查询返回相关文档的通用接口。与向量存储不同,检索器不需要具备文档存储能力,只需负责检索并返回文档。检索器既可以基于向量存储构建,也支持更多样化的检索后端,例如 Wikipedia search 和 Amazon Kendra。
根据使用的检索器类型,有如下几种方法可创建检索器:
更多组件使用说明详见 LangChain Retrievers。
向量数据库创建检索器¶
使用¶
- 创建
retriever对象
可以直接基于 vectorstore 实例化得到其相关的 retriever:
retriever = vectorstore.as_retriever() # 使用vectorstore的as_retriever方法获取
docs = retriever.invoke("your-question?") # 进行检索
你也可以指定 search type 及更多 search parameters,详情参考 How to use a vectorstore as a retriever。
- 基于此 retriever 对象构造
LangchainKnowledge对象
from trpc_agent_sdk.server.knowledge.langchain_knowledge import LangchainKnowledge
rag = LangchainKnowledge(
...,
retriever=retriever,
...,
)
说明: 若已使用了
vectorstore,则retriever不是必须的。若vectorstore与retriever同时使用,retriever将对vectorstore的结果进行重排序,然后输出检索结果;这时要求retriever对象具有from_documents接口(用于从 vectorstore 结果中创建检索集)。
参考文档¶
BM25Retriever¶
安装依赖¶
pip install --upgrade --quiet rank_bm25
使用¶
- 创建
BM25Retriever对象
from langchain_community.retrievers import BM25Retriever
from langchain_core.documents import Document
# 使用 BM25Retriever 的 from_texts 方法构造检索器
# 给定一些示例文档内容 ["foo", "bar"]
retriever = BM25Retriever.from_texts(["foo", "bar"])
# 或使用 from_documents 创建
# retriever = BM25Retriever.from_documents(
# [
# Document(page_content="foo"),
# Document(page_content="bar"),
# ]
# )
- 基于此 retriever 对象构造
LangchainKnowledge对象
rag = LangchainKnowledge(
...,
retriever=retriever,
...,
)
参考文档¶
完整示例¶
请参考 examples/knowledge_with_rag_agent/README.md。
更多内容¶
更多 Retriever 组件使用说明可以参考:LangChain Retrievers。