dify与ragflow
📝 笔记摘要:Dify —— 开源 LLM 应用开发平台
Dify 是什么? Dify 是一个开源的 LLM(大语言模型)应用开发平台。它结合了 Backend-as-a-Service 和 LLMOps 的理念,旨在让开发者能够基于任何大模型,快速构建、部署和管理生成式 AI 应用。其核心特色是“可视化工作流”与“后端即服务”的结合,既降低了非技术人员的门槛,又为专业开发者提供了灵活的 API 集成能力。
核心功能:
可视化工作流编排: 提供拖拽式的画布,允许用户通过连接不同的节点(如 LLM 调用、代码执行、条件判断、知识库检索)来构建复杂的业务逻辑。这解决了传统 Prompt 工程难以处理长链条、多分支逻辑的痛点。
强大的 RAG 引擎: 内置了从文件上传、自动分段、清洗到向量索引的全流程数据处理管道。支持多种向量数据库(Weaviate, Qdrant, Milvus 等),并提供了混合检索、重排序等高级策略,显著提升了知识库问答的准确率。
模型中立与广泛兼容: 不绑定特定厂商,支持 OpenAI、Anthropic、Azure、百度千帆、阿里通义等数十种主流大模型及本地部署模型(如 Ollama)。用户可以随时切换底层模型而无需重构应用。
LLMOps 全生命周期管理: 提供标注与改进、日志监控、性能分析等功能。开发者可以查看每一次调用的 Token 消耗、延迟及用户反馈,持续优化应用效果。
最大优势:
“开箱即用”的后端服务: 传统开发 AI 应用需要自行搭建向量库、编写检索逻辑、处理并发和鉴权。Dify 直接将这些封装为标准的 RESTful API,前端只需调用接口即可,极大缩短了从想法到上线的时间。
平衡了低代码与高灵活性: 对于简单场景,使用预设模板即可;对于复杂场景,通过 Code Node 支持 Python/JavaScript 代码注入,弥补了纯低代码平台在处理自定义逻辑时的不足。
企业级安全与私有化部署: 支持完整的 Docker Compose 或 Kubernetes 私有化部署,数据完全掌握在自己手中,符合金融、医疗等对数据隐私有严格要求的行业标准。
与 LangChain/LlamaIndex 的区别:
LangChain/LlamaIndex: 是代码层面的框架(Library),适合程序员从头构建应用,灵活性极高但开发成本高,需自行解决运维和监控问题。
Dify: 是产品层面的平台(Platform),提供了现成的 UI、API 和运维后台。它底层可能使用了 LangChain 等技术,但为用户屏蔽了底层复杂性,更适合快速落地业务场景。
💡 适用场景:
企业内部知识库助手、智能客服系统、文档问答机器人。
需要快速验证 AI 创意的初创团队或独立开发者。
希望将现有 SaaS 产品集成 AI 能力,但不想投入大量后端研发资源的公司。
需要对 AI 调用进行统一计费、监控和权限管理的组织。
📝 笔记摘要:RAGFlow —— 深度文档理解的 RAG 引擎
RAGFlow 是什么? RAGFlow 是一款基于深度文档理解(Deep Document Understanding)构建的开源 RAG(检索增强生成)引擎。与传统 RAG 仅依赖文本切片不同,RAGFlow 的核心突破在于其对复杂格式文档(如 PDF、Excel、PPT、图片)的精准解析能力。它旨在解决传统 RAG 系统中因文档解析粗糙导致的“垃圾进、垃圾出”(Garbage In, Garbage Out)问题。
核心功能:
深度文档解析(DeepDoc): 内置了强大的 OCR 和布局分析模型,能够识别文档中的表格、图表、公式、页眉页脚及多栏排版。它能将非结构化的 PDF 还原为具有逻辑结构的 Markdown 或 JSON,保留原始文档的语义完整性。
多样化的分块策略(Chunking): 提供针对不同类型文档(如法律条文、论文、简历、手册)的专用分块模板。不再是简单的按字符数切割,而是基于语义、段落、表格行等进行智能分块,显著提升检索的相关性。
混合检索与重排序: 支持关键词检索(BM25)与向量检索(Embedding)的混合模式,并引入了重排序(Re-ranking)机制。在多路召回后,对结果进行二次精排,确保最相关的内容排在首位,减少大模型的幻觉。
可视化的数据流追踪: 用户可以清晰地看到每一个 Chunk 是如何从原始文档中提取出来的,以及检索时命中了哪些具体片段。这种“白盒化”的设计极大地方便了调试和优化。
最大优势:
攻克复杂文档解析难题: 在处理包含大量表格、扫描件、复杂排版的行业文档(如财报、医疗报告、工程图纸)时,RAGFlow 的表现远超通用的 LangChain 解析器。
高精度的检索效果: 通过“深度解析 + 智能分块 + 混合重排序”的组合拳,显著提高了召回内容的准确度,从而让大模型生成的答案更靠谱、更有据可依。
模块化与可扩展性: 采用微服务架构,解析、检索、生成等模块解耦。支持接入 Infinity、Elasticsearch、OceanBase 等多种向量/搜索引擎,适应不同规模的性能需求。
与传统 RAG 方案的区别:
传统 RAG: 往往假设输入是干净的文本,直接使用简单的递归字符分割。遇到 PDF 表格时容易错行、断句,导致检索到的片段语义破碎,大模型无法理解。
RAGFlow: 将重心前移至“数据预处理”阶段。它认为 RAG 的效果上限取决于解析的质量,因此投入大量资源在 DeepDoc 模型上,确保进入向量库的数据是结构化且高质量的。
💡 适用场景:
金融、法律、医疗等拥有大量复杂格式历史文档的行业知识库建设。
需要对 PDF 中的表格数据进行精确查询和分析的场景。
对 RAG 回答准确性要求极高,无法容忍因解析错误导致的事实性幻觉的企业应用。
科研文献管理、专利检索与分析等专业领域的智能助手开发。
Docker 命令速查
docker compose -p 命名参数(防止组件冲突)up-d
docker compose -p 命名参数(防止组件冲突)down RAGFlow 安装与部署流程
一、获取 RAGFlow 源码
方式 A:Git 克隆(推荐)
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker 如果 GitHub 访问缓慢,可用加速链接:
git clone https://ghproxy.com/https://github.com/infiniflow/ragflow.git
方式 B:下载 Release 压缩包
前往 RAGFlow GitHub Releases 页面下载最新 Source code (tar.gz)。
解压后进入 docker 目录。
二、配置环境变量
复制环境变量模板:
cp .env.example .env 使用 nano .env 或 vim .env 修改配置:
默认配置:一般无需修改即可运行。
端口调整:如 80 端口被占用,可将 SVR_HTTP_PORT=80 改为其他端口(如 8080)。
存储路径:可通过 RAGFLOW_WORKDIR 修改数据持久化目录。
三、启动服务
确保当前目录为 ragflow/docker,执行:
docker compose -p ragflow up -d首次启动需拉取较大镜像,请耐心等待。
四、访问与初始化
访问界面
浏览器打开:http://<你的服务器IP>
若端口修改,访问:http://:<端口>
注册管理员
首次访问需点击 Sign Up 注册第一个账号,自动成为系统管理员。
配置模型
登录后,进入右上角头像 → Model Providers,配置你的大模型 API Key(如 OpenAI、通义千问、智谱、百度千帆等)。
创建知识库
上传文档,创建知识库,进行对话测试。
五、常见避坑指南
内存溢出 (OOM) 导致容器重启
现象:Elasticsearch 或 RAGFlow 容器反复重启,日志提示 Killed 或 OutOfMemoryError。
解决:
若服务器内存 ≤ 8GB,建议在 .env 中将 ES_JAVA_OPTS 调小(如 -Xms2g -Xmx2g)。
或将向量数据库切换为更轻量的 infinity(如版本支持)。
端口冲突
现象:启动失败,提示 Bind for 0.0.0.0:80 failed: port is already allocated。
解决:
修改 .env 中 SVR_HTTP_PORT=80 为 8080 或其他空闲端口。
重启服务:
docker compose down && docker compose up -d 彻底卸载/重置
若需清空所有数据重新部署:
cd ragflow/docker
docker compose -p ragflow down -v # -v 参数会删除挂载的数据卷,请确保无需保留数据 Dify 安装流程
一、获取 Dify 源码
推荐 Git 克隆官方仓库,便于后续升级:
cd ~
git clone https://github.com/langgenius/dify.git cd dify/docker 若 GitHub 访问慢,可用加速链接:
git clone https://ghproxy.com/https://github.com/langgenius/dify.git
二、关键配置(防坑指南)
1. 配置环境变量
复制模板:
cp .env.example .env 重点修改 .env 的以下项:
端口冲突检查 Dify 默认使用 80 端口。若已被 RAGFlow 占用,请修改 Dify 的端口:
模型配置Dify 不自带大模型,需要配置 API Key。 设置 LLM_PROVIDER 为 openai 或其他,并填写 OPENAI_API_KEY。(也可在网页界面登录后再配置)
2. 解决与 RAGFlow 的网络/名称冲突
一定要指定项目名,避免容器冲突。
docker compose -p 命名参数(防止组件冲突)up-d
docker compose -p 命名参数(防止组件冲突)down三、启动服务
在 dify/docker 目录下执行:
docker compose -p dify up -d 首次启动需拉取多个镜像(API, Web, Worker, Postgres, Redis, Weaviate/VectorDB 等),请耐心等待。
四、验证与访问
查看容器状态:
docker compose -p dify ps 确认所有容器状态为 Up 或 Healthy,重点关注 api 和 web。
访问界面:
浏览器访问:http://<你的服务器IP>:8080(如端口有变动请相应调整)
初始化账号:
首次访问会提示创建管理员账号。
五、常见问题与避坑
1. 容器一直重启 (Restarting)
原因:通常是数据库(PostgreSQL)未就绪或 Redis 连接失败。
解决:
查看日志:docker compose -p dify logs -f api
若数据库问题,多等 1-2 分钟即可恢复。
2. 向量数据库选择
Dify 支持多种向量库(Weaviate, Qdrant, Milvus 等),默认使用 Weaviate。
若服务器内存较小(<8GB),建议在 .env 中将 VECTOR_STORE 改为更轻量的方案,或调整 Weaviate 的内存限制。
如已安装 RAGFlow 的 ES/Infinity,Dify 主要推荐 Weaviate 或 Qdrant,不建议混用 ES,除非手动修改复杂配置。
3. 停止与更新
停止服务:
docker compose -p dify down 更新服务:
cd ~/dify/docker
git pull docker compose -p dify pull docker compose -p dify up -d 