RagFlow 框架
ragflow 相比于之前看的 deerflow 要复杂许多。这一节我们将从如下几个方面了解这个项目的整体结构:
- 项目结构: 通过 ChatGpt 了解项目每个目录的作用
- 环境搭建: 搭建测试环境,方便后续学习测试
- 启动脚本: 了解项目的启动流程,便于后续读代码,找到切入口
1. 项目结构
- 核心定位:RAGFlow 是基于深度文档理解的 RAG 引擎,整合 LLM、检索、视觉解析、工作流编排与插件工具,提供端到端的问答与智能体能力。
- 主要组成:
- 后端服务层:
api/提供 HTTP/Web API、会话与数据管理;rag/实现 RAG 核心策略与流程;deepdoc/提供 OCR/布局/表格解析等深度文档理解;graphrag/图谱增强检索;agent/+agentic_reasoning/智能体工作流;sandbox/安全代码执行沙箱;plugin/插件框架;mcp/MCP 集成。
- 前端:
web/React + TS 的管理与交互 UI。 - 部署与运维:
docker/、helm/、conf/。 - SDK 与示例:
sdk/python/、example/、docs/、test/、intergrations/。
- 后端服务层:
1. 运行入口
api/ragflow_server.py:- 初始化日志、配置与版本输出,加载插件,初始化数据库表与初始数据,注册 SMTP,启动 HTTP 服务。
- 周期任务:通过 Redis 分布式锁触发
DocumentService.update_progress()刷新解析/索引进度。 - 信号处理:优雅关闭、释放 MCP 会话。
1.2 后端核心
api/
- 作用:后端 HTTP/Web 服务入口、路由注册、鉴权、数据访问与业务服务聚合。
- 关键入口
ragflow_server.py:见上。settings.py:后端环境与配置初始化。
- 应用与路由
apps/api_app.py:主 API 注册/蓝图装配。canvas_app.py:与前端画布/工作流(Agent Canvas)相关接口。auth/:鉴权模块oauth.py:OAuth 通用流程github.py:GitHub 登录- 其他鉴权文件(+2)
sdk/:对外 SDK 风格的接口agent.py、chat.py、dataset.py、…:智能体、聊天、数据集等资源的 API 适配
- 其他应用子目录(+15):涵盖模型管理、会话、上传、检索、任务编排等路由
- 常量与工具
constants.py:全局常量utils/:通用工具api_utils.py、base64_image.py、…:请求工具、图片处理、日志等
- 数据访问层
db/db_models.py:SQLAlchemy 数据模型定义db_utils.py:数据库会话/工具services/:业务服务层api_service.py、canvas_service.py、…(+15):面向路由的业务逻辑聚合(文档、知识库、检索、对话、任务状态等)
init_data.py:初始数据装载(由入口引用)runtime_config.py:运行时配置(如 DEBUG、端口、依赖服务地址)
- 版本
versions.py:版本号/渠道(由入口读取展示)
rag/
- 作用:RAG 领域核心:检索、重排、生成、Prompt、对话流程与工具整合。
- 子模块
app/:应用级组合能力audio.py、book.py、…(+12):面向不同场景(音频、书籍等)的 RAG 流程封装
llm/:模型抽象chat_model.py、cv_model.py、…:聊天/视觉模型统一封装与适配
nlp/query.py、rag_tokenizer.py:查询处理、分词/切分
prompts/:Prompt 模板与相关脚本(大量.md)svr/:服务封装cache_file_svr.py、discord_svr.py、jina_server.py:缓存/渠道/外部服务适配
utils/azure_*_conn.py、…(+12):云存储/鉴权、Redis、并发等工具
benchmark.py、raptor.py:基准/检索策略扩展(如 RAPTOR)
deepdoc/
- 作用:深度文档理解,包括 OCR、版面分析、表结构识别、跨格式解析。
- 文档
README_zh.md/README.md:视觉/解析器说明与试运行脚本
- 视觉
vision/ocr.py:OCR 管线layout_recognizer.py:版面分析(文本、标题、图、表、页眉页脚、公式等)…(+7):推理/可视化/模型装载等
- 解析器
parser/docx_parser.py、excel_parser.py、…:多格式解析器resume/:entities/(+6):简历领域实体定义step_one.py、step_two.py:分步解析流程
graphrag/
- 作用:图谱增强型 RAG(实体抽取、关系生成、社区报告、轻量版管线)。
- 模块
entity_resolution.py、entity_resolution_prompt.pygeneral/:通用图抽取/报告生成community_reports_extractor.py、…(+9)
light/:轻量图抽取流程graph_extractor.py、graph_prompt.py、…
agent/
- 作用:智能体组件与画布编排执行。
- 顶层
canvas.py:工作流画布的结构/运行时编排settings.py:Agent 配置
- 组件
component/base.py:组件基类/协议agent_with_tools.py:具工具调用能力的 Agent- 其他组件(+10):如检索、生成、交互、改写、分类、关键词等(与文档
docs/guides/agent/*对应)
- 工具
tools/:外部工具适配(由 Agent 调用)- 示例:
akshare.py(财经数据)、arxiv.py、…(+19)
- 示例:
- 模板
templates/:Agent/工作流模板 JSON- 如
choose_your_knowledge_base_agent.json、customer_review_analysis.json、…
- 如
- 测试
test/:Agent 客户端与 DSL 示例
agentic_reasoning/
- 作用:更深入的推理/研究工作流。
- 模块
deep_research.py:Deep Research 风格的多步检索-聚合-总结prompts.py:推理流程 Prompt
mcp/
- 作用:Model Context Protocol(MCP)集成。
- 结构
server/server.py:MCP 服务端client/:客户端(client.py、streamable_http_client.py)
- 入口整合
- 由
rag.utils.mcp_tool_call_conn管理会话生命周期(入口负责关闭)
- 由
plugin/
- 作用:插件系统,通过
GlobalPluginManager加载并扩展工具与能力。 - 模块
llm_tool_plugin.py、embedded_plugins/llm_tools/bad_calculator.pycommon.py:插件接口/工具- 可扩展:外部插件包通过约定入口被加载
sandbox/
- 作用:安全的代码执行沙箱(依赖 gVisor)。
- 子服务:
executor_manager/独立微服务api/:路由与处理器core/:容器与环境管理models/:API Schema、枚举services/:执行/限流Dockerfile、requirements.txt:隔离环境构建tests/:安全测试
- 基础镜像:
sandbox_base_image/(Node.js、Python 执行镜像)
1.3 前端与接口
web/
- 作用:前端 UI(React + TypeScript + Ant Design 风格)。
- 结构
src/app.tsx:应用入口components/(50+):对话、Agent 画布、数据集管理、模型管理等 UI 组件pages/:路由页(聊天、AI 搜索、Agent、数据集、模型等)services/:与后端交互的请求封装hooks/、utils/、constants/、locales/:状态、工具、多语言public/:静态资源
- 测试配置:
jest.config.ts、jest-setup.ts
sdk/python/
- 作用:Python 客户端 SDK。
- 内容
ragflow_sdk/:SDK 包含会话、Agent、数据集、模型等模块hello_ragflow.py:快速上手示例test/:SDK 级测试与前后端 API 测试
docs/
- 作用:用户/开发者文档与参考。
- 范畴
- 使用指南(Chat、Agent、Dataset、Models…)
- 开发者指南(MCP、部署、配置)
- 参考(HTTP API、Python API、术语表)
- FAQ 与迁移指南等
example/
- 作用:示例脚本
http/dataset_example.sh、sdk/dataset_example.py:数据集/知识库示例
intergrations/
- 作用:第三方集成
chatgpt-on-wechat/:微信机器人插件extension_chrome/:浏览器插件
1.4 基础设施与配置
docker/
- 作用:基于 Docker Compose 的一键部署与运维。
- 内容
docker-compose*.yml:含 CPU/GPU、中国镜像等多种编排nginx/:反向代理配置service_conf.yaml.template、.env(在 README 内详述)- 启动脚本与日志
helm/
- 作用:Kubernetes 部署 Chart
templates/:ES/Infinity、MinIO、Redis、MySQL、Server 等模板与探针
conf/
- 作用:系统配置/映射文件
llm_factories.json:模型厂商/路由配置mapping.json、infinity_mapping.json:索引/Schema/引擎映射- 其他 YAML/JSON
Dockerfile*(根目录)
Dockerfile、Dockerfile.deps、Dockerfile.scratch.oc9:镜像构建(包含/不包含嵌入模型、精简版等)
1.5 测试与质量
test/
- 作用:端到端/HTTP/API/SDK 测试集合
- 结构
testcases/:按层次划分(http_api、sdk_api、web_api)utils/、libs/:测试通用库(鉴权、文件工具、假设生成)
1.6 其他配套
agentic 设计配套文档
docs/guides/agent/*:Agent 概念、组件、模板与编辑器说明
MCP 文档与客户端
docs/develop/mcp/*、mcp/client/*:如何启动/使用 MCP
版本与路线
README.md与docs/release_notes、Roadmap issue:版本功能更新、差异与计划
与外部依赖的关系
- 存储/检索:Elasticsearch 或 Infinity(二选一),MinIO(对象存储),MySQL(元数据),Redis(任务/缓存/锁),Nginx(代理)
- 模型:外部 LLM(OpenAI/Ollama/Xinference 等)+ 内置/外置 Embedding;DeepDoc 模型通过 HuggingFace 拉取或镜像替代
跨模块协作简述
- 文档入库:前端上传 →
api持久化元数据与对象存储 →deepdoc解析 →rag切分/嵌入 → ES/Infinity 建索引 →services更新进度 → Web 可视化分块/引用。 - 对话/检索:
api/apps路由调度 →rag检索/重排/生成 → 可选graphrag/Agent 工具 → 前端展示与追溯引用。 - Agent 工作流:前端画布 →
agent/canvas.py解析执行 →agent/component/*节点 →agent/tools/*工具调用 →agentic_reasoning深研流程(可结合 Tavily/网络检索)。
2. 环境搭建
RagFlow 本地环境搭建还是比较复杂的,详细过程参考文档,这里记录踩坑过程
- 前端项目缺少依赖包
- 注意配置环境变量
- 执行
uv run download_deps.py添加--china-mirrors参数
|
|
3. 服务启动
服务启动执行的是 bash docker/launch_backend_service.sh,这个脚本会启动:
api/ragflow_server.pyrag/svr/task_executor.py
|
|
4. deps
ragflow 系统初始化之前需要执行 download_deps.py 脚本,下载系统依赖。
|
|
下载的内容分成三个部分:
- 使用
urllib.request.urlretrieve下载的程序依赖 - 使用
nltk.download下载的 NLTK 数据目录 - 使用
snapshot_download下载的 huggingface 模型
4.1 程序依赖
程序依赖一下文件:
| 文件名 | 类型 | 说明 / 作用 |
|---|---|---|
libssl1.1_1.1.1f-1ubuntu2_amd64.deb |
Ubuntu 软件包 | OpenSSL 1.1 库,提供加密和 SSL/TLS 支持(x86_64 架构) |
libssl1.1_1.1.1f-1ubuntu2_arm64.deb |
Ubuntu 软件包 | OpenSSL 1.1 库,提供加密和 SSL/TLS 支持(ARM64 架构) |
tika-server-standard-3.0.0.jar |
Java JAR 文件 | Apache Tika 服务器端标准包,用于文档解析(文本、元数据、OCR 等) |
tika-server-standard-3.0.0.jar.md5 |
校验文件 | 对应 JAR 文件的 MD5 校验值,用于验证文件完整性 |
cl100k_base.tiktoken |
编码文件 | OpenAI 的 tiktoken 编码模型文件,用于将文本编码成 tokens |
chrome-linux64-121-0-6167-85.zip |
浏览器压缩包 | 测试版 Chrome 浏览器二进制文件(Linux 64 位),用于自动化测试或爬虫 |
chromedriver-linux64-121-0-6167-85.zip |
驱动压缩包 | 对应 ChromeDriver 二进制文件,用于驱动 Chrome 浏览器进行自动化操作 |
Tika Server
Tika Server 是 Apache Tika 提供的一个独立服务器版服务,它可以运行在独立的 JVM 上,通过 HTTP 接口 提供文档内容解析和元数据提取的功能。
简单说,Tika Server 就是把 Tika 的功能封装成一个 HTTP 服务,你不需要在自己的程序里直接调用 Java 代码,只需要通过 HTTP 请求就能解析文档。
核心功能
| 功能 | 说明 |
|---|---|
| 文本提取 | 从各种文档格式中提取纯文本,例如 PDF、Word、Excel、HTML、PowerPoint 等 |
| 元数据提取 | 获取文档的元信息,如作者、创建时间、文件类型等 |
| OCR 支持 | 对图片或扫描文档进行文字识别(需要 Tesseract OCR) |
| MIME 类型检测 | 自动识别文件类型 |
| 支持多种格式 | Office 文档、PDF、HTML、图片、音频、视频等 |
使用方式
-
启动 Tika Server 下载 JAR 后,在命令行运行:
1java -jar tika-server-standard-3.0.0.jar默认会启动在
http://localhost:9998。 -
通过 HTTP 请求解析文件 例如使用
curl提取文本:1curl -T example.pdf http://localhost:9998/tika也可以提取元数据:
1curl -H "Accept: application/json" -T example.pdf http://localhost:9998/meta
- Tika = Java 库,用于文档解析
- Tika Server = Tika 的独立 HTTP 服务版本
- 适合 不想在程序里直接依赖 Java 库,但想远程解析文档 的场景
`cl100k_base.tiktoken
cl100k_base.tiktoken 是 OpenAI 提供的 基础编码模型文件,用于 tiktoken 库将文本转换成 tokens(分词后的数字化表示),它不是大模型本身,而是 文本编码规则/字典。
核心作用
| 文件 | 功能 |
|---|---|
cl100k_base.tiktoken |
提供基础的 tokenization 编码规则,将文本拆分为 token ID,用于 GPT 系列模型的输入和计费计算。 |
背景解释
- OpenAI 的模型(如 GPT-4、GPT-3.5)内部处理的是 token,而不是直接处理字符或单词。
tiktoken是官方提供的 Python 编码器,用来把文本转成 token(模型可以理解的数字序列),或者把 token 转回文本。cl100k_base是 OpenAI GPT-4/3.5 默认使用的 基础编码表,包含了常见字符、符号的编码方式。
使用示例(Python)
|
|
总结:
- 它是 tokenizer 的核心文件
- 不含模型权重,只负责 文本 ↔ token 的映射
- GPT 模型的输入必须先经过它编码成 token
4.2 nltk
nltk_data 是 NLTK(Natural Language Toolkit)库 用来存放各种自然语言处理资源的数据目录。它并不是 NLTK 的代码本身,而是 NLTK 依赖的一些外部数据集合,比如语料库、词典、模型等。
具体来说,nltk_data 通常包含以下几类资源:
| 资源类型 | 示例 | 说明 |
|---|---|---|
| 语料库(corpora) | gutenberg, reuters, treebank |
提供文本数据,用于语言分析、训练模型等 |
| 词典/词汇资源 | wordnet |
词汇关系网络,可用于同义词、反义词查询 |
| 模型(models) | averaged_perceptron_tagger, punkt |
用于词性标注、分词、命名实体识别等 |
| 停用词(stopwords) | stopwords |
常用的停用词列表,用于文本清理 |
| 语法资源 | grammars |
提供上下文无关文法文件,用于解析和生成句子 |
在安装或使用 NLTK 时,如果你需要某个资源,通常会执行:
|
|
下载完成后,这些资源就会存放在 nltk_data 文件夹中。
5. Hugging Face
5.1 如何从 Hugging Face 下载开源模型
主要有三种方式:
方式 1:使用 huggingface_hub
|
|
下载模型:
|
|
如果需要指定下载位置:
|
|
方式 2:使用 transformers 自动下载
|
|
|
|
👉 这种方式会自动从 Hugging Face 下载模型并缓存。
方式 3:用 git lfs 克隆
先安装 git-lfs,然后:
|
|
5.2 下载后模型的目录结构
以 bert-base-uncased 为例:
|
|
不同模型会有差异,比如:
- LLaMA 类大模型会有多个分片:
pytorch_model-00001-of-00005.bin - Vision 模型可能有
preprocessor_config.json - Diffusion 模型会有
scheduler/,unet/,vae/等子目录
5.3 如何使用下载的模型
方式 1:本地加载(推荐)
|
|
方式 2:pipeline 快速推理
|
|
方式 3:大模型推理(以 LLaMA 为例)
|
|
✅ 总结:
- 下载:
huggingface_hub/transformers/git lfs - 目录:
config.json+权重文件+tokenizer配置 - 使用:本地路径加载,配合
transformers的AutoModel和AutoTokenizer
5.4 ragflow 下载的模型
dwonload_deps.py 总共下载了 5 个模型。
InfiniFlow/text_concat_xgb_v1.0
- 机构:InfiniFlow(一个做智能文档解析、RAG 基础设施的团队)
- 模型类型:传统 ML 模型(XGBoost)
- 作用:对文本拼接相关任务(text concatenation)做分类/排序。
- 可能用途:在文档拆分 + 拼接的场景中,用来判断哪些文本片段需要合并,比如多行表格、被换行的句子、跨页内容。
InfiniFlow/deepdoc
- 机构:InfiniFlow
- 模型类型:文档解析模型(Document Parsing)
- 作用:从复杂的 PDF / Office 文档中抽取结构化信息(段落、表格、标题等)。
- 类似的方向有 LayoutLM、DocFormer 这样的文档理解模型。
- 在 RAG / 文档管理系统里常用,负责把文档切成语义块再送去 embedding。
InfiniFlow/huqie
- 机构:InfiniFlow
- 模型类型:看名字像是“互切/互嵌”相关的 embedding / 匹配模型。
- 作用:用于语义相似度计算、问答匹配或文本检索。
- 具体细节官方文档里应该有,但大概率是 中文语义表示模型。
BAAI/bge-large-zh-v1.5
-
机构:北京智源 BAAI
-
模型类型:中文文本 Embedding 模型
-
作用:把中文文本编码成向量,用于相似度计算、检索、RAG。
-
特点:
- 属于 BGE 系列,v1.5 在中文理解和鲁棒性上更好。
- 向量维度 1024,适合中文检索任务。
maidalun1020/bce-embedding-base_v1
-
机构:网易有道(研究者账号:maidalun1020)
-
模型类型:中英文双语 Embedding 模型
-
作用:用于中文 + 英文语义检索 / RAG。
-
特点:
- BCE 系列模型,支持跨语言向量检索。
- 向量维度 768。
总结
| 模型 | 来源 | 类型 | 主要用途 |
|---|---|---|---|
| InfiniFlow/text_concat_xgb_v1.0 | InfiniFlow | XGBoost 排序模型 | 文本拼接判断(句子/段落合并) |
| InfiniFlow/deepdoc | InfiniFlow | 文档解析模型 | PDF/Office 文档结构化抽取 |
| InfiniFlow/huqie | InfiniFlow | Embedding/匹配模型 | 中文语义相似度、检索 |
| BAAI/bge-large-zh-v1.5 | BAAI | 中文 Embedding | 中文检索、RAG |
| maidalun1020/bce-embedding-base_v1 | Youdao | 中英 Embedding | 跨语言检索、RAG |