利用 llamaIndex 搭建文档问答助手
在 2023 全球智能汽车 AI 挑战赛 —— 赛道一:AI 大模型检索问答中,提供一份汽车使用手册文件,要求针对文件创建智能问答助手
本文通过使用 llamaIndex 完成这个 RAG 过程,和普通 RAG 不同的是:生成的答案包含图片及引用
搭建这个问答系统一共分为 3 步
- 预处理文档:基于标题层级对 pdf 进行分块处理,便于后续图片及引文的使用
- 构建索引:通过 llamaIndex 构建索引,本次使用 bm25 及向量检索的方式
- 构建检索生成引擎:通过 llamaIndex 构建查询引擎
预处理文档
通过 pymupdf 库按标题切分 pdf 文档,最终生成类似文档
构建索引
通过尝试不同的索引,确定使用 BM 25 Retriever+VectorStoreIndex 的混合索引的方式,以下是不同索引的评估效果
检索器 | topK | hit_rate | mrr | precision | recall | ap | ndcg | 备注 |
---|---|---|---|---|---|---|---|---|
VectorStoreIndex | 2 | 0.779751 | 0.708703 | 0.400829 | 0.779751 | 0.708703 | 0.727308 | |
VectorStoreIndex | 5 | 0.885731 | 0.73954 | 0.184162 | 0.885731 | 0.73954 | 0.776535 | |
SummaryIndex | 5 | 0.971581 | 0.012225 | 0.001776 | 0.971581 | 0.012225 | 0.134562 | |
BM25Retriever | 2 | 0.092954 | 0.086738 | 0.048253 | 0.092954 | 0.086738 | 0.088366 | 官方 |
BM25Retriever | 2 | 0.871522 | 0.806986 | 0.448194 | 0.871522 | 0.806986 | 0.823886 | 自定义 |
BM25Retriever+VectorStoreIndex | 2,2,2 | 0.872114 | 0.809355 | 0.44701 | 0.872114 | 0.809355 | 0.825789 | 自定义 + QueryFusionRetriever |
BM25Retriever+VectorStoreIndex | 3,5,3 | 0.910006 | 0.799092 | 0.303335 | 0.910006 | 0.799092 | 0.82779 | num_queries=2 |
构建检索生成引擎
通过结构化 llm 的输出,输出引文,然后提取引文的图片,生成最终答案,效果如下
项目地址:GitHub - WuShaogui/DocumentsIntelligentAssistant: 对文档使用 RAG 生成回答