Docker 便于快速部署,但不便于修改。因此作者多数情况下保持 SQL、Redis 等数据库组件容器化部署的同时,会选择从源码安装。对于开源的 RAGFlow,在 linux 中安装 tree 工具( apt install tree),可快速详细列出目录结构。
root@wsl:/opt/ragflow# tree -L 2
.
|-- 9b5ad71b2ce5302211f9c61530b329a4922fc6a4
|-- CONTRIBUTING.md
|-- Dockerfile
|-- Dockerfile.deps
|-- Dockerfile.scratch.oc9
|-- LICENSE
|-- README.md
|-- README_id.md
|-- README_ja.md
|-- README_ko.md
|-- README_pt_br.md
|-- README_tzh.md
|-- README_zh.md
|-- SECURITY.md
|-- agent
| |-- README.md
| |-- README_zh.md
| |-- __init__.py
| |-- __pycache__
| |-- canvas.py
| |-- component
| |-- settings.py
| |-- templates
| `-- test
|-- agentic_reasoning
| |-- __init__.py
| |-- __pycache__
| |-- deep_research.py
| `-- prompts.py
|-- api
| |-- __init__.py
| |-- __pycache__
| |-- apps
| |-- constants.py
| |-- db
| |-- ragflow_server.py
| |-- settings.py
| |-- utils
| |-- validation.py
| `-- versions.py
|-- conf
| |-- infinity_mapping.json
| |-- llm_factories.json
| |-- mapping.json
| |-- private.pem
| |-- public.pem
| `-- service_conf.yaml
|-- deepdoc
| |-- README.md
| |-- README_zh.md
| |-- __init__.py
| |-- __pycache__
| |-- parser
| `-- vision
|-- docker
| |-- README.md
| |-- docker-compose-CN-oc9.yml
| |-- docker-compose-base.yml
| |-- docker-compose-gpu-CN-oc9.yml
| |-- docker-compose-gpu.yml
| |-- docker-compose-macos.yml
| |-- docker-compose.yml
| |-- entrypoint.sh
| |-- infinity_conf.toml
| |-- init.sql
| |-- launch_backend_service.sh
| |-- nginx
| `-- service_conf.yaml.template
|-- docs
| |-- _category_.json
| |-- configurations.md
| |-- develop
| |-- faq.mdx
| |-- guides
| |-- quickstart.mdx
| |-- references
| `-- release_notes.md
|-- download_deps.py
|-- example
| |-- http
| `-- sdk
|-- flask_session
| |-- 2029240f6d1128be89ddc32729463129
| |-- 215011ed710e3e0007d07f418e1b826a
| `-- 842b7795e070f3f127fd914bde1fa442
|-- graphrag
| |-- __init__.py
| |-- __pycache__
| |-- entity_resolution.py
| |-- entity_resolution_prompt.py
| |-- general
| |-- light
| |-- query_analyze_prompt.py
| |-- search.py
| `-- utils.py
|-- helm
| |-- Chart.yaml
| |-- templates
| `-- values.yaml
|-- intergrations
| |-- chatgpt-on-wechat
| `-- extension_chrome
|-- logs
| |-- ragflow_server.log
| |-- task_executor_0.log
| |-- task_executor_0.log.1
| |-- task_executor_0.log.2
| |-- task_executor_0.log.3
| |-- task_executor_0.log.4
| `-- task_executor_0.log.5
|-- pyproject.toml
|-- rag
| |-- __init__.py
| |-- __pycache__
| |-- app
| |-- benchmark.py
| |-- llm
| |-- nlp
| |-- prompts.py
| |-- raptor.py
| |-- res
| |-- settings.py
| |-- svr
| `-- utils
|-- sdk
| `-- python
|-- show_env.sh
|-- uv.lock
`-- web
|-- externals.d.ts
|-- jest-setup.ts
|-- jest.config.ts
|-- node_modules
|-- package-lock.json
|-- package.json
|-- public
|-- src
|-- tailwind.config.js
|-- tailwind.css
|-- tsconfig.json
`-- typings.d.ts
52 directories, 90 files

主要目录包括:
- web:管理前端实现,react+tailwind 栈
- docker:快速验证部署的 docker 配置
- rag:rag 实现
- deepdoc:文档解析实现(Todo 支持视觉模型)
- agent:智能体相关实现
- agentic_reasoning:0.17.2 版本更新的推理实现
- graphrag:知识图谱实现
- api:后端 api 实现
- sdk:ragflow封装的python sdk
- intergrations :RAGFlow 与 ChatGPT-on-WeChat 对接
- conf:源码启动配置文件
- .venv:python 虚拟环境目录,.venv/nltk_data 为下载的 nltk 数据,从源码部署需自行下载
- helm:K8s配置
以下仅列举一二,基本原理相同,不做过多赘述。
api 目录
后端 api 在二次开发时可能最为常用,主要包括 apps、db、utils 目录和服务入口、初始化配置、常量、版本验证与 nltk 数据文件等程序。
- apps:RAGFlow 对外暴露的接口,apps/__init__.py 定义了路由规则分别为 /api/{API_VERSION} 和 /{API_VERSION}/{page_name}
- apps/sdk:对外提供的 api,操作知识库
- db:数据库操作封装,db/db_models.py 封装了表单结构
- utils:工具封装

graphrag 目录
知识图谱目录,包括图谱抽取、实体映射、内部查询接口的文件和 light、general 两种方法的目录。

- light、general:对应默认知识图谱抽取的两种模式,默认 light
- general/index.py:图谱抽取入口
- entity_resolution.py:实体多表述情况下的映射实现,是构建高质量知识图谱的核心组件,结合语义理解与图结构分析,提升图谱的准确性和一致性。
- search.py:提供给内部的直接查询知识图谱的方法
agent 目录
RAGFlow 的 agent 实际是 workflow,功能上没有 dify 等框架丰富、友好,被很多人诟病。客观来看,agent 目录提供了非常低门槛地添加、修改自定义智能体的功能。agent 下包括了编排画板、编排设置程序文件和组件、模板目录。

- component:agent 功能中所有列出的可拖拽内置节点(UI 导航栏),在 __init__.py 中注册,每个节点一个独立的 py 文件
- templates:创建 agent(实为 workflow)可选的模板
... ...
def component_class(class_name):
m = importlib.import_module("agent.component")
c = getattr(m, class_name)
return c
__all__ = [
"Begin",
"BeginParam",
"Generate",
"GenerateParam",
"Retrieval",
"RetrievalParam",
"Answer",
"AnswerParam",
"Categorize",
"CategorizeParam",
"Switch",
"SwitchParam",
"Relevant",
"RelevantParam",
"Message",
"MessageParam",
"RewriteQuestion",
"RewriteQuestionParam",
"KeywordExtract",
... ...
可以添加自定义拖拽节点,或者修改 invoke 节点以实现更高级的远程调用功能,充当 MCP Client 也没有问题。
if self._param.headers:
headers = json.loads(self._param.headers)
proxies = None
if re.sub(r"https?:?/?/?", "", self._param.proxy):
proxies = {"http": self._param.proxy, "https": self._param.proxy}
if method == 'get':
response = requests.get(url=url,
params=args,
headers=headers,
proxies=proxies,
timeout=self._param.timeout)
if self._param.clean_html:
sections = HtmlParser()(None, response.content)
return Invoke.be_output("\n".join(sections))
return Invoke.be_output(response.text)
deeploc 目录
deeploc 是 ragflow 用于文档识别、解析的核心模块,包括 parser、vision 两个子模块。

- parser:文档格式支持与实现
- vision:引入了 layout、table_structure,实现对版式识别、布局和结构化内容的支持

其他目录如 rag 谨慎修改,已有的业务逻辑尽量避免改动,否则一不小心把小工程变成了大项目就不好了。





文章评论