这里我们看到 max_marginal_relevance_search返回了第二和第三句的文本,尽管第三句与我们的问题的相关性不太高,但是这样的结果其实应该是更加的合理,因为第一句和第二句文本本来就有着相似的含义,所以只需要返回其中的一句就可以了,另外再返回一个与问题相关性弱一点的答案(第三句文本),这样似乎增强了答案的多样性...
这是因为我们在创建这个向量数据库时重复加载了一篇文档(pdf),这导致similarity_search搜索出来文档存在重复的可能性,要解决这个问题,可以使用max_marginal_relevance_search方法,该方法可以让结果的相关性和多样性保持均衡,关于具体实现的原理可以参考我之前写的博客:让Langchain与你的数据对话(三):检索(Retrieval)。
"similarity":标准的相似度搜索,默认选项。 "mmr":最大边缘相关性(Maximum Marginal Relevance),用于生成多样化的搜索结果。 "similarity_score_threshold":设置相似度分数阈值,仅返回超过此阈值的文档。 search_kwargs(可选字典) 功能:提供给搜索函数的关键字参数。 包含内容: k:返回的文档数量,默认为4。 score_th...
max_marginal_relevance_search(question,k=3) for i, sim_doc in enumerate(mmr_docs): print(f"MMR 检索到的第{i}个内容: \n{sim_doc.page_content[:200]}", end="\n---\n") 检索式问答链# 直接llm# 基于LangChain,可以构造一个使用LLM 进行问答的检索式问答链,这是一种通过检索步骤进行问答...
其中SemanticSimilarityExampleSelector调用了vectorstore的similarity_search方法来实现相似度的搜索。 而MaxMarginalRelevanceExampleSelector则是调用vectorstore的max_marginal_relevance_search方法来实现搜索的。 两者的搜索算法不太一样。 因为使用了向量数据库,所以他们的调用方法和其他的也不太一样: ...
docs = vector.max_marginal_relevance_search("LangChain") # 打印查询结果 for doc in docs: print(doc) 1. 2. 3. 4. 5. 6. 复制 结语 「CRUD只是操作向量数据库的基础手段,想要用好RAG必须在CRUD的基础上掌握语义检索的相关原理。」比如文档拆分时需要按语义尽可能的拆分为小的单元,而在召回时,则需要...
而MaxMarginalRelevanceExampleSelector则是调用vectorstore的max_marginal_relevance_search方法来实现搜索的。 两者的搜索算法不太一样。 因为使用了向量数据库,所以他们的调用方法和其他的也不太一样: examples = [ {"input": "happy", "output": "sad"}, ...
其中SemanticSimilarityExampleSelector调用了vectorstore的similarity_search方法来实现相似度的搜索。而MaxMarginalRelevanceExampleSelector则是调用vectorstore的max_marginal_relevance_search方法来实现搜索的。两者的搜索算法不太一样。因为使用了向量数据库,所以他们的调用方法和其他的也不太一样:...
而MaxMarginalRelevanceExampleSelector则是调用vectorstore的max_marginal_relevance_search方法来实现搜索的。 两者的搜索算法不太一样。 因为使用了向量数据库,所以他们的调用方法和其他的也不太一样: examples = [ {"input": "happy", "output": "sad"}, ...
docs = vectorstore.max_marginal_relevance_search(query) 1. 3. 混合检索 结合关键词搜索和向量搜索的方法。 from langchain.retrievers import BM25Retriever, EnsembleRetriever bm25_retriever = BM25Retriever.from_documents(documents) vector_retriever = vectorstore.as_retriever() ensemble_retriever = Ensemble...