尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

73.高级RAG-后检索器(文档过滤)

73.高级RAG-后检索器(文档过滤) 内容参考于图灵AI大模型全栈过滤它的作用是处理检索出来的数据比如说之前通过BM25词频率检索出来的文档由于我们非要让它返回多个文档数据导致有些都是0分那么这些0分的就没必要拼接到提示词中给大模型了或者说低于多少分比如低于0.7、0.5这个分数很低的相关性可能就不会很大所以就不要给大模型了所以过滤的功能是把检索出来的一些相关性不高的文档删掉一般0.7分以上的就是属于很相似的llamaindex文档地址:https://developers.llamaindex.ai/python/framework-api-reference/postprocessor/效果图下图中是检索出来的所以文档和文档的相关性分数下图红框是通过下图蓝框过滤器来过滤0.7分以下的数据得到的最终相关性的文档代码注意如果给RetrieverQueryEngine传递了node_postprocessors参数就不需要自己手动调用后处理器的代码了所以说下方 retriever.retrieve和similarity_processor.postprocess_nodes代码可以删了from llama_index.core import ( SimpleDirectoryReader, VectorStoreIndex ) from llama_index.core.node_parser import SentenceSplitter from llama_index.core.postprocessor import SimilarityPostprocessor from llama_index.core.query_engine import RetrieverQueryEngine from base_llm import embed_model, llm # 读取文档 documents SimpleDirectoryReader( input_files[./data_file/公司规章制度.txt] ).load_data() # 文档分割器 parser SentenceSplitter( chunk_size300, chunk_overlap50 ) # 创建索引 index VectorStoreIndex( parser.get_nodes_from_documents(documents), embed_modelembed_model ) # 创建检索器返回15个相关文档但是不可能把15个都给大模型所以需要后续使用后处理来处理检索出来的文档 # 广撒网捞大鱼丢小鱼 retriever index.as_retriever(similarity_top_k15) # 先多召回15条 # 创建相似度的后处理器小于0.7分就直接不要了 similarity_processor SimilarityPostprocessor(similarity_cutoff0.7) # 创建问题查询引擎 query_engine RetrieverQueryEngine.from_args( # 设置检索器 retrieverretriever, # 设置大模型 llmllm, # 设置后处理器后处理器可以传递多个 # 所以说可以对文档进行不同的过滤处理比如过滤和重排重排是后面的内容这里只写过滤 # 执行顺序从上往下依次执行 node_postprocessors[ similarity_processor, ], ) # 问题 query 公司上下班时间 # response query_engine.query(query) print( LLM回答 ) print(response) # 下方的代码retriever.retrieve和similarity_processor.postprocess_nodes是在不给 RetrieverQueryEngine.from_args 传递node_postprocessors参数的情况下写的 # 如果传递了node_postprocessors参数直接使用RetrieverQueryEngine.from_args(xx).query(query)就可以了 nodes retriever.retrieve(query) print(\n 检索节点分数 ) for node in nodes: print(fScore: {node.score:.3f} | Text: {node.text[:100]}...) # 把检索出来的文档节点给到后处理器这里是过滤小于0.7分的 # nodes就是通过检索器查出来的跟问题相关的文档节点 res similarity_processor.postprocess_nodes(nodes) print(res)
返回列表