ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1em;letter-spacing: 0.1em;color: rgb(80, 80, 80);">大模型时代,RAG系统在提升信息检索效率和生成文本质量方面展现出了巨大的潜力。RAG系统的核心在于与大型语言模型(Large Language Model, LLM)的深度融合。LLM通过大量的预训练数据,具备了强大的语言理解和生成能力。而RAG系统通过引入LLM,使得其在生成准确回答时能够更好地理解上下文和用户意图,从而提供更加智能和人性化的交互体验。今天为大家介绍一个较为成熟的开源RAG系统,其由网易开源,也是较早的功能比较完善的两阶段召回系统,对于构建企业内部的RAG系统具备较好的借鉴意义,如果您对如何构建RAG系统没有什么思路,可以参考此项目。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">简介ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">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数如下图:
代码目录结构如下图所示:
其中,核心的代码在QAnything_kernel文件路径下。在阅读代码时,可以先阅读路径下的docker-compose文件,这样可以对项目的基础设施结构有一定了解。
在QAnything_kernel文件夹下,可以看到,对系统进行了清晰划分,分别为config,connector,core,dependent_server,qanythin_server,utils子文件夹,各文件夹内容如下表所示:
| 文件夹 | 功能 |
| config | 系统各类配置参数、全局变量定义 |
| connector | 连接器定义,包括数据库链接,外部模型(模型服务,如openAI这种)接口定义 |
| core | RAG流程实现 |
| dependent_server | 本地模型服务接口相关代码 |
| qanything_server | 系统串联前后端的中间层代码,主要实现了功能的API后端接口,供前端调用 |
| utils | 辅助代码 |
通过docker文件,可以看到,QAnything系统的存储设施包括 Milvus向量数据库,Etcd分布式注册中心,Elasticsearch 数据库,mysql数据库,minIO 对象存储。大部分为存储组件,其中,Milvus负责存储embedding向量,Elasticsearch用于实现bm25融合检索,mysql用于存储系统相关元信息,minIO用于存储上传的文件对象。
位于qanything_server文件夹,为后端服务程序入口,后端服务通过python的sanic异步服务库实现。后端系统的所有服务入口以及路由均定义与此,具体的后端函数实现在同文件夹的handler.py文件中。
位于core文件夹,定义了一个LocalDocQA类,该类实现了RAG的核心业务流程,该类以来langchain模块,被前面的handler文件调用。
•database文件夹:其中的milvus_client.py文件实现了向量数据库的访问链接,es_client.py文件实现了es的访问链接,es_client.py之所以与milvus在同一个文件夹中,是因为es_client.py只有在其中bm25检索时,才会启用。
•llm文件夹:定义了各类llm链接类,分别为fastchat类型,openai类型,以及本地类型。
•embedding文件夹: 分别定义了本地以及远程的embedding模型接口。
如果需要本地部署,则需要关注此文件夹,其提供了一种本地serve大模型的方式,该工程中,通过为triton推理框架添加fastchat后端,实现了模型服务的架设,在实际的项目落地中,可以根据自己方便的方式,进行模型服务架设。
QAnything提供了一份简单但全面的RAG系统构建范本,可以为本地构建RAG系统提供依据。但是请注意,工程并没有提供前端代码,只是提供了编译后的js前端产物。在部署系统时,可以根据后端API自行编写前端界面。
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |