从0-1构建企业级智能文档知识库系统 RAGWise(智询库)

0 阅读3分钟

 序

完整覆盖 LangChain/LCEL、向量数据库、FastAPI 后端、Gradio 前端、Docker 部署、RAGAS 量化评估

这是最后的效果:

​编辑

​编辑

​编辑

github.com/yyyJ8/RAGWI…

rag就是一种大模型增强技术,简答来说就是:根据用户的问题,从知识库里面检索相关知识,把检索的内容作为拼接到prompt的上下文,让大模型基于这些实时去准确回答。

本项目主要分成3部分:rag,backend,frontend

rag

部分的流程:loader->splitter->emdedding->vectorstore->retriever->reranker->chain

        1、loader.py 

加载文档,支持txt、pdf、md、word文件,根据后缀来判别。

        2、splitter.py

分块 CharacterTextSplitter、SemanticChunker进行语义和RecursiveCharacterTextSplitter

CharacterTextSplitter直接每段切成chunksize,设定overlop重复部分

SemanticChunker切成成短句通过向量模型生成语义向量,根据设定的阈值判断分割点

RecursiveCharacterTextSplitter在第一中的基础上添加separators一些符号进行分割

        3、embedding.py

调用阿里云百炼模型text-embedding-v4

        4、verctorstore.py

创建向量数据库chroma 包括它的CRUD

        5、retriever.py

检索器  向量检索+BM25检索构建多路找回检索器

BM25是去找关键词的匹配 专业术语、精准名词、固定表述匹配

向量检索是找句子匹配 计算语义相似度 一些口语化的表达的查询

把这两条路合并去重EnsembleRetriever得到更全面的相关文本块

构建MultiQuery把一个问题变成多个问法搜索多次,解决检索不全的问题(输入,扩写,多路检索,合并去重)

        6、reranker.py

重排 把问题和多路找回的相关内容进行语义匹配、判断解答能力、关键词契合度打分排序 进行筛选

        7、chain.py

构建chain和check_chain   最后流式输出

chain就是基础的prompt调用llm然后输出 

check_chain是在chain的结果上面在添加一轮的检查  目的是控制幻觉率

backend

利用的是FastAPI

mian.py

先初始化应用,设定跨域中间件,然后就是写一些接口

@app.post("/upload",response_model=UploadResponse) 

        加载文档,通过创建临时文件(前端传的文件是内存中的二进制数据流,Docunmentloader解析的是本地磁盘上面的,所有先创建临时文件写入磁盘用完删除),得到原始文档然后分块处理,传入向量数据库,更新检索器

@app.post("/query",response_model=QueryResponse)

        查询 接受前端问题,调用chain来生成回答

@app.post("/chat")

        流式输出

@app.get("/health",response_model=HealthCheckResponse)

        检查后端是否成功启动

schemas.py

pydantic标准化 固定参数的格式

rag_service.py

核心业务层,把接口逻辑和业务解耦

fronted

使用Gradio

定义upload_files函数,以rb打开上传,通过mime_type识别文件类型  传给后端

定义query_rag 调用后端问答接口

定义chat_rag 流式聊天交互

通过gr.Blocks创建自定义布局的网页 

        创建gr.Tab 3个独立的标签页,里面分别是上传文件、智能问答、聊天模式

Docker

      Dockerfile+docker-compose.yml

Dockerfile 前端后端打包自己的代码、安装自己的依赖、运行自己的服务

docker-compose.yml 组装在一起

RAGAS 量化评估

30个样本的test_set.json

generate_dataset.py 加载test_set数据然后运行rag的系统question/ground_truth/answer/contexts通过save_to_disk保存为标准化评估数据集rag_eval_dataset

evaluate_ragas.py 加载dataset的数据集,执行评估,保存结果

有问题欢迎大家指正!