“代码如诗,架构如画。今天我们来聊聊 ragflow-main 这幅‘清明上河图’。”
一、项目概览
ragflow-main 是一个集成了 RAG(Retrieval-Augmented Generation,检索增强生成)、多智能体、知识库、插件、沙箱执行、SDK、Web 前端等一系列功能的 AI 平台。它不仅能让大模型“有脑有记性”,还能让你像搭积木一样扩展功能。
项目结构大致如下:
ragflow-main/
├── agent/ # 智能体核心与组件
├── agentic_reasoning/ # 多智能体推理
├── api/ # 后端API服务
├── web/ # 前端React应用
├── plugin/ # 插件机制
├── rag/ # RAG核心与NLP
├── deepdoc/ # 文档解析与OCR
├── graphrag/ # 图谱RAG
├── sandbox/ # 沙箱代码执行
├── sdk/ # Python SDK
├── conf/、docker/、docs/ # 配置、部署、文档
└── test/ # 测试
二、技术选型
- 后端:Python 3.x,FastAPI(api/),SQLAlchemy,依赖丰富的 NLP/AI 生态
- 前端:React + TypeScript(web/),Ant Design,UmiJS
- RAG/NLP:自研 RAG pipeline,支持多种 LLM,分词、NER、知识库
- 插件:Python 动态加载,支持 LLM 工具链
- 沙箱:支持 Python/Nodejs 代码安全执行
- SDK:Python 封装,方便二次开发
- 部署:Docker、Helm、Shell 脚本
- 文档:多语言 README,详细开发者文档
三、模块详解
1. agent/ —— 智能体大本营
这里是“AI小分队”的总部。每个 component/ 下的 py 文件就是一个“特工”,比如 akshare.py(财经数据)、answer.py(问答)、search.py(搜索)等。你可以像拼乐高一样组合这些组件,组装出自己的超级智能体。
- canvas.py:画布式智能体编排,支持 DSL(domain-specific language)定义 agent 流程。
- templates/:预设的 agent 流程模板,开箱即用。
- test/:agent 相关的测试和 DSL 示例。
代码片段:agent/component/answer.py
class AnswerComponent(BaseComponent):
def run(self, query):
# 这里可以接 LLM,也可以接自定义逻辑
return self.llm.generate(query)
“每个智能体组件都像是一个乐高积木,随时可以拼装出新玩法。”
2. agentic_reasoning/ —— 多智能体推理
这里是“群体智慧”的体现。deep_research.py 里实现了多智能体协作推理,比如让多个 agent 分工合作,互相辩论,最后给出更靠谱的答案。
代码片段:agentic_reasoning/deep_research.py
def deep_research(query):
# 多智能体分工协作
results = [agent.run(query) for agent in agents]
return aggregate(results)
“一个人是智慧,团队是力量。”
3. api/ —— 后端API服务
这里是整个系统的“中枢神经”。采用 FastAPI,负责对外提供 HTTP API,管理用户、知识库、数据集、会话、权限等。
- apps/:每个子模块一个 app,比如 auth(认证)、canvas_app(画布)、sdk(SDK API)等。
- db/:数据库模型与服务,SQLAlchemy ORM。
- utils/:通用工具函数。
- ragflow_server.py:FastAPI 启动入口。
代码片段:api/apps/api_app.py
app = FastAPI()
@app.get("/api/agent/run")
def run_agent(agent_id: str, input: dict):
# 调用 agent 执行
return agent_manager.run(agent_id, input)
“API 就像是大脑的神经元,负责信息的输入输出。”
4. web/ —— 前端 React 应用
UI 采用 React + TypeScript,Ant Design 组件库,UmiJS 路由。支持画布式 agent 流程编排、知识库管理、聊天、团队协作等功能。
- src/components/:UI 组件,画布、聊天、知识库等。
- src/pages/:页面路由。
- src/services/:前端 API 封装。
- src/hooks/:自定义 hooks,状态管理。
代码片段:web/src/components/AgentCanvas.tsx
const AgentCanvas = () => {
// 画布式拖拽编排
return <Canvas nodes={nodes} edges={edges} />;
};
“前端是颜值担当,负责把复杂的 AI 能力变成人人可用的工具。”
5. rag/ —— RAG 核心与 NLP
这里是“知识增强”的发动机。实现了 RAG pipeline、分词、NER、知识库检索、LLM 调用等。
- llm/:大模型适配层,支持多种 LLM。
- nlp/:分词、NER、tokenizer。
- app/:RAG 应用场景,如音频、图书、PDF。
- utils/:NLP 工具函数。
代码片段:rag/nlp/query.py
def split_query(query):
# 分词+NER
tokens = tokenizer.tokenize(query)
entities = ner.extract(query)
return tokens, entities
“RAG 让大模型不再‘健忘’,知识库随查随用。”
6. plugin/ —— 插件机制
支持 LLM 工具链扩展,比如内置的 bad_calculator.py(一个“算错题”的计算器,专治大模型幻觉),也可以自定义插件。
- embedded_plugins/:内置插件。
- llm_tool_plugin.py:插件加载与注册。
代码片段:plugin/llm_tool_plugin.py
def load_plugins():
# 动态加载插件
for plugin in plugin_dir:
register(plugin)
“插件机制让系统像 iPhone 一样,永远有新玩法。”
7. sandbox/ —— 沙箱代码执行
安全地执行用户代码,支持 Python/Nodejs。采用容器隔离,防止“熊孩子”把服务器玩坏。
- executor_manager/:核心服务,API、容器管理、限流。
- sandbox_base_image/:基础镜像,支持多语言。
- scripts/:启动/重启脚本。
代码片段:sandbox/executor_manager/services/execution.py
def execute_code(code, lang):
# 容器隔离执行
container = create_container(lang)
result = container.run(code)
return result
“沙箱是‘游乐场’,但有护栏,安全第一。”
8. sdk/ —— Python SDK
方便开发者二次开发,快速集成 ragflow 能力。支持数据集、知识库、agent 等 API 封装。
- ragflow_sdk/:SDK 核心代码。
- test/:SDK 测试用例。
代码片段:sdk/python/ragflow_sdk/ragflow.py
class RagflowClient:
def run_agent(self, agent_id, input):
# 调用后端 API
return requests.post(f"{self.base_url}/api/agent/run", json=input)
“SDK 就像是‘遥控器’,让你轻松操控 ragflow。”
9. deepdoc/ —— 文档解析与 OCR
支持 docx、excel、图片等文档解析,内置 OCR 能力,方便知识库构建。
- parser/:各类文档解析器。
- vision/:OCR、版面分析。
代码片段:deepdoc/parser/docx_parser.py
def parse_docx(file_path):
# 解析 docx 文档
doc = Document(file_path)
return extract_text(doc)
“deepdoc 让知识库‘吃’下各种文档,消化成知识。”
10. graphrag/ —— 图谱RAG
支持知识图谱抽取、实体消歧、图谱增强 RAG。
- entity_resolution.py:实体消歧。
- general/、light/:不同图谱抽取策略。
代码片段:graphrag/entity_resolution.py
def resolve_entity(entity, context):
# 图谱消歧
candidates = search_graph(entity)
return best_match(candidates, context)
“graphrag 让 RAG 不止于文本,知识图谱加持,推理更强。”
四、部署与运维
- Dockerfile/Helm:一键部署,支持云原生。
- conf/:多环境配置,支持 LLM、插件、知识库等灵活切换。
- start_backend.sh/start_frontend.sh:本地开发一键启动。
五、总结
ragflow-main 就像是“AI 乐高积木”,每个模块都是一个功能块,既能单独玩,也能拼成超级系统。无论你是想做智能问答、知识库、RAG、还是多智能体协作,这里都能找到现成的“积木”。
“架构要优雅,代码要有趣,AI 要聪明,平台要开放。”
如果你想深入体验 ragflow,不妨 clone 下来,跑一跑,拼一拼,说不定下一个“AI 爆款”就出自你手!
如需更深入的代码分析或某个模块的详细解读,欢迎留言“点菜”!