LlamaIndex 检索器 Retriever
检索器负责在给定用户查询(或聊天消息)的情况下获取最相关的上下文。
它可以建立在索引之上,也可以独立定义。它作为查询引擎(和聊天引擎)中用于检索相关上下文的关键构建模块。
使用方法
从索引中获取检索器
retriever = index.as_retriever()
为问题检索相关上下文:
nodes = retriever.retrieve("蒲公英的作用?")
完整示例:
from llama_index.core import Settings, StorageContext, load_index_from_storagefrom my_llms.MyLLMsClients import MyLLMsClientsSettings.llm = MyLLMsClients.deepseek_client()
Settings.embed_model = MyLLMsClients.qwen_embeddings()# 加载已持久化的索引
storage_context = StorageContext.from_defaults(persist_dir="../storage")# 加载索引
index = load_index_from_storage(storage_context=storage_context)# 获取检索器
retriever = index.as_retriever(similarity_top_k=5, # 返回相似度最高的前 k 个结果, 默认值: 2
)# 为问题检索相关上下文
nodes = retriever.retrieve("介绍以下蒲公英")print(nodes)
检索到的Node节点:
[NodeWithScore(node=TextNode(id_='49da7962-8fe0-43be-8a5f-fad06ac3440b', embedding=None, metadata={'file_path': 'D:\\01-LlaDeepSeek-蒲公英.md', 'file_name': 'DeepSeek-蒲公英.md', 'file_type': 'text/markdown', 'file_size': 2391, 'creation_date': '2025-07-12', 'last_modified_date': '2025-07-12'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'],excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='61a454d4-11e7-4e5a-8466-5e46f951a93e', node_type='4', metadata={'file_path': 'D:\\01-Lla\本草纲目\\DeepSeek-蒲公英.md', 'file_name': 'DeepSeek-蒲公英.md', 'file_type': 'text/markdown', 'file_size': 2391, 'creation_date': '2025-07-12', 'last_modified_date': '2025-07-12'}, hash='6a54f6f1f00dd9488d4d7ac1a21af443d69d69b5c3745e80db8450816e69489b'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='af068d0d-37b7-40d2-9cd3-059176d5af86', node_type='1', metadata={}, hash='7d60ffdf1172bc7560732fe82933d1e363ba6ffa25d2421adebf0ed78d10db60')}, metadata_template='{key}: {value}', metadata_separator='\n', text='蒲公英(学名:**Taraxacum**)是。\r\n - 根可烘焙后替代咖啡(蒲公英咖啡)。\r\n- **其他用途**:\r\n - 汁液曾被用作天然染料或橡胶原料(部分品种含乳胶)。\r\n\r\n---\r\n\r\n### **5.', mimetype='text/plain', start_char_idx=0, end_char_idx=829, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), score=0.7675869519092057), NodeWithScore(node=TextNode(id_='f3fabd45-b876-4f21-b2ba-b3be0d970ef9', embedding=None, metadata={'file_path': 'D:\\01-LlamaIndex\\project\\MyLlamaIndex\\10-检索其Retriever\\..\\data\\本草纲目\\通义千问-蒲公英.md', 'file_name': '通义千问-蒲公英.md', 'file_type': 'text/markdown', 'file_size': 2403, 'creation_date': '2025-07-12', 'last_modified_date': '2025-07-12'}, excluded_embed_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], excluded_llm_metadata_keys=['file_name', 'file_type', 'file_size', 'creation_date', 'last_modified_date', 'last_accessed_date'], relationships={<NodeRelationship.SOURCE: '1'>: RelatedNodeInfo(node_id='43f8fa95-4138-4ff3-b742-fda8ade753f0', node_type='4', metadata={'file_path': 'D:\\01-LlamaIndex\\project\\MyLlamaIndex\\10-检索其Retriever\\..\\data\\本草纲目\\通义千问-蒲公英.md', 'file_name': '通义千问-蒲公英.md', 'file_type': 'text/markdown', 'file_size': 2403, 'creation_date': '2025-07-12', 'last_modified_date': '2025-07-12'}, hash='075cdf6e3c16762c6a6155395e613dadb7955debcb23bdf472fe27c86b1461c8'), <NodeRelationship.NEXT: '3'>: RelatedNodeInfo(node_id='6d88a2fb-b06e-4191-9bb3-32b8403f5047', node_type='1', metadata={}, hash='ad076e1df247008987d729e5ff8b6f8a26ea3475001bf24246f2400e1df73272')}, metadata_template='{key}: {value}', metadata_separator='\n', text='蒲公英(学名:**Tara尿通淋**:有利尿作用,适用于水肿等症状。\r\n- **抗炎抗菌**:现代研究发现其含有多种活性成分,如黄酮类、萜类化合物等,具有一定的抗炎和抗氧化作用。\r\n\r\n#### 3.', mimetype='text/plain', start_char_idx=0, end_char_idx=706, metadata_seperator='\n', text_template='{metadata_str}\n\n{content}'), score=0.7424136926100374)]
VectorIndexRetriever
完整示例:
from llama_index.core import Settings, SimpleDirectoryReader, VectorStoreIndex
from llama_index.core.indices.vector_store import VectorIndexRetrieverfrom my_llms.dash_scope_client import DashScopeClientSettings.llm = DashScopeClient.get_llm()
Settings.embed_model = DashScopeClient.get_embedder()# 加载数据
documents = SimpleDirectoryReader("../data/vlog").load_data()# 创建索引
index = VectorStoreIndex.from_documents(documents)# 获取检索器
retriever = VectorIndexRetriever(index=index, # 向量索引similarity_top_k=5, # 返回相似度最高的前 k 个结果, 默认值: 2
)nodes = retriever.retrieve("和田玉是如何形成的?")for node in nodes:print(f"文本内容: {node.text[:50]}...")print(f"得分: {node.score}")print("-------------------------------")
文本内容: 其实它形成需要极端的地质条件,很多人可能都想了解。大部分研究人员认为和田玉的形成时间大约在两亿五千万...
得分: 0.6971156252891842
-------------------------------
文本内容: 文件名:地质狼孙春贵-和田玉,中国四大明玉之一的和田玉 和田玉的由来与介绍
作者:地质狼孙春贵
...
得分: 0.6890189978861022
-------------------------------
文本内容: 文件名:地质狼孙春贵-讲解和田玉所出产的产地与鉴别方法 #科普 #和田玉 #玉 #地质 #玉文化
...
得分: 0.6330236593881674
-------------------------------
文本内容: 这个戈壁料往往指的是什么?是原生玉石经过河流、泥石流等自然冲刷、搬运到。上中下游的古河床里面这些河流...
得分: 0.6265738869599385
-------------------------------
文本内容: 因为颜色像红糖,所以被形象的称为糖玉。
- 第七种是墨玉,墨玉在自然光下呈纯黑色,油润度看着也是非...
得分: 0.6086931353934419
-------------------------------
高级检索与搜索
这些指南包含高级的检索技术。有些是常见的方法,如关键词/混合搜索、重新排序等;还有一些是针对 LLM + RAG 工作流程的特定技术,例如由小到大的检索(small-to-big)和自动合并检索(auto-merging retrieval)。
-
Define Custom Retriever
-
BM25 Hybrid Retriever
-
Simple Query Fusion
-
Reciprocal Rerank Fusion
-
Auto Merging Retriever
-
Metadata Replacement
-
Composable Retrievers
自动检索
这些检索技术能够执行半结构化查询,将语义搜索与结构化过滤相结合。
-
Auto-Retrieval (with Pinecone)
-
Auto-Retrieval (with Lantern)
-
Auto-Retrieval (with Chroma)
-
Auto-Retrieval (with BagelDB)
-
Auto-Retrieval (with Vectara)
-
Multi-Doc Auto-Retrieval
知识图谱检索器
-
Knowledge Graph RAG Retriever
组合检索器
这些检索技术是在其他检索技术的基础上组合而成的——提供了层级检索和查询分解等更高层次的功能。
-
Query Fusion
-
Recursive Table Retrieval
-
Recursive Node Retrieval
-
Braintrust
-
Router Retriever
-
Ensemble Retriever
-
Multi-Doc Auto-Retrieval
托管检索器
-
Google
-
Vectara
-
VideoDB
-
Zilliz
-
Amazon Bedrock
其他检索器
这些指南无法明确归类到某个特定类别中,但依然值得关注。
-
Multi-Doc Hybrid
-
You Retriever
-
Text-to-SQL
-
DeepMemory (Activeloop)
-
Pathway