网易RAG问答知识库开源了,Star 6K!!
- RAG 问答知识库 QAnything 开源了
- QAnything 架构设计剖析
- 整个架构的工作流程主要包含三个环节
- 为什么需要两阶段检索?
- 使用的基座大模型
- 相关技术组件
- QAnything 本地部署
- 一键部署安装,特别简单
- 部署安装 FAQ
RAG 问答知识库 QAnything 开源了
网易开源了自研的 RAG 引擎 QAnything。该引擎允许用户上传 PDF、图片、Word、Excel、PowerPoint 等多种格式的文档,并实现类似于 ChatGPT 的互动问答功能,其中每个答案都能精确追溯到相应的文档段落来源。QAnything 支持纯本地部署,上传文档数量无上限,问答准确率高。正如它的名字一样,Q 是 Question,A 是 Answer,QAnything 的目标就是万物皆可问!
总之,QAnything 是一个支持多种格式文件和数据库的本地知识库问答系统,可离线安装
简单上传本地文件,即可获得准确、快速、靠谱的问答体验。
目前已支持格式: PDF(pdf),Word(docx),PPT(pptx),XLS(xlsx),Markdown(md),电子邮件(eml),TXT(txt),图片(jpg,jpeg,png),CSV(csv),网页链接(html)等。
开源 Github 地址:https://github.com/netease-youdao/QAnything
QAnything 架构设计剖析
整个架构(如下图所示)包括了模型和系统等所有必要的模块。模型方面包括 OCR 解析、Embedding/rerank,以及大模型。系统方面包括向量数据库、MySQL 数据库、前端、后端等必要的模块。整个引擎的功能完整,用户可以直接下载,不需要再搭配其他的模块即可使用。系统可扩展性也非常好,只要硬盘内存足够,就可以一直建库,支持无上限的文档。
整个架构的工作流程主要包含三个环节
-
索引(Indexing):文本索引的构建包括以下步骤:文档解析、文本分块、Embedding 向量化和创建索引。先将不同格式的原始文件解析转换为纯文本,再把文本切分成较小的文本块。通过 Embedding 为每一个文本块生成一个向量表示,用于计算文本向量和问题向量之间的相似度。创建索引将原始文本块和 Embedding 向量以键值对的形式存储,以便将来进行快速和频繁的搜索。
-
检索(Retrieval):使用 Embedding 模型将用户输入问题转换为向量,计算问题的 Embedding 向量和语料库中文本块 Embedding 向量之间的相似度,选择相似度最高的前 K 个文档块作为当前问题的增强上下文信息。
-
生成(Generation):将检索得到的前 K 个文本块和用户问题一起送进大模型,让大模型基于给定的文本块来回答用户的问题
为什么需要两阶段检索?
- 知识库数据量大的场景下两阶段优势非常明显,如果只用一阶段Embedding检索,随着数据量增大会出现检索降级的问题。二阶段 rerank重排后能实现准确率稳定增长,即数据越多,效果越好。
- QAnything 使用的检索组件 BCEmbedding 有非常强悍的双语和跨语种能力,能消除语义检索里面的中英语言之间的差异。
使用的基座大模型
- 开源版本 QAnything 的大模型基于阿里通义千问,并在大量专业问答数据集上进行微调,在阿里千问的基础上大大加强了问答的能力。选择一个性价比高的大模型也是很重要的。
相关技术组件
- BCEmbedding 文本嵌入模型
- Triton Inference Server 推理服务
- vLLM 在线推理服务加速器
- FastChat 即时通讯平台
- FasterTransformer 在线推理加速库
- LangChain 应用开发框架
- LangChain-Chatchat 聊天机器人应用
- Milvus 向量数据库
- PaddleOCR 图片识别组件
- Sanic Python 3.6+ Web 框架
QAnything 本地部署
一键部署安装,特别简单
1:下载项目
git clone https://github.com/netease-youdao/QAnything.git2:进入项目根目录执行启动脚本cd QAnythingbash ./run.sh-h获取详细的LLM服务配置方法bash run.sh #默认在0号GPU上启动bash close.sh #关闭服务
部署安装 FAQ
https://github.com/netease-youdao/QAnything/blob/master/FAQ_zh.md