聊聊智能体框架MetaGPT是如何实现RAG Reranker重排序
仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接
继上文后,深度探索一下RAG重排序。在RAG系统中,初始检索阶段通常会根据简单的相关性指标(如关键词匹配等)返回一批文档。然而,这些初始排序可能并不完全符合用户的真实需求和问题的语义理解。Reranker的主要目的是对这些初步检索结果进行更精细的排序,考虑更多的语义信息、上下文相关性以及与生成任务的适配性,从而将最相关、最有用的文档排在前面,为后续的生成阶段提供更好的输入,提高生成内容的准确性和质量。
总的来说,当前MetaGPT所提供的RAG功能都是集成了Llama_Index:
数据输入,支持多种格式文件(包括pdf/docx/md/csv/txt/ppt)、python对象
检索功能,支持faiss/bm25/chromadb/es,并支持混合检索
检索后处理,支持LLMRerank/ColbertRerank/CohereRerank/BGERerank/ObjectRerank,对上面检索出来的内容进行重排以得到更准确的数据
数据更新,增加文本与python对象
数据保存及恢复,不用每次都进行向量化
但是官网文档给出来的Reranker示例[1],我是有些没有看懂的,即如下:
先使用faiss进行检索,然后对检索出来的结果再用LLMRanker进行重排,得到最后检索的结果。
那么我要基于bge-reranker-v2-m3Reranker模型实现重排,应该如何处理呢?在官网上是没有找到答案的;那就基于llama-index的Reranker的示例来做。
在modelscope上下载bge向量模型后,放在本地,然后在engine方法中配置一下BGERerankerConfig类:
从源码来看,不只是BGEReranker还有很多不同类型的Reranker。
这里会注册reranker,在文档获取时就会查询到对应config下的reranker。
这些不同的类型,都是集成自llama-index中,在官方文档[2]可以找到详细的描述与示例。
还是以官方示例rag_pipeline代码为例直接跑一遍,如下:
在运行过程中,相比较之前是会慢一点,但最后的结果相关性与准确度会更高。
Reference
官方文档:https ://docs.llamaindex.ai/en/stable/examples/node_postprocessor/FlagEmbeddingReranker/