免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

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

技术拆解(二十一):企业知识库怎么建?从RAG整条链路梳理到RAGFlOW的落地应用 目录一、 底座选型知识存储与索引层二关键点三RAGFLOW哲学思考一、 底座选型知识存储与索引层1.原始文档存储保存PDFWordExcelPPT图片网页邮件制度文件业务文档原因很简单向量数据库存的不是原始知识本身而是知识的索引。最终 Show Quote、查看原文、权限校验都需要找到原文件。2.全文索引用于BM25比较典型Elasticsearch/OpenSearch属于关键词检索例如西安市住房公积金提取管理办法第十五条是什么这里“十五条”“公积金”这些精确词BM25 往往比纯向量更靠谱。3.向量数据库保存Chunk经过Embedding Model处理后的Vector选型可以考虑方案特点Elasticsearch / OpenSearchBM25 Vector 一体化企业 RAG 很实用Milvus专业向量数据库大规模场景强Qdrant简洁、性能不错pgvector已经有 PostgreSQL 的企业非常方便FAISS更偏算法库不太适合作为完整企业数据库如果你现在用 RAGFlow其实 ES/OpenSearch 这种 Hybrid Search 架构就比较自然。4.知识图谱当前没加主要作用是非关系性数据二关键点权限、文档版本管理、Context BuilderRanker后的块去重、合并等处理工作、Ranker置信度、引用Citation、评测体系 这六个东西是上线标准1.知识库和OA系统考虑增量同步2.文档解析文本 / 图片 / 表格必须分开处理①文本②图片③表格3.Chunk 切分结构优先Token 长度限制Chunk Metadata 至少保存document_idfile_namepagechaptersectionchunk_idversiondepartmentpermissioncreated_atupdated_at4.权限管理【重要】5.Query 输入处理①多轮上下文问题补全②问题重写/扩写③意图识别├─普通聊天├─知识库问答├─数据查询当前没加Text2Sql├─知识图谱查询当前没加└─无法识别④查询分解当前没加6.Prompt 层内容包括四部分System PromptRAG ContextConversation历史对话User Query主要针对System Prompt的规定① Empty Response查不到就说不知道② 强制 Citation输出的内容必须根据检索到的知识回答必须带引用文件及块内容③ 知识冲突处理都展示出来分别给出引用让用户判断7.Prompt Injection 防护检索到的内容只作为数据不能覆盖 System Prompt作为指令。8.评测系统收集100条文本对测试指标RecallK等三RAGFLOW当前就用了粗排加了Ranker效果还不好速度还比较慢1.组件和角色组件主要存什么在 RAG 里的角色Elasticsearch / OpenSearchChunk 文本、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文字 Vector3.组件架构图RAGFlow 存储层┌──────────────────MySQL──────────────────┐│ 系统元数据 / 用户 / 知识库 / 文档配置│ 文档状态 / 模型配置├─────────────────MinIO────────────────────┤│ PDF / Word / Excel / PPT / 图片原始文件├─────────────────Elasticsearch / OpenSearch──────┤│ Chunk文本 ──────→ BM25倒排索引│ Embedding Vector ─→ Vector Index├───────────────────Redis───────────────────┤│ 消息队列 / 文档解析任务 / Task Executor└──────────────────────────────────────────┘4.切块逻辑图和表格怎么处理保存的使用的DeepDOC PDF解析策略类型DeepDOC之后得到什么检索内容content_with_weightEmbedding 对什么做原始视觉内容Text正文段落原文文本文本可能保存对应页面裁剪图用于定位/引用Table表格 HTML 表格裁剪图HTML表格去掉tabletrtd...标签后的文字裁剪图单独存对象存储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-textw ×Embedding值配置向量用Similarity threshold筛选粗排计算完了的final_score用Similarity threshold筛选Vector 权重w0.7Full-text权重1-w0.3Similarity threshold0.25步骤筛选了两次1.计算文本值和向量值先单纯用Embedding Vector筛选一堆块筛选值是Similarity threshold2.对筛选出来的块计算最终分数final_score(1-w) ×Full-textw ×Embedding值3.最终值与Similarity threshold比较再筛选一波③RAGFlow开启 reranker时final_score(1-w) ×Full-textw × Reranker值配置向量用Similarity threshold筛选计算完了的final_score用Similarity threshold筛选Vector w0.7Full-text1-w0.3Similarity threshold0.25步骤筛选了两次1.计算文本值和向量值先单纯用Embedding Vector筛选一堆块筛选值是Similarity threshold2.将筛选的N个块送入Rnaker模型计算Rnaker值3.对这M个块用文本值和Ranker值计算分数final_score(1-w) ×Full-textw × Reranker值4.最终值与Similarity threshold比较再筛选一波6.Embedding模型和Ranker模型的部署方式(自己用的是Xinference之前YOLO检测需要用一个VLM模型部署了一个gguf的4B模型用的是llama.cpp)-如果是 HuggingFace/Transformers 格式就优先用 vLLMlinux部署在windows上需要WSL2 或 Xinference/TEI 直接windows上部署也支持通过走llama.cpp后端部署 GGUF暴露 embedding API-如果是 GGUF.gguf格式 才更像走 llama.cpp/Ollama。哲学思考“知识被切成碎片信任却要靠完整的证据链。”——当原始文档保留知识的出处Chunk切分决定语义的边界混合检索从关键词与向量中寻找线索重排与上下文组装便承担起筛选证据的责任权限限定谁能看见版本说明何时有效引用让每一次回答都能回到原文拒答则为证据不足留下诚实的位置。企业知识库的成熟体现在每一句结论都能被追溯、被质疑、被修正。把文件接入模型只完成了信息的搬运让检索、判断与验证彼此衔接知识才获得反复参与决策的条件。可信的智能始于对证据边界的认真维护。结尾语如果本文对您有帮助请点赞鼓励一下这对我真的很重要。您的每一次鼓励都是我继续创作的动力谢谢啦下次见。
返回列表