一、as_retriever的作用
-把不同向量库的原生检索能力,封装成统一、可插拔的检索器对象(调用的函数,使用的参数一样) -对检索出来的内容进行进一步处理 # 示例: -修改向量库初始化,检索器调用逻辑完全不变 # 原 Milvus 检索器(你的代码) retriever = milvus_vector_store.as_retriever(search_kwargs={"k":5}) # 换成 Chroma 后, retriever = chroma_vector_store.as_retriever(search_kwargs={"k":5}) # 调用方式完全一致(无需改一行) docs = retriever.invoke("查询学生ZS的分数")二、检索器的使用
检索器策略类型 similarity:追求召回率,不介意低相关度内容 k + 可选 filter similarity_score_threshold:追求精准度,只保留高相关度内容 score_threshold + k mmr:追求内容多样性,避免重复 (1)similarity(默认) retriever = vector_store.as_retriever( search_type="similarity", search_kwargs={ "k": 5, "expr": 'source == "学生信息"' # 表达式字符串 } ) (2)similarity_score_threshold(精准检索) retriever = vector_store.as_retriever( search_type="similarity_score_threshold", search_kwargs={ "k": 10, "score_threshold": 0.7, # 余弦≥0.7 "expr": 'user_id == "user_001"' } ) (3)mmr(多样性检索)答案都跟问题相关,但互相之间长得不那么像 retriever = vector_store.as_retriever( search_type="mmr", search_kwargs={ "k": 5, # 最终返回5条 "fetch_k": 20, # 先检索20条候选 "lambda_mult": 0.7, # 偏向相似度(70%相似度+30%多样性) "expr": 'source == "航班信息"' } )