RagFlow参数配置测试
前文写到RagFlow的环境搭建&推理测试,感兴趣的童鞋可以移步(RagFlow环境搭建&推理测试-CSDN博客)。RagFlow相对于其他Rag开源项目,比如说MaxKB,Dify项目部署较为复杂。很多读者私信说我写了那么多环境搭建与推理测试,都点到为止,浅尝辄止,仅仅整个流程走通,很多细节没有展示。那是为什么呢?好吧,那是因为现在还在公司任职,其他细节涉密,就没有写出来。这篇RagFlow是我自己做的业余项目,那就没有涉密的考究了。这篇我会较为详细的展示我对RagFlow的实操。OK,那我们开始吧。
如果文档格式简单、内容常规,追求快速解析,可考虑选择 “简易(naive)”
在RagFlow中,嵌入模型发挥着两个关键作用,一是把知识库中的文档数据转换为向量,二是在聊天场景下将用户输入的自然语言转换为向量。这些向量能够在向量空间中体现文本的语义特征,为后续的相似度对比提供依据。
当用户进行提问时,Ragflow会基于混合相似度计算来判断二者的相关性。筛选出与问题相似度高的内容后,RAGFlow会根据这些文档的内容,结合自身的语言生成能力,生成合适的回答输出给用户。
在知识库这里,主要是发挥其第一个作用。如果知识库是基于中文的,可以选择:BAAI/bge-large-zh-v1.5(注:在选择默认模型的时候选,RagFlow模型自带,也可以选择自己本地部署的embedding模型)。多语言的可以视情况而定。
(3)目前支持以下这几种解析方法:General、Q&A、Resume、Manual、Table、Paper、Book、Laws。
根据文本的排版、格式、语义关联等因素来确定分割点,结合块Token数来将文本切换为适合大小的文本块。
主要是问答对数据,此块方法支持 excel 和 csv/txt 文件格式。
a、如果文件是 excel 格式,则应由两个列组成 没有标题:一个提出问题,另一个用于答案, 答案列之前的问题列。多张只要列正确结构,就可以接受。
b、如果文件是 csv/txt 格式 以 UTF-8 编码且用 TAB 作分开问题和答案的定界符。
简历有多种格式,就像一个人的个性一样,但我们经常必须将它们组织成结构化数据,以便于搜索。
我们不是将简历分块,而是将简历解析为结构化数据。 作为HR,你可以扔掉所有的简历, 您只需与'RAGFlow'交谈即可列出所有符合资格的候选人。
章节将文档分割为大小不等的文本块,这个比较考验文档格式,如果每个章节内容联系紧密、最好主题比较单一、且各章节长度比较均匀,可以考虑使用这种方法,比较大的章节会消耗过多的token,也不利于精准回答。
即表格,如果文档内容能被整理表格这种更接近结构化的格式,可以考虑使用这种解析方法,这种行列的关系,通常能比较准确地体现数据之间的关系,有利于内容的解析及后续提升问答准确度。
仅支持PDF文件。如果我们的模型运行良好,论文将按其部分进行切片,例如摘要、1.1、1.2等。
这样做的好处是LLM可以更好的概括论文中相关章节的内容, 产生更全面的答案,帮助读者更好地理解论文。 缺点是它增加了 LLM 对话的背景并增加了计算成本, 所以在对话过程中,你可以考虑减少‘topN’的设置
由于一本书很长,并不是所有部分都有用,如果是 PDF, 请为每本书设置页面范围,以消除负面影响并节省分析计算时间。
支持的文件格式为DOCX、PDF、TXT。法律文件有非常严格的书写格式。 我们使用文本特征来检测分割点。chunk的粒度与'ARTICLE'一致,所有上层文本都会包含在chunk中。
当解析方法选择General时需要设置此参数的值。一般建议大小在128至512之间,实际的值需要经过多次测试,大模型回答问题既不会截断、也不会有太多相关性不强的内容时比较合适。
选择General解析方法时,会基于分段标识符进行文本分割,再根据块token大小对分割的文本进一步分块。
当检索对象为多个知识库、且需要指定优先检索的知识库时,可以使用此参数,计算相似度得分后分加上此指标的值,这会提高这个知识库内容的相似度得分。
在解析文档时,根据算法识别出出现频率较高且对语义贡献大的词汇作为关键词,这些关键词能提升在知识库中检索相关内容的效率。
类似于自动关键词,在解析文档时生成相关问题,能为问答系统提供更多预设问题及答案对,提升系统回答问题的全面性和准确性。
与 General 切片方法配合使用。未开启状态下,表格文件(XLSX、XLS(Excel97~2003))会按行解析为键值对。开启后,表格文件会被解析为HTML 表格。若原始表格超过 12行,系统会自动按每 12 行拆分为多个HTML 表格。
现在的大多数检索增强语言模型,仅从检索语料库中检索短的连续文本块,这限制了对文档上下文的全面理解。为了解决这个问题,引入这种方法,反复对文本块进行嵌入(放到特定表示空间)、聚类(把相似文本块放一起 )和总结,自下而上构建一棵有不同层次的树。在推理时, RAPTOR 模型从这棵树中检索,整合不同抽象层次的长文档信息。以提高回答的准确率。
含义:Token 是模型处理文本时的基本单元,比如把一句话拆分成一个个小的词块等 。最大 token 数就是模型一次能处理文本量的上限。
设置建议:如果处理简短文本(如一句话、短新闻摘要 ),可以设置小一些,比如 128 。处理长文档(如长篇论文、书籍章节 ),可适当调高,如 512 甚至更高,但也不是越高越好,过高会占用大量计算资源,还可能影响处理速度。
含义:一般用于判断某种相似性、匹配度等指标的临界值。比如在聚类中,用来判断文本块是否相似到能归为一类 。
设置建议:通常在 0 - 1 之间。如果希望聚类更精细,让类别内文本相似度高,可设置小一些,如 0.05 - 0.1 ;若想类别宽泛些,包含更多有一定差异的文本,可设置大些,如 0.3 - 0.5 。也可根据多次实验效果来调整。
设置建议:如果文本主题比较单一,类别少,可设置小一点,如 10 - 20 ;文本主题丰富多样,可适当增大,如 50 - 100 。还可以参考文本中明显的主题数量预估,比如文档涉及 5 个明显主题,可从略大于 5 的数值开始尝试。
含义:是一个初始值,用于确定随机数生成的起始状态。当算法有随机成分时,相同随机种子能保证每次运行结果一致,不同种子则结果不同。
设置建议:如果希望每次运行结果稳定可重复(比如调试、对比实验 ),设置一个固定整数,如 0、1 。如果追求每次不同随机效果(如探索不同可能性 ),可以不固定,每次设置不同整数。
创建知识库时,开启“提取知识图谱”,并添加实体后,解析文件时会由 ragflow 提取知识图谱。
对文档中的实体进行归类,用于构建知识图谱各个节点之间的关系。
如我要整理的是一份设备故障代码知识库,那么实体类型可能包含:一级分类、子分类、设备、子设备、配件、故障现象、故障原因、解决方法等。
如我要整理的是一份系统操作问答知识库,那么实体类型可能包含:模块、菜单、子菜单、页面、功能、操作步骤等。
若注重成本和提取速度,Light较合适;若追求知识图谱高质量,愿承担更高成本,General更优 。
把具有相同含义的实体合并,比如文本中 “电脑”“计算机”“PC” 等不同表述,经实体归一化后都统一为 “计算机” 这一标准形式。建议开启此选项。
GraphRAG 旨在通过两个主要步骤来解决这些问题:索引和查询。索引引擎首先将一组文本文档分解为段落,然后将这些段落聚类为具有实体和关系的分层社区,这些实体和关系通过更高层次的抽象将每个段落连接起来。然后,我们使用 LLM 生成每个社区的摘要,称为社区报告。在查询步骤中,GraphRAG 利用这种结构化知识为大语言模型提供额外的上下文,以帮助回答问题。这个选项,应该是当选择“General”方法时,需要开启,因为他是属于 GraphRAG 提出的概念,和 Light 方法似乎没多大关系。
开启此选项后,会运用大语言模型(LLM )分析用户提问,提取出在相关性计算中需重点关注的关键词。
开启关键词分析会增加计算量,使 LLM 多一步关键词提取和分析操作,从 LLM 接收答复时间会增加,模型响应速度变慢。
能更精准地从知识库中筛选出与用户问题相关的内容。比如用户提问 “如何提高玫瑰的开花质量” ,开启关键词分析后,系统能准确提取 “玫瑰”“开花质量” 等关键词,快速定位知识库中关于玫瑰种植养护、提升开花质量的相关知识片段,提升回答准确性和相关性 。
对用户输入问题进行深度语义理解,避免因表述差异导致的检索偏差。像用户问 “电脑运行慢咋整” ,系统能识别出 “电脑”“运行慢” 等关键语义,即便知识库中表述是 “计算机性能降低的解决方法” ,也能有效匹配,提升检索召回率和准确率 。
Ragflow 使用混合相似度得分来评估两行文本之间的距离,以生成回复内容。
影响计算结果的两个因子,其一是加权关键字相似度,另一个是矢量余弦相似性得分或 Rerank 得分(当选择 Rerank 模型后以 Rerank 得分计算)。
混合相似度得分 = 关键字相似度得分 * 关键字相似度权重 + 矢量余弦相似性得分 * (1 - 关键字相似度权重),或者混合相似度得分 = 关键字相似度得分 * 关键字相似度权重 + Rerank 得分 * (1 - 关键字相似度权重)
其中,关键字相似度权重与余弦相似度权重(或 Rerank 得分权重)的和为 1。
如果查询和块之间的相似度小于此阈值,则该块将被过滤掉。越高的阈值,筛选出的文本块越少。具体的阈值,可以到知识库中的“检索测试”中进行测试,根据测试选择一个合适的阈值。使回复结果中能包含期望的答案,又不会有太多不必要的信息。
相对于前一个概念,“相似度阈值及关键字相似度权重”中的相似度阈值。设置 Top N 后,当高于相似度阈值的文本块数量大于 N 时,将只会过滤出前 N 条。可结合测试情况设置。
在多轮对话的中,对去知识库查询的问题进行优化。会调用大模型额外消耗 token。可视情况决定是否开启。
知识库中开启“提取知识图谱”后,这里可以选择是否开启。良好的知识图谱有利于提高回答的准确性,建议开启。
开启此选项后,会触发像 Deepseek R1 一样的推理过程。作为知识库问答,可以不开启此选项。
选择 Rerank 模型可能有助于提高回答准确性,但会消耗额外的算力。建议选择服务商提供的模型,如通义的 gte-rerank,不要选择本地模型,如 BAAI/bge-reranker-v2-m3,会导致回答速度变慢,特别是知识库中文档比较多的时候。
控制生成文本的随机性和创造性。数值越高,模型输出越随机、有创意。对于知识库问答,一般需要严谨一点,保持默认值即可。
在大模型生成文本时,对于下一个要输出的单词,模型会为词汇表中的每个单词计算一个概率。Top P(核心采样)做的是,从概率最高的单词开始,依次累加这些单词的概率,当累加概率达到设定的阈值(即 Top P 的值 )时,就把这些单词构成一个集合。然后,模型只从这个集合里随机选择下一个要输出的单词 。通过这种方式,它摒弃了那些概率极低的单词,聚焦在更有可能出现的单词上,能在一定程度上平衡生成文本的多样性和合理性 。
假设模型的词汇表中有 10 个单词,分别是 A、B、C、D、E、F、G、H、I、J ,模型计算出它们生成下一个单词的概率依次为:
A:0.3 B:0.2 C:0.15 D:0.1 E:0.08 F:0.05 G:0.04 H:0.03 I:0.02 J:0.01
如果 Top P 的值设为 0.8 ,从概率最高的单词 A 开始累加概率:
选 A 时,累加概率为 0.3 ;再选 B ,累加概率变为 0.3 + 0.2 = 0.5 ;选 C 后,累加概率是 0.5 + 0.15 = 0.65 ;选 D 后,累加概率为 0.65 + 0.1 = 0.75 ;选 E 后,累加概率达到 0.75 + 0.08 = 0.83 ,此时已经超过了阈值 0.8 。那么就得到一个由 A、B、C、D、E 这 5 个单词组成的集合,模型只会从这 5 个单词里随机选择一个作为下一个输出的单词,而不会考虑 F、G、H、I、J 这些单词 。这样,通过 Top P 的设置,就缩小了单词的选择范围,聚焦在更可能出现的单词上,让生成过程更合理 。设置较低的阈值时,模型优先从常用且相关度高的词中选择,保证回答在专业领域的准确性。暂时建议保持默认值 0.3 不修改,后续可以根据回答质量决定是否调整此参数。
对对话中已经出现过的单词进行惩罚,降低其再次出现的概率,防止模型重复表述,让回答更丰富多样。
一般可设为 0.2 - 0.5 。若回答重复性严重,可适当调高,如 0.4 ;若文本较短且不希望过度抑制词汇出现,可适当调低。
与存在处罚类似,抑制模型输出相同内容,但它是根据单词出现频率惩罚,出现频率越高,惩罚力度越大 。
通常设为0.5 - 1.0。如果希望更严格控制高频词重复,可设为0.7 - 1.0,如 0.7 ;若文本较简短或希望一定程度保留高频核心词,可设为0.5 - 0.7。
限制模型生成回复的最大长度,token 是模型处理文本时的基本单元 。
一般简单问答可设为 128 - 256 ;复杂解释、长文本生成场景可设为 512 或更高,但注意不要超过模型支持的最大上下文长度,否则可能截断回答或报错