云计算百科
云计算领域专业知识百科平台

技术拆解(二十一):企业知识库怎么建?从RAG整条链路梳理到RAGFlOW的落地应用

目录

一、 底座选型:知识存储与索引层

二关键点

三RAGFLOW

哲学思考



一、 底座选型:知识存储与索引层

1.原始文档存储

保存:

  • PDF

  • Word

  • Excel

  • PPT

  • 图片

  • 网页

  • 邮件

  • 制度文件

  • 业务文档

原因很简单:向量数据库存的不是原始知识本身,而是知识的索引。最终 Show Quote、查看原文、权限校验,都需要找到原文件。

2.全文索引

用于BM25,比较典型:Elasticsearch/OpenSearch,属于关键词检索,例如:

西安市住房公积金提取管理办法第十五条是什么?

这里“十五条”“公积金”这些精确词,BM25 往往比纯向量更靠谱。

3.向量数据库

保存Chunk经过Embedding Model处理后的Vector,选型可以考虑:

方案

特点

Elasticsearch / OpenSearch

BM25 + Vector 一体化,企业 RAG 很实用

Milvus

专业向量数据库,大规模场景强

Qdrant

简洁、性能不错

pgvector

已经有 PostgreSQL 的企业非常方便

FAISS

更偏算法库,不太适合作为完整企业数据库

如果你现在用 RAGFlow,其实 ES/OpenSearch 这种 Hybrid Search 架构就比较自然。

4.知识图谱(当前没加,主要作用是非关系性数据)


二关键点

权限、文档版本管理、Context Builder(Ranker后的块去重、合并等处理工作)、Ranker置信度、引用Citation、评测体系 这六个东西是上线标准

1.知识库和OA系统考虑增量同步


2.文档解析:文本 / 图片 / 表格必须分开处理

①文本

②图片

③表格


3.Chunk 切分:结构优先+Token 长度限制

Chunk Metadata 至少保存:

document_id

file_name

page

chapter

section

chunk_id

version

department

permission

created_at

updated_at


4.权限管理【重要】


5.Query 输入处理

①多轮上下文问题补全

②问题重写/扩写

③意图识别

├─普通聊天

├─知识库问答

├─数据查询(当前没加,Text2Sql)

├─知识图谱查询(当前没加)

└─无法识别

④查询分解(当前没加)


6.Prompt 层

内容包括四部分

System Prompt

      +

RAG Context

      +

Conversation历史对话

      +

User Query

主要针对System Prompt的规定

① Empty Response:查不到就说不知道

② 强制 Citation:输出的内容必须根据检索到的知识回答,必须带引用文件及块内容

③ 知识冲突处理:都展示出来,分别给出引用,让用户判断


7.Prompt Injection 防护:检索到的内容只作为数据,不能覆盖 System Prompt,作为指令。


8.评测系统:收集100条文本对,测试指标Recall@K等


三RAGFLOW

当前就用了粗排,加了Ranker效果还不好,速度还比较慢

1.组件和角色

组件

主要存什么

在 RAG 里的角色

Elasticsearch / OpenSearch

Chunk 文本、BM25 倒排索引、Embedding 向量、向量索引、检索相关字段

知识检索库

MySQL

用户、知识库、文档记录、配置、任务状态、模型配置等结构化业务数据

业务/元数据库

Redis

文档解析、Embedding 等异步任务的消息队列/任务协调

消息队列

MinIO

上传的 PDF、Word、Excel、PPT、图片等原始文件

原始文件存储

注:MinIO 保存的是真正的原始文件;Elasticsearch 保存的是从 PDF 里解析出来的chunk块


2.上传文件流程解析

用户上传 PDF

      │

      ├──────────────→ MinIO

      │                            保存原始 PDF 文件

      │

      │

      └──────────────→ MySQL

                                       保存文档记录

                                       document_id

                                       文件名

                                       所属知识库

                                       上传人

                                       解析状态

                                       Parser配置

                                       等……

                                            │

                                            ↓

                                         Redis

                                    创建“解析文档”任务

                                            │

                                            ↓

                              RAGFlow Worker

                                            │

                                    解析 PDF / OCR

                                            │

                                         切 Chunk

                                            │

                  ┌─────────┴────────┐

                  ↓                                                ↓

              Chunk文字                       Embedding模型

                  │                                                │

                  │                                             Vector

                  │                                                 │

                  └─────────┬─────────┘

                                            ↓

                Elasticsearch / OpenSearch

                                            │

                  ┌─────────┴─────────┐

                  ↓                                                  ↓

              BM25倒排索引                         向量索引

                  │                                                   │

             Chunk文字                                     Vector


3.组件架构图:RAGFlow 存储层

       ┌──────────────────MySQL──────────────────┐                              

        │  系统元数据 / 用户 / 知识库 / 文档配置                                               

        │  文档状态 / 模型配置                                                                                                      

        ├─────────────────MinIO────────────────────┤                            

        │  PDF / Word / Excel / PPT / 图片原始文件                                                  

        ├─────────────────Elasticsearch / OpenSearch──────┤                           

        │  Chunk文本 ──────→ BM25倒排索引                                                  

        │  Embedding Vector ─→ Vector Index            

        ├───────────────────Redis───────────────────┤                          

        │  消息队列 / 文档解析任务 / Task Executor                                         

        └──────────────────────────────────────────┘


4.切块逻辑:图和表格怎么处理保存的(使用的DeepDOC  PDF解析策略)

类型

DeepDOC之后得到什么

检索内容 content_with_weight

Embedding 对什么做

原始视觉内容

Text

正文段落

原文文本

文本

可能保存对应页面裁剪图,用于定位/引用

Table

表格 HTML + 表格裁剪图

HTML表格

去掉 <table><tr><td>… 标签后的文字

裁剪图单独存对象存储

Image/Figure

图片裁剪 + 图注/文字,VLM可增强

图注/描述文字

描述文字

原图/裁剪图单独存对象存储


5.RagFlow粗排和精排的切分逻辑

——————————————-常规逻辑——————————————-

粗排:BM2.5关键字和向量相似度结合筛选

精排:Rnaker的置信度,一般设置0.6这样

——————————————-RagFlow最终计算逻辑—————————————-

①Similarity threshold 一值两用

Similarity threshold 会被用于两个阶段: -Dense/Embedding 候选召回阶段:作为向量 cosine similarity 的检索门槛; -最终结果阶段:作为最终 Hybrid Similarity 的过滤门槛。 注意:前者只作用于 Dense 检索分支,不代表所有候选必须先满足 Embedding threshold;全文检索分支也能贡献候选。

②RAGFlow 在不开 reranker时:final_score=(1-w) × Full-text+w ×Embedding值

配置:向量用Similarity threshold筛选,粗排计算完了的final_score用Similarity threshold筛选

Vector 权重:w=0.7;

Full-text权重:1-w=0.3;

Similarity threshold:0.25

步骤(筛选了两次):

1.计算文本值和向量值,先单纯用Embedding Vector筛选一堆块,筛选值是Similarity threshold

2.对筛选出来的块计算最终分数:final_score=(1-w) ×Full-text+w ×Embedding值

3.最终值与Similarity threshold比较再筛选一波

③RAGFlow开启 reranker时:final_score=(1-w) ×Full-text+w × Reranker值

配置:向量用Similarity threshold筛选,计算完了的final_score用Similarity threshold筛选,

Vector :w=0.7;

Full-text:1-w=0.3;

Similarity threshold:0.25

步骤(筛选了两次):

1.计算文本值和向量值,先单纯用Embedding Vector筛选一堆块,筛选值是Similarity threshold

2.将筛选的N个块送入Rnaker模型,计算Rnaker值

3.对这M个块用文本值和Ranker值计算分数:final_score=(1-w) ×Full-text+w × Reranker值

4.最终值与Similarity threshold比较再筛选一波


6.Embedding模型和Ranker模型的部署方式(自己用的是Xinference,之前YOLO检测需要用一个VLM模型,部署了一个gguf的4B模型,用的是llama.cpp)

-如果是 HuggingFace/Transformers 格式,就优先用 vLLM(linux部署,在windows上需要WSL2) 或 Xinference/TEI (直接windows上部署,也支持通过走llama.cpp 后端部署 GGUF)暴露 embedding API;

-如果是 GGUF(.gguf格式) 才更像走 llama.cpp/Ollama。


哲学思考

“知识被切成碎片,信任却要靠完整的证据链。”

——当原始文档保留知识的出处,Chunk切分决定语义的边界,混合检索从关键词与向量中寻找线索,重排与上下文组装便承担起筛选证据的责任;权限限定谁能看见,版本说明何时有效,引用让每一次回答都能回到原文,拒答则为证据不足留下诚实的位置。企业知识库的成熟,体现在每一句结论都能被追溯、被质疑、被修正。把文件接入模型,只完成了信息的搬运;让检索、判断与验证彼此衔接,知识才获得反复参与决策的条件。可信的智能,始于对证据边界的认真维护。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 技术拆解(二十一):企业知识库怎么建?从RAG整条链路梳理到RAGFlOW的落地应用
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!