AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


大模型时代,RAG系统在提升信息检索效率和生成文本质量方面展现出了巨大的潜力
发布日期:2024-06-18 08:39:01 浏览次数: 1930 来源:BW技术杂谈



大模型时代,RAG系统在提升信息检索效率和生成文本质量方面展现出了巨大的潜力。RAG系统的核心在于与大型语言模型(Large Language Model, LLM)的深度融合。LLM通过大量的预训练数据,具备了强大的语言理解和生成能力。而RAG系统通过引入LLM,使得其在生成准确回答时能够更好地理解上下文和用户意图,从而提供更加智能和人性化的交互体验。今天为大家介绍一个较为成熟的开源RAG系统,其由网易开源,也是较早的功能比较完善的两阶段召回系统,对于构建企业内部的RAG系统具备较好的借鉴意义,如果您对如何构建RAG系统没有什么思路,可以参考此项目。

简介

QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,架构支持本地部署,可断网安装使用。 大多数格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。 目前已支持格式: PDF(pdf),Word(docx),PPT(pptx),XLS(xlsx),Markdown(md),电子邮件(eml),TXT(txt),图片(jpg,jpeg,png),CSV(csv),网页链接(html)等。QAnything一经开源,即获得大量关注,其项目star数如下图: 

相比于一些框架类的RAG系统,比如利用langchain或者llamaIndex构建的系统,QAnything由于核心的业务逻辑是通过自己的代码进行组织,更加易于理解,没有非常复杂的抽象接口以及动态运行时行为,代码可读性非常高,对于理解RAG系统流程是很有帮助的。

系统架构

依据开源仓库,系统架构如下图所示:

可以清楚的看到,整个架构实现了一个两阶段召回的系统,最终的召回结果进入LLM进行Answer合成,形成最终的输出,根据仓库中的数据,引入二阶段重排序的RAG系统的性能大幅提升,如下图所示:

对于此点,官方的解释是一个是二阶段召回架构的优越性,另外也是因为自研了embedding和rerank模型,得到了性能的提升。如果想在自己的业务线落地此系统,可以根据自己的需求使用自己的模型。

代码结构解析

代码目录结构

代码目录结构如下图所示:

其中,核心的代码在QAnything_kernel文件路径下。在阅读代码时,可以先阅读路径下的docker-compose文件,这样可以对项目的基础设施结构有一定了解。
在QAnything_kernel文件夹下,可以看到,对系统进行了清晰划分,分别为config,connector,core,dependent_server,qanythin_server,utils子文件夹,各文件夹内容如下表所示:

文件夹功能
config系统各类配置参数、全局变量定义
connector连接器定义,包括数据库链接,外部模型(模型服务,如openAI这种)接口定义
coreRAG流程实现
dependent_server本地模型服务接口相关代码
qanything_server系统串联前后端的中间层代码,主要实现了功能的API后端接口,供前端调用
utils辅助代码

基础设施

通过docker文件,可以看到,QAnything系统的存储设施包括 Milvus向量数据库,Etcd分布式注册中心,Elasticsearch 数据库,mysql数据库,minIO 对象存储。大部分为存储组件,其中,Milvus负责存储embedding向量,Elasticsearch用于实现bm25融合检索,mysql用于存储系统相关元信息,minIO用于存储上传的文件对象。

核心代码简述

sanic_api.py

位于qanything_server文件夹,为后端服务程序入口,后端服务通过python的sanic异步服务库实现。后端系统的所有服务入口以及路由均定义与此,具体的后端函数实现在同文件夹的handler.py文件中。

local_doc_qa.py

位于core文件夹,定义了一个LocalDocQA类,该类实现了RAG的核心业务流程,该类以来langchain模块,被前面的handler文件调用。

connector文件夹

  • • database文件夹:其中的milvus_client.py文件实现了向量数据库的访问链接,es_client.py文件实现了es的访问链接,es_client.py之所以与milvus在同一个文件夹中,是因为es_client.py只有在其中bm25检索时,才会启用。

  • • llm文件夹:定义了各类llm链接类,分别为fastchat类型,openai类型,以及本地类型。

  • • embedding文件夹: 分别定义了本地以及远程的embedding模型接口。

dependent_server

如果需要本地部署,则需要关注此文件夹,其提供了一种本地serve大模型的方式,该工程中,通过为triton推理框架添加fastchat后端,实现了模型服务的架设,在实际的项目落地中,可以根据自己方便的方式,进行模型服务架设。

总结

QAnything提供了一份简单但全面的RAG系统构建范本,可以为本地构建RAG系统提供依据。但是请注意,工程并没有提供前端代码,只是提供了编译后的js前端产物。在部署系统时,可以根据后端API自行编写前端界面。




53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询