71.高级RAG-路由检索器(智能选择检索器)
2026/8/2 13:59:25 网站建设 项目流程

内容参考于:图灵AI大模型全栈

路由检索器

根据问题智能匹配合适的检索器,就是说检索器a里面的内容是语文相关的,检索器b里面的内容是数学相关的,路由检索器就是通过问题,问大模型使用检索器a还是检索器b好一点

在路由检索器中,检索器a和检索器b被称为工具a和工具b,所以会有一个检索器转工具的过程

效果图:

如下图红框红色的文字是选择原因,retriever 0选择的就是我们deepseek的检索器

第三个问题的选择原因,retriever 1选择的就是我们小说的检索器

问题是 萧炎对DeepSeek的看法,这样的问题选择哪一个检索器就取决于我们设置的大语言模型的智商了,如下图它选择的是小说的检索器

代码

from llama_index.core import ( VectorStoreIndex, SimpleDirectoryReader, ) # 这个RetrieverTool库用来把检索器转成工具 from llama_index.core.tools import RetrieverTool from llama_index.core.retrievers import RouterRetriever from base_llm import llm, embed_model # 加载 deepseek 文档 deep_docs = SimpleDirectoryReader( input_files=["./data_file/deepseek介绍.txt"] ).load_data() # 创建 deepseek 文档的索引 deep_index = VectorStoreIndex.from_documents( deep_docs, embed_model=embed_model ) # 加载 小说文档 doupo_docs = SimpleDirectoryReader( input_files=["./data_file/小说.txt"] ).load_data() # 创建 小说文档 的索引 doupo_index = VectorStoreIndex.from_documents( doupo_docs, embed_model=embed_model ) # 创建 deepseek的 Retriever(检索器) deep_retriever = deep_index.as_retriever( similarity_top_k=3 ) # 创建 小说的 Retriever(检索器) doupo_retriever = doupo_index.as_retriever( similarity_top_k=3 ) # deepseek的 Retriever(检索器),转成 Tool(工具) deep_tool = RetrieverTool.from_defaults( retriever=deep_retriever, # 描述当前工具有什么用,路由检索器会根据这个描述找合适的工具 description=""" 用于检索 DeepSeek 相关介绍资料。 适合回答 DeepSeek 的背景、模型特点、技术能力、应用场景、人物评价等问题。 """ ) # 小说的 Retriever(检索器),转成 Tool(工具) doupo_tool = RetrieverTool.from_defaults( retriever=doupo_retriever, # 描述当前工具有什么用,路由检索器会根据这个描述找合适的工具 description=""" 用于检索小说相关内容。 适合回答小说人物、剧情发展、章节情节、角色关系、功法设定等问题。 """ ) # 创建 RouterRetriever(路由检索器) router_retriever = RouterRetriever.from_defaults( retriever_tools=[ deep_tool, doupo_tool ], llm=llm, # 能不能一次选择多个 Retriever select_multi=False ) # 开始检索 questions = [ # "DeepSeek 为什么受到关注?", # "Alexander Wang 对 DeepSeek 的评价是什么?", # "萧炎和萧薰儿是什么关系?", "萧炎对DeepSeek的看法" ] for query in questions: nodes = router_retriever.retrieve(query) print(f"\n用户问题: {query}") print("=" * 50) for node in nodes: print(node.text) print()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询