这段文字介绍的是 RAGFlow 的“标签集(Tag Sets)”功能。
简单来说,这是一个结构化筛选机制。它允许你给上传的文件打上特定的“标签”,然后在检索时,强制系统只在带有特定标签的文件范围内进行搜索,而不是大海捞针。
这相当于给你的知识库加上了类似电商网站的“筛选器”(比如只看“品牌:Apple”且“价格:5000以上”的商品)。
1. 功能核心逻辑与实例说明
核心逻辑
- 传统 RAG:用户问“预算是多少?”,系统在所有文件中搜索,可能搜出 IT 部门的预算、食堂的预算、两年前的预算,结果很乱。
- 带 Tag 的 RAG:系统预先定义维度(如“部门”、“年份”)。检索时,限定
部门=IT且年份=2024,系统只在符合条件的文件里找“预算”。
场景实例:跨国公司的合同管理
假设你有一个庞大的知识库,存放了公司 10 年来所有的合同文档。
1. 标签定义(设置阶段):
管理员在 RAGFlow 后台定义两组标签:
- Tag Key 1:
地区(Values: 中国区, 北美区, 欧洲区) - Tag Key 2:
合同类型(Values: 采购, 销售, 租赁)
2. 文件打标(上传阶段):
- 上传《2024年北京办公室租赁协议.pdf》 -> 打标:
地区=中国区,合同类型=租赁 - 上传《2023年纽约服务器采购单.pdf》 -> 打标:
地区=北美区,合同类型=采购
3. 用户提问(使用阶段):
场景 A(无标签):用户问“所有的租赁违约金比例是多少?”
- 结果:RAGFlow 会把北京的、纽约的、甚至 10 年前的租赁合同混在一起回答,LLM 可能会产生幻觉或给出错误的数据拼接。
场景 B(使用 Tag Sets):用户(或 Agent)在聊天设置中勾选标签
地区=中国区。- 结果:RAGFlow物理屏蔽掉所有非中国区的文件。
- LLM 回答:“根据中国区的租赁协议,违约金比例通常为年租金的 20%。”(非常精准,绝不会混入北美的数据)。
2. 功能实现链条 (Implementation Chain)
这个功能的实现链条比 TOC 简单,因为它主要涉及元数据管理(Metadata Management)和数据库过滤(DB Filtering)。
第一阶段:标签定义与绑定 (Configuration & Binding)
Schema 定义:
- 动作:管理员在系统层面定义 Tag Key(标签名)和对应的可选 Values。
- 数据结构:类似于
{"Department": ["HR", "IT", "Sales"]}。
文件入库与打标 (File Upload & Tagging):
- 动作:上传文件时,前端 UI 弹窗让用户选择标签。
- 绑定:系统将文件 ID 与选定的标签进行关联。
- 继承:这个标签属性会被该文件切分出来的每一个 Chunk(切片)所继承。
向量存储 (Storage):
动作:存入向量数据库(Elasticsearch/Infinity/Milvus)。
关键点:存进去的数据不仅包含向量(Vector),还包含元数据字段(Metadata Fields)。
数据形态:
{"content":"租赁违约金为20%...","vector":[0.12,0.55,...],"tags":{<--关键字段"地区":"中国区","合同类型":"租赁"}}
第二阶段:带过滤的检索 (Filtered Retrieval)
用户查询构造 (Query Construction):
- 输入:用户提问“违约金多少?” +前端勾选/API指定
Filter: {"地区": "中国区"}。
- 输入:用户提问“违约金多少?” +前端勾选/API指定
预过滤 (Pre-filtering) ——性能与精度的关键:
- 动作:在进行向量相似度计算之前,向量数据库先执行过滤操作。
- 逻辑:
SELECT * FROM chunks WHERE tags.地区 == '中国区'。 - 效果:假如库里有 100 万个切片,只有 1 万个属于中国区,那么系统通过标签瞬间排除了 99% 的干扰项。
向量搜索 (Vector Search):
- 动作:仅在那剩下的 1 万个切片中,寻找与“违约金多少”语义最相似的切片。
生成回答:
- 动作:LLM 拿到精准的切片,生成答案。
总结:Tag Sets 与 TOC 的区别
为了让你更清楚,我把刚才解释的 TOC 和现在的 Tag Sets 做个对比:
| 功能 | TOC (提取目录) | Tag Sets (标签集) |
|---|---|---|
| 作用对象 | 文档内部的结构 | 文档之间的分类 |
| 解决痛点 | 解决“断章取义”,补充上下文 | 解决“大海捞针”,排除无关干扰 |
| 实现方式 | 它是内容的补充(把目录文字塞进 Chunk) | 它是硬过滤器(利用数据库字段做 Filter) |
| 形象比喻 | 读书时,看某一页的同时,旁边放着目录大纲。 | 进图书馆时,只走进“历史类”书架,不看“科幻类”。 |
Tag Sets 的价值在于:当你的知识库非常庞大且混杂时,它是保证回答准确性(避免张冠李戴)的最有效、成本最低的手段。
RAPTOR
这段文字介绍的是RAPTOR (Recursive Abstractive Processing for Tree-Organized Retrieval)功能。
简单来说,RAPTOR 是一种**“递归摘要”技术。它的目的是让 RAG 系统不仅能回答细节问题,还能回答宏观的、需要综合全篇内容**的问题。
如果把普通 RAG 比作“用放大镜找细节”,那么 RAPTOR 就是“先用无人机拍全景,再用放大镜找细节”。
1. 核心功能与实例说明
痛点:普通 RAG 的局限性
普通 RAG 是把文档切成小块(Chunk)。
- 如果你问:“合同里第3条罚款是多少?”(细节题),普通 RAG 很强。
- 如果你问:“这份合同主要讲了哪些风险?”(宏观概括题),普通 RAG 就傻眼了。因为它检索到的都是零散的碎片,缺乏一个“概括性”的切片来回答这个问题。
RAPTOR 的解决方案
RAPTOR 会在后台自动把这些碎片聚类,然后让 LLM 写摘要,形成一个“树状结构”。
场景实例:一家科技公司的《年度战略规划报告》
这份报告有 100 页,内容很杂,涉及财务、技术研发、市场营销等。
1. 构建 RAPTOR 树(索引阶段):
底层(Level 0 - 原始切片):
- 切片 A:“Q1 投入研发资金 500 万…”
- 切片 B:“Q2 招聘 AI 算法工程师 10 人…”
- 切片 C:“下半年将在华南地区开设 5 家分店…”
- 切片 D:“建议预留 20% 预算应对原材料涨价…”
中层(Level 1 - 聚类摘要):
- 系统发现 A 和 B 都在讲技术,于是把它们聚在一起,让 LLM 写个摘要:
- 摘要节点 1:“上半年重点在于加大 AI 研发投入,包括资金与人才。”
- 系统发现 C 和 D 都在讲运营和风控,聚在一起写个摘要:
- 摘要节点 2:“下半年侧重市场扩张及供应链风险控制。”
顶层(Level 2 - 全局摘要):
- 系统把“摘要节点 1”和“摘要节点 2”再聚在一起,写出最终摘要:
- 根节点:“本年度战略核心是‘技术为先,稳步扩张’,在确保研发领先的同时控制供应链风险。”
2. 用户提问(检索阶段):
- 用户问:“公司今年的核心战略思想是什么?”
- 普通 RAG:可能会检索到“招聘 10 人”这种细节,回答得很片面。
- RAPTOR RAG:用户的提问与顶层(根节点)的向量最匹配。
- 回答:“核心战略是‘技术为先,稳步扩张’…”
2. 功能实现链条 (Implementation Chain)
RAPTOR 的实现比 TOC 更复杂,它涉及到大量的数学计算(聚类)和 LLM 生成。
第一阶段:构建递归树 (Indexing & Tree Construction)
切片与向量化 (Chunking & Embedding):
- 将文档切分成基础切片(Leaf Nodes),并计算向量。
聚类 (Clustering):
- 算法:使用如高斯混合模型(GMM)或 UMAP 等算法。
- 动作:系统计算切片之间的语义距离,把讲相似话题的切片归为一堆(Cluster)。即使这些切片在文档里相隔很远(比如第 1 页和第 50 页都提到了“成本”),也会被聚在一起。
摘要生成 (Summarization):
- 动作:把这一个 Cluster 里的所有文本喂给 LLM。
- Prompt:“请总结这些片段的共同主题和要点。”
- 产出:生成一个新的文本块(Summary Node)。
递归循环 (Recursion):
- 系统判断生成的摘要数量是否还很多?如果是,就对这些**“摘要”**再次进行聚类和再摘要。
- 以此类推,直到生成一个或几个最终的根节点。
混合存储:
- 将原始切片、第一层摘要、第二层摘要…全部存入向量数据库。
第二阶段:多粒度检索 (Tree-Traversed Retrieval)
查询向量化:用户的问题被转化为向量。
全层级匹配 (Collapsed Search):
- RAGFlow 会在所有层级(原始细节 + 中层摘要 + 高层概括)中同时进行搜索。
命中策略:
- 如果问细节(“招多少人?”),向量会命中底层切片。
- 如果问概括(“战略是什么?”),向量会命中高层摘要节点。
生成回答:LLM 基于命中的节点生成答案。
3. RAPTOR vs TOC (目录增强) 的区别
这两个功能都在解决长文档理解问题,但思路不同:
| 特性 | TOC (提取目录) | RAPTOR (递归摘要) |
|---|---|---|
| 依赖基础 | 依赖文档物理结构(章节标题、排版) | 依赖内容语义相似度(话题聚类) |
| 生成内容 | 不创造新内容,只是把目录贴进切片 | 创造新内容(LLM 写出了原文档没有的总结段落) |
| 适用场景 | 规章制度、操作手册 (结构严谨) | 研报、论文、散乱的会议记录 (需要提炼观点) |
| 跨度能力 | 只能联系上下文附近的切片 | 能联系第1页和第100页的相似观点 |
总结:
RAPTOR 是 RAGFlow 中最高级的理解功能之一。它让机器像人类专家一样,先读厚(展开细节),再读薄(提炼总结),从而能够回答“What is this about? (这是关于什么的)”这种宏观问题。
Construct knowledge graph
这段文字介绍的是 RAGFlow 的知识图谱(Knowledge Graph / GraphRAG)构建功能。
简单来说,这是 RAG 技术的一个进阶形态。普通的 RAG 是基于“相似度”找内容,而知识图谱是基于**“关联性”找内容。它将文档中的实体(人、地、事、物)** 提取出来,并建立关系网络。
如果把普通 RAG 比作在图书馆里按关键词搜索书名,那么知识图谱就是侦探墙上的红线图,把看似无关的线索串联起来。
1. 核心功能与实例说明
痛点:普通 RAG 的“推理盲区”
普通 RAG 擅长回答直接的问题,但很难处理**“多跳推理(Multi-hop Reasoning)”**。
场景实例:供应链风险分析
假设你的知识库里有三份互不相关的文档:
- 文档 A(产品设计):“我们的最新手机型号Phone-X使用了Z-100 芯片。”
- 文档 B(采购清单):“Z-100 芯片由Alpha 科技公司独家供应。”
- 文档 C (财经新闻):“Alpha 科技公司所在的地区刚刚发生了严重的地震,工厂停摆。”
用户的提问:“地震会影响我们的手机出货吗?”
1. 普通 RAG(无图谱):
检索过程:用户问的是“地震”和“手机”。
结果:
- 系统搜“地震”,找到了文档 C。
- 系统搜“手机”,找到了文档 A。
- 但是,系统看不出文档 A 和文档 C 之间有任何联系(因为它们没有共同的关键词)。
LLM 回答:“根据文档,Alpha 公司发生了地震。但我不知道这跟我们的手机有什么关系。”
2. 开启知识图谱的 RAGFlow:
索引阶段:系统已经抽取出了实体和关系:
(Phone-X) --[使用]--> (Z-100 芯片)(Z-100 芯片) --[供应商]--> (Alpha 科技)(Alpha 科技) --[状态]--> (受地震影响)
检索过程:
- 系统找到起点实体“地震”和终点实体“手机”。
- 系统在图谱中沿着“路径”行走:手机 -> 芯片 -> 供应商 -> 地震。
LLM 回答:“会有严重影响。因为我们的 Phone-X 使用 Z-100 芯片,而该芯片的独家供应商 Alpha 科技正受到地震影响,可能导致断供。”
价值点:发现了“隐性”的逻辑链条,实现了像人类一样的逻辑推理。
2. 功能实现链条 (Implementation Chain)
构建知识图谱的过程比普通索引要慢,因为它需要 LLM 进行深度的语义分析。
第一阶段:图谱构建 (Graph Construction / Indexing)
实体与关系提取 (Extraction):
输入:原始文档切片。
动作:系统调用 LLM,Prompt 是这样的:“请阅读这段文字,提取出所有的实体(人物、公司、产品、地点)以及它们之间的关系,输出为三元组格式。”
产出:三元组列表,例如:
("Phone-X", "contains", "Z-100 Chip")("Alpha Tech", "located_in", "Region A")
实体对齐与融合 (Resolution):
- 痛点:文档里有的写“Alpha Tech”,有的写“Alpha科技公司”。
- 动作:算法会将这些指代同一事物的名词合并为一个节点 ID,避免图谱分裂。
社区发现 (Community Detection) ——GraphRAG 的高级特性:
- 动作:算法(如 Leiden 算法)会分析图谱,找出联系紧密的“小圈子”。比如把所有关于“芯片制造”的实体聚成一个社区。
- 生成摘要:LLM 为这个社区写一段总结。这有助于回答宏观问题(比如“整个芯片供应链状况如何?”)。
存储 (Storage):
- 将节点(Nodes)、边(Edges)和社区摘要存入图数据库(或支持图结构的存储引擎)。
第二阶段:图检索 (Graph Retrieval)
关键词提取与实体映射:
- 输入:用户问“地震影响手机吗?”
- 动作:提取关键词“地震”、“手机”,并在图数据库中找到对应的节点。
子图遍历 (Subgraph Traversal):
- 动作:从“手机”节点出发,向外走 1步、2步(K-hop),看看能不能走到“地震”相关的节点。
- 获取路径:找到了路径
Phone-X -> Z-100 -> Alpha Tech -> Earthquake。
上下文注入:
- 系统不仅把文档原文拿出来,还把这条路径上的关系描述转换成自然语言,作为上下文喂给 LLM。
生成回答:
- LLM 根据关系路径生成具有逻辑性的答案。
3. 三种高级功能的横向对比
到现在为止,你已经了解了 RAGFlow 的三个大招,我们来总结一下它们的区别:
| 功能 | 核心机制 | 形象比喻 | 最强适用场景 |
|---|---|---|---|
| TOC (目录增强) | 结构化 | 地图(不仅看内容,还看你在书的第几章) | 规章制度、操作手册、长篇法律文书。 |
| RAPTOR (递归摘要) | 分层概括 | 金字塔(先看塔尖的总结,再看塔底的细节) | 研报分析、论文综述、回答“这篇文章讲了什么”。 |
| Knowledge Graph (知识图谱) | 网状关联 | 侦探连线板(A认识B,B认识C,所以A可能认识C) | 刑侦调查、供应链分析、复杂金融股权穿透。 |
构建知识图谱是目前 RAG 领域最前沿、最强大的功能之一,它让 AI 从单纯的“复读机”变成了具备初步逻辑能力的“分析师”。