【源码分析】RAGFlow中偷偷调用的LLM和调优策略

csdn排版丢失,建议原文查看:【源码分析】RAGFlow中偷偷调用的LLM和调优策略

最近RAGFlow交流群里,有群友发现chunk过程中,调用了LLM chat,本文就来分析一下,RAGFlow在知识库建立过程中,为什么调用了LLM chat,调用的位置,以及默认调用的参数如何调整。

本文针对0.16.0 branch

一、RAGFlow中定义的大模型类型

ragflow默认支持以下几类模型:

 

  1. chat对话类模型:如Qwen2.5DeepSeek V3DeepSeek R1

  2. embedding向量化类模型:如nomicbge-m3

  3. speech2text语音转文字类转录模型:如whisper

  4. image2text图生文模型:如llavaJanus

  5. rerank重排模型:如bge-reranker-v2-m3等,注:目前不支持Ollama导入rerank,隔壁dify也不支持

  6. tts文本转语音模型:参考文章TTS模型汇总,强烈建议收藏,内推模型全部经过本人实测有效

# 在api\db\__init__.py中定义 
class LLMType(StrEnum):
    CHAT = 'chat'
    EMBEDDING = 'embedding'
    SPEECH2TEXT = 'speech2text'
    IMAGE2TEXT = 'image2text'
    RERANK = 'rerank'
    TTS    = 'tts'

下面主要针对RAGFlow源码在执行知识库构建任务过程中,偷偷用到的LLM chat模型的地方进行解析。

二、知识库构建源码分析及知识库构建调优建议

RAGFlow 知识库构建的核心代码在rag\svr\task_executor.py中,其核心内容是知识库构建task的处理,即do_handle_task(task)这个函数中的逻辑。

  1. 该函数首先进行知识库初始化操作,注意,这里目前不支持进行table解析Table parsing method is not supported by Infinity, please use other parsing methods or use Elasticsearch as the document engine.

  2. 其次针对不同的知识库构建方法,分别进行处理,主要分为5类任务(RAPTOR、GraphRAG、GraphResolution、GraphCommunity、一般embedding任务等),如下图所示:RAGFlow知识库构建的任务种类以及LLM使用类型

    1. RAPTOR任务源码分析及优化建议:

      RAPTOR的原理可以参考这篇文章长文本的高效处理:RAPTOR 检索技术及其在 RAG 中的应用

        RAGFlow中的RAPTOR运用LLM进行摘要summary的生成,具体代码块如下:

      1. rag\svr\task_executor.pydo_handle_task(task) 函数中,raptor任务分支中定义了chat model

      2. 随后在rag\raptor.py中,调用了chat模型,生成response,并且过滤掉了推理模型的think标签。

      3. 最终,在rag\raptor.py中,通过summarize调用chat model结果,注意这里的模型温度参数是固化的为0.3,有需要调整的,要在这里修改源码,然后重新启动ragserver的docker或者启动对应的nginx服务,以确保修改成功;或者选择用0.3 temp合理的llm chat模型作为系统模型,以达到更好的效果。

      4. RAPTOR任务源码分析及优化建议:

  1. GraphRAG任务源码分析及优化建议:

GraphRAG的原理可以参考这篇文章微软 GraphRAG :原理、本地部署与数据可视化揭秘——提升问答效率的图谱增强策略

  RAGFlow中的GraphRAG运用LLM,对抽取的实体关系图谱结果进行总结优化生成,具体代码块如下:

  1. rag\svr\task_executor.pydo_handle_task(task) 函数中,graphrag任务分支中定义了chat model

  1. 随后在rag\svr\task_executor.py中的run_graphrag函数中,调用了Graphrag算法,若用户配置的为general方法,则调用微软的GraphRAG模型,否则调用的是Light RAG模型。

  1. 最终,在graphrag\general\extractor.py中,通过_handle_entity_relation_summary调用chat model结果,注意这里的模型温度参数是固化的为0.8,有需要调整的,要在这里修改源码,然后重新启动ragserver的docker或者启动对应的nginx服务,以确保修改成功;或者选择用0.8 temp合理的llm chat模型作为系统模型,以达到更好的效果。

  1. GraphResolution任务源码分析及优化建议:

GraphResolution任务实现了基于图结构的实体解析(Entity Resolution)方法,主要功能是识别图中的实体是否表示相同的对象,并合并重复的实体。原理可以参考这篇文章论文阅读:Robust Entity Resolution using Random Graphs

  RAGFlow中的GraphResolution运用LLM,对实体解析结果进行总结优化生成,具体代码块如下:

  1. rag\svr\task_executor.pydo_handle_task(task) 函数中,graph_resolution任务分支中定义了chat model

  1. 随后在graphrag\entity_resolution.py中的实体解析类EntityResolution中,继承Extractor类,该类定义了父类方法_chat,用于定义大模型,同样只收集大模型生成的结果,而去除了<think>标签。

  1. 最终,在graphrag\entity_resolution.py中的实体解析类EntityResolution中,通过__call__,在实体解析完成后,调用chat model,优化生成实体解析结果,注意这里的模型温度参数是固化的为0.5,有需要调整的,要在这里修改源码,然后重新启动ragserver的docker或者启动对应的nginx服务,以确保修改成功;或者选择用0.5 temp合理的llm chat模型作为系统模型,以达到更好的效果。

  1. GraphCommunity任务源码分析及优化建议:

GraphCommunity任务实现了图社区发现方法,主要功能是一种用于识别图(网络)中社区结构的算法。社区结构是指图中的节点(顶点)可以自然地划分为若干个子群体(社区),使得每个社区内部的节点之间连接紧密,而不同社区之间的连接相对稀疏。图社区检测算法的目标是自动发现这些社区结构,从而揭示图中的内在组织形式和潜在模式。原理可以参考这篇文章图机器学习(网络中的社区检测

  RAGFlow中的GraphCommunity运用LLM,对图社区检测算法结果进行总结优化生成,具体代码块如下:

  1. rag\svr\task_executor.pydo_handle_task(task) 函数中,graph_community任务分支中定义了chat model

  1. 随后在graphrag\general\community_reports_extractor.py中的图社区检测类CommunityReportsExtractor中,继承Extractor类,该类定义了父类方法_chat,用于定义大模型,同样只收集大模型生成的结果,而去除了<think>标签。

  1. 最终,在graphrag\general\community_reports_extractor.py中的图社区检测类CommunityReportsExtractor中,通过__call__,在图社区检测算法完成后,调用chat model,优化生成图社区检测结果,注意这里的模型温度参数是固化的为0.3,有需要调整的,要在这里修改源码,然后重新启动ragserver的docker或者启动对应的nginx服务,以确保修改成功;或者选择用0.3 temp合理的llm chat模型作为系统模型,以达到更好的效果。

  1. 一般Embbeding任务源码分析及优化建议:

一般embedding过程采用Naive RAG基本过程(参考:最优化大模型效果之 RAG(一):Naive RAG),先进行chunk生成文本块,再将分块进行embedding处理。

  RAGFlow,在chunk配置的时候,可以配置自动关键词(Auto Keyword)、自动问题(Auto Question)。其取Top N,在界面可配置N值。

  当用户启用这两个值后,系统后台也是默认调用了LLM Chat具体原理如下:

  1. rag\svr\task_executor.pydo_handle_task(task) 函数中,else分支中使用了chunk构建方法

  1. rag\svr\task_executor.py中的build_chunks,看到自动关键词以及自动问题处理中,都调用了LLM Chat

    1. 其中自动关键词,通过在api\db\services\dialog_service.py中,调用函数keyword_extraction,进行关键词总结与排序,完全通过llm实现,具体prompt见下面的代码。注意这里的模型温度参数是固化的为0.2,有需要调整的,要在这里修改源码,然后重新启动ragserver的docker或者启动对应的nginx服务,以确保修改成功;或者选择用0.2 temp合理的llm chat模型作为系统模型,以达到更好的效果。

    1. 其中自动问题,通过在api\db\services\dialog_service.py中,调用函数question_proposal,进行关键词总结与排序,完全通过llm实现,具体prompt见下面的代码。注意这里的模型温度参数是固化的为0.2,有需要调整的,要在这里修改源码,然后重新启动ragserver的docker或者启动对应的nginx服务,以确保修改成功;或者选择用0.2 temp合理的llm chat模型作为系统模型,以达到更好的效果。

      三、总结

    本文详细分析了RAGFlow在知识库构建过程中调用LLM Chat模型的场景、位置及默认参数,并提供了优化建议。用户可以通过修改源码或选择合适的LLM模型来调整参数,以达到更好的效果。

    ### 关于RAGFlow BGE技术的信息 #### RAGFlow简介 RAGFlow是一款专注于深度文档理解的开源RAG引擎,具备强大的文档智能处理能力[^1]。该工具不仅能够自动识别并解析各种类型的文档结构,还能有效提升数据质量,实现从低质输入到质输出的转变。 #### BGE模型概述 针对不同的语言需求,RAGFlow集成了多个由BAAI开发的基础向量模型(BGE)。这些预训练的语言模型被设计用于支持多样的自然语言处理任务,并特别适用于英文中文环境下的文本分析工作: - **小型英语模型**: `BAAI/bge-small-en-v1.5`拥有384维特征空间,适合快速部署场景; - **推荐的小型中文模型**: `BAAI/bge-small-zh-v1.5`提供512维表示,专为高效能而化; - **基础版英语模型**: `BAAI/bge-base-en`具有768维表达力,在性能与精度之间取得良好平衡; - **大型改进版本英语模型**: `BAAI/bge-large-en-v1.5`则扩展到了1024维,旨在满足更高层次的任务要求[^3]。 #### 获取官方资源指南 为了帮助开发者更好地理解利用这一先进技术平台,建议访问项目官方网站获取最新的API说明技术白皮书;同时也可以通过GitHub页面下载源码仓库中的示例程序来实践学习。此外,社区论坛是一个交流经验的好地方,可以在这里找到更多实用技巧支持信息。 ```bash # 访问官方网址了解更多信息 https://github.com/RAGFlow/RAGFlow # 加入讨论组寻求帮助或分享见解 https://discuss.ragflow.ai/ ```
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值