RAGFlow爬虫组件使用及ragflow vs dify 组件设计对比

news/2025/3/29 3:10:52/

上周末,两台电脑都失联了,一个是断网了,一个被我不小心关机。导致我两天没环境。只能整理,学点东西。

上周有个有个群友问我ragflow爬虫的没法使用的问题。幸好周六早上的时候实践了下。

使用网络爬虫

我搭建一个最简单的工作流。

我点击执行完以后报无法解析,前端报:

我又看了下后端日志报。说需要安装chrome依赖。

An unexpected error occurred: BrowserType.launch: Executable doesn't exist at /root/.cache/ms-playwright/chromium-1134/chrome-linux/chrome
╔════════════════════════════════════════════════════════════╗
║ Looks like Playwright was just installed or updated.       ║
║ Please run the following command to download new browsers: ║
║                                                            ║
║     playwright install                                     ║
║                                                            ║
║ <3 Playwright Team                                         ║
╚════════════════════════════════════════════════════════════╝

我把问题抛给了deepseek,然后它告诉我的方法。


重新构建可以,但是大家基本上都没有环境,直接进入docker操作吧。


# 进入ragflow服务的docker容器
docker exec -it ragflow-server /bin/bash#安装依赖
apt-get update && \ apt-get install -y \ libnss3 \ libnspr4 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libcups2 \ libdrm2 \ libxkbcommon0 \ libxcomposite1 \ libxdamage1 \ libxfixes3 \ libxrandr2 \ libgbm1 \ libasound2# pip国内镜像源设置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple# 安装 Playwright 并自动下载浏览器
pip install playwright && playwright install --with-deps chromium# 设置双重镜像加速
export PLAYWRIGHT_DOWNLOAD_HOST="https://npmmirror.com/mirrors/playwright/"
export PLAYWRIGHT_CDN_MIRROR="https://npmmirror.com/mirrors/playwright/"

如果没法执行,建议参考。ragflow想说爱你不容易,win10环境搭建、常用修改 中添加国内pip镜像源。

在安装的时候,可能会出现502,是因为官方的源不稳定,替换为清华的即可

# 1. 备份原始源
cp /etc/apt/sources.list /etc/apt/sources.list.bak# 2. 替换为清华源(Ubuntu 22.04)
sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list# 3. 清理缓存并更新
apt-get clean
rm -rf /var/lib/apt/lists/*
apt-get update -o Acquire::CompressionTypes::Order::=gz# 4. 重新安装字体依赖(使用清华源)
apt-get install -y --fix-missing \fonts-noto-color-emoji \fonts-wqy-zenhei \fonts-freefont-ttf \libfreetype6

还有一种情况,安装过程没有明显报错,但是不解析,查看运行结果。

执行成功以后。又用下面的连接进行了尝试,ok。

https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/data_preparation.html

节点设置

网页爬虫的节点设置里,提取类型,可以是markdownhtml文本三种,我们选择markdown即可。


提取完以后,我们可以直接返回对话,也可以使用大模型把进行适当的整理。

需要注意的是:

  • 网页爬虫组件一次只能爬取一个网页,所以要给一个url
  • 不要给爬虫传递上一个节点的信息,要确保只有url

我们可以在这里把所有的页面链接拿到,同提示词特殊处理,把相关的目录链接都拿到,然后再进行迭代处理,整个网页我们就都拿到,对于,然后在用大模型清洗一遍,调用接口保存到ragflow的向量库。是不是就实现了技术文档的采集,以及知识库的整理。

实现原理

然后我就想为什么ragflow的组件不能像dify那样,把输入和输出结构化?我简单的翻了下github上的源码。

ragflowagent/canvas.py文件里实现了一个工作流引擎,通过DSL定义组件及其执行流程。主要功能包括:

  1. DSL解析:加载包含组件配置的JSON结构
  2. 组件管理:动态实例化组件并建立依赖关系
  3. 流程控制:基于路径追踪的顺序执行机制
  4. 状态管理:维护对话历史、执行路径等运行时状态

我让ds帮我整理了下对应的流程,流程如下。

ragflow_dify_129">ragflow 和dify的组件基类对比

我又找到了ragflow和dify的组件基类,然后deepseek帮我对比了下。优缺点

ragflow的组件基类地址agent/component/base.py

dify的组件基类地址api/core/workflow/nodes/base/node.py

维度difyragflow
设计目标工作流节点基类参数化组件基类
核心优势类型安全 + 事件驱动参数管理 + 数据兼容性
性能轻量级(无第三方库依赖)较重(依赖pandas)
扩展性接口扩展配置扩展
适用场景事件驱动型工作流系统数据密集型批处理系统
技术债务泛型学习成本pandas依赖 + 递归风险
dify(BaseNode类)优缺点

优点:

  1. 类型安全完善
    • 使用TypeVarGeneric和严格的类型提示(如NodeRunResult | Generator
  2. 抽象层级清晰
  • 通过@abstractmethod明确定义接口,强制子类实现关键方法(如_run
  • 分离运行逻辑(run)与核心实现(_run),符合模板方法模式
  1. 异常处理健壮
  • 全局捕获异常并封装为NodeRunResult,保证工作流稳定性
  1. 扩展性优秀
  • 提供extract_variable_selector_to_variable_mapping等扩展点
  • 支持Generator生成事件流,适应异步场景
  1. 代码简洁高效
  • 核心方法(如run)仅30行,无冗余逻辑

缺点:

  1. 学习成本较高
    • 依赖泛型编程和复杂类型系统,对新手不友好
  2. 灵活性受限
  • 节点数据强绑定_node_data_cls,动态配置能力弱
  1. 调试难度大
  • 生成器事件流机制增加调试复杂度
ragflowComponentBase_182">ragflow(ComponentBase类)优缺点

优点:

  1. 参数管理强大
    • 完整的参数生命周期管理(更新/验证/序列化)
    • 支持嵌套参数解析(_recursive_update_param
  2. 数据兼容性好
  • 原生支持pd.DataFramepartial对象
  • 自动处理输入输出格式转换
  1. 调试能力完备
  • 内置debug_inputs和详细日志记录
  • 提供get_input_elements等诊断方法
  1. 工作流集成度高
  • 通过canvas管理组件依赖关系
  • 自动追踪message_history_window_size
  1. 验证机制全面
  • 20+种参数检查方法(check_decimal_float等)
  • JSON Schema动态校验支持

缺点:

  1. 性能瓶颈明显
    • 频繁使用pd.concat可能引发内存问题
    • 深度递归方法(_recursive_update_param)存在栈溢出风险
  2. 代码冗余度高
  • 多个相似静态方法(如check_positive_integer
  • 硬编码路径(param_validation_path_prefix
  1. 强耦合依赖
  • 深度绑定pandassettings模块
  • canvas上下文强依赖增加测试难度

知识库检索组件对比

ragflow的的知识库检索组件agent/component/retrieval.py
dify的知识库检索组件
api/core/workflow/nodes/knowledge_retrieval/knowledge_retrieval_node.py

维度difyragflow
设计范式工作流节点模式(强调状态流转)服务组件模式(强调参数配置)
错误处理多层异常捕获+业务错误分类依赖基础类异常处理,缺少细粒度错误类型
数据访问直接操作SQLAlchemy ORM通过KnowledgebaseService抽象数据访问
性能优化数据库查询优化+结果缓存机制依赖向量计算库(如Faiss)优化
扩展性通过extract_variable_selector_to_variable_mapping支持变量映射通过LLMBundle实现模型热插拔
多租户支持显式传递tenant_id通过canvas.get_tenant_id()隐式获取
结果排序基于分数的手动排序+元数据增强支持重排模型(Rerank Model)自动优化
外部集成仅支持内置数据集集成Tavily API等第三方服务
典型场景对比

场景1:高精度文档检索

# dify实现
results = dataset_retrieval.single_retrieve(planning_strategy=PlanningStrategy.ROUTER,model_config=...  # 精确控制LLM参数
)# ragflow实现
settings.retrievaler.retrieval(rerank_mdl=LLMBundle(...),  # 使用重排模型rank_feature=label_question(...)  # 特征工程
)

对比结论

  • dify更适合需要精细控制大模型行为的场景
  • ragflow在自动化结果优化方面更胜一筹

场景2:多源数据融合

# dify处理外部文档
for item in external_documents:source = {"metadata": {"_source": "external", ...}}# ragflow混合检索
kbinfos["chunks"].extend(tav_res["chunks"])  # 整合网络结果

对比结论

  • dify采用硬编码处理逻辑,扩展性受限
  • ragflow通过参数驱动实现灵活的数据源组合

后记

对于结果的对比,我不做评判,因为个人都有自己的喜好和习惯。大家参考大模型的对比来即可。

相关资料

deepseek相关资料,更新了不少内容,目录如下

https://pan.quark.cn/s/faa9d30fc2bd

https://pan.baidu.com/s/10vnv9jJJCG-KKY8f_e-wLw?pwd=jxxv

系列文档:

DeepSeek本地部署相关

ollama+deepseek本地部署

局域网或断网环境下安装DeepSeek

vlllm部署deepseek基准测试

DeepSeek个人应用

不要浪费deepseek的算力了,DeepSeek提示词库指南

服务器繁忙,电脑配置太低,别急deepseek满血版来了

DeepSeek+本地知识库:真的太香了(修订版)

DeepSeek+本地知识库:真是太香了(企业方案)

deepseek一键生成小红书爆款内容,排版下载全自动!睡后收入不是梦

最轻量级的deepseek应用,支持联网和知识库

当我把公众号作为知识库塞进了智能体后

个人神级知识库DeepSeek+ima 个人学习神器

dify相关

DeepSeek+dify 本地知识库:真的太香了

Deepseek+Dify本地知识库相关问题汇总

dify的sandbox机制,安全隔离限制

DeepSeek+dify 本地知识库:高级应用Agent+工作流

DeepSeek+dify知识库,查询数据库的两种方式(api+直连)

DeepSeek+dify 工作流应用,自然语言查询数据库信息并展示

聊聊dify权限验证的三种方案及实现

dify1.0.0版本升级及新功能预览

ragflow_336">ragflow相关

DeepSeek+ragflow构建企业知识库:突然觉的dify不香了(1)

DeepSeek+ragflow构建企业知识库之工作流,突然觉的dify又香了

DeepSeek+ragflow构建企业知识库:高级应用篇,越折腾越觉得ragflow好玩

模型微调相关

模型微调之基础篇:模型微调概念以及微调框架

📢【三连好运 福利拉满】📢🌟 若本日推送有收获:
👍 点赞 → 小手一抖,bug没有
📌 在看 → 一点扩散,知识璀璨
📥 收藏 → 代码永驻,防止迷路
📤 分享 → 传递战友,功德+999
🔔 关注 → 关注5ycode,追更不迷路,干货永同步💬 若有槽点想输出:
👉 评论区已铺好红毯,等你来战!
文章来源:https://blog.csdn.net/f80407515/article/details/146378812
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1580906.html

相关文章

Deepseek+飞书实现简历分析建议+面试题

步骤一&#xff1a;创建多维表格 点击云文档点击主页点击新建创建多维表格 步骤二&#xff1a;创建列 首先将多余的列进行删除 创建简历内容列&#xff0c;类型使用文本&#xff0c;目的是将简历内容复制进来 创建AI列&#xff1a;简历分析、简历建议、面试题 点击确定后&…

MySQL事务:确保数据一致性的关键机制

目录 1. 为什么需要事务&#xff1f; 2. 什么是事务&#xff1f; 3. 事务的四大特性 3.1 原子性&#xff08;Atomicity&#xff09; 3.2 一致性&#xff08;Consistency&#xff09; 3.3 隔离性&#xff08;Isolation&#xff09; 3.4 持久性&#xff08;Durability&…

JVM垃圾回收器演进史:从单线程到亚毫秒停顿的探索之路

垃圾回收(Garbage Collection, GC)是Java生态的核心技术之一,其演进历程不仅反映了硬件性能的飞速发展,也映射了从桌面应用到云原生时代的场景变迁。本文将带你回顾JVM垃圾回收器的重要发展阶段,解析每个时代的关键技术及其背后的设计哲学。 一、单线程时代:Serial GC(J…

机器学习是怎么一步一步由神经网络发展到今天的Transformer架构的?

机器学习和神经网络的发展经历了一系列重要的架构和技术阶段。以下是更全面的总结&#xff0c;涵盖了从早期神经网络到卷积神经网络之前的架构演变&#xff1a; 1. ​早期神经网络&#xff1a;感知机&#xff08;Perceptron&#xff09;​ ​时间&#xff1a;1950年代末至1960…

使用 Python 实现批量发送电子邮件

引言:在日常工作中,我们可能会遇到需要批量发送邮件的场景,例如通知、营销邮件或测试邮件。如果手动发送,不仅效率低下,还容易出错。今天,我将分享一个使用 Python 实现的自动化邮件发送脚本,通过读取 Excel 文件中的发件人和收件人信息,轻松完成批量邮件发送任务。 功…

GitHub 超火的开源终端工具——Warp

Warp 作为近年来 GitHub 上备受瞩目的开源终端工具&#xff0c;以其智能化、高性能和协作能力重新定义了命令行操作体验。以下从多个维度深入解析其核心特性、技术架构、用户评价及生态影响力&#xff1a; 一、背景与核心团队 Warp 由前 GitHub CTO Jason Warner 和 Google 前…

NFS共享搭建

准备工作 首先确保已经建了两台虚拟机&#xff0c;都是桥接模式&#xff0c;一台是windows server 2019 一台是centos7 用户配额教程,是在windows server 2019中&#xff0c;先新建虚拟池&#xff0c;然后创建虚拟磁盘&#xff0c;记得添加磁盘类型要选择第三个&#xff0c;要不…

基于YOLOv8深度学习的智能小麦害虫检测识别系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…