引言
在许多大语言模型(LLM)应用中,我们需要从外部数据源中检索信息,以便生成更准确和相关的响应。这些信息往往通过Retriever模块检索,然后用于生成提示,供LLM进行处理和响应。在这篇文章中,我们将深入探讨如何创建一个自定义Retriever,并提供代码示例来帮助你在自己的项目中实现这一功能。
主要内容
Retriever接口
要创建一个自定义Retriever,你需要扩展BaseRetriever
类,并实现以下方法:
_get_relevant_documents
:用于同步获取与查询相关的文档(必需)。_aget_relevant_documents
:提供异步支持(可选)。
通过继承BaseRetriever
,你的Retriever不仅能自动成为一个LangChain的可运行对象,还能利用标准的Runnable功能。
实现细节
实现一个Retriever的核心在于_get_relevant_documents
方法,它可以调用数据库或通过web请求获取数据。在某些情况下,由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问的稳定性(例如使用{AI_URL}作为API端点)。
ToyRetriever示例
下面是一个简单的ToyRetriever的实现,它返回所有包含用户查询文本的文档。
from typing import List
from langchain_core.callbacks import CallbackManagerForRetrieverRun
from langchain_core.documents import Document
from langchain_core.retrievers import BaseRetr