一个基于 DeepAgents 的多智能体深度研究实战项目,覆盖主智能体调度、专家助手分工、多来源检索、文件交付与前后端实时联动全链路
它不是只调用一次大模型接口,也不是套一个搜索 API 做问答演示。这个项目围绕深度研究场景,用 DeepAgents 组织主智能体和专家子智能体,让系统可以根据任务需要查公开网络、查结构化数据库、查 RAGFlow 私有知识库、读取用户上传附件,并把最终结果整理成回答、Markdown 或 PDF。换句话说,这里展示的不是某一个框架 API,而是一条 AI 应用从多智能体规划、工具接入、上下文隔离、接口交付到前端联调的完整项目主线。
在真实研究场景里,用户的问题经常不是一句普通问答可以解决的。
比如:
结合公开资料、数据库信息和我上传的文档,整理一份机器人行业研究报告,并生成 PDF。
这个任务背后可能包含多类动作:
- 判断需要公开资料、内部数据、私有知识库还是本次上传文件;
- 去互联网搜索最新新闻、政策、产品或行业资料;
- 到 MySQL 查询企业结构化业务数据;
- 到 RAGFlow 查询内部非结构化文档;
- 读取用户上传的 PDF、Word、Excel、Markdown 或文本文件;
- 汇总多来源信息,判断资料是否足够;
- 生成 Markdown 报告,并在需要时转换成 PDF;
- 把执行过程、最终结果和生成文件实时展示给前端。
所以「深度研搜」更像一个会分工、会查资料、会生成交付物的研究助手。用户只需要提出任务,系统会在后端组织一条可观察的多智能体执行链路。
用户任务
-> FastAPI 接口接收请求
-> run_deep_agent 创建会话目录并写入上下文
-> 主智能体分析任务
-> 分派给网络搜索助手 / 数据库查询助手 / RAGFlow 助手
-> 主智能体汇总多来源信息
-> 调用文件工具生成 Markdown / PDF
-> monitor 通过 WebSocket 推送进度
-> 前端展示事件、答案和文件列表
- 一主三从的多智能体架构
- 主智能体负责理解任务、规划步骤、调度助手和最终汇总。
- 网络搜索助手、数据库查询助手、RAGFlow 助手分别处理不同信息来源。
- 多来源检索,而不是模型裸答
Tavily负责互联网公开资料检索。MySQL负责查询结构化业务数据。RAGFlow负责查询内部非结构化文档。- 上传附件由主智能体通过文件工具读取。
- 从检索到交付的完整可运行链路
- 不停留在 Prompt 设计,而是会真实调用工具、读取数据、生成 Markdown,并在需要时转换成 PDF。
- 长任务执行过程可观察
- 工具调用、子智能体调用、工作目录创建、任务结果、取消和异常都会通过
monitor推送到前端。
- 工具调用、子智能体调用、工作目录创建、任务结果、取消和异常都会通过
- 会话级上下文隔离
- 通过
thread_id和session_dir区分不同任务,ContextVar让深层工具也能拿到当前会话身份和文件目录。
- 通过
- 工程化前后端结构清晰
- 基于
FastAPI + WebSocket + DeepAgents + React组织任务接口、异步执行、事件推送、文件上传和文件下载。
- 基于
这套项目十分适合这些场景:
- 想系统掌握
DeepAgents,但不想只停留在几个玩具示例。 - 想把
Tavily、MySQL、RAGFlow和大模型放到同一个研究助手场景里理解。 - 想做一个比简单模型调用更接近真实开发的 AI Agent 项目。
- 想把项目写进简历,并且能说清楚智能体层、工具层、服务层、文件层和前端层分别做了什么。
项目采用 DeepAgents 中典型的 Orchestrator-Workers 模式:主智能体作为调度中心,三个专家助手负责信息获取,文件工具由主智能体直接掌握。
项目围绕两条主线展开:
| 主线 | 做什么 | 涉及模块 |
|---|---|---|
| 多智能体深度研搜 | 基于用户任务完成规划、分派、检索、读取附件、汇总和生成交付物 | DeepAgents / LangChain / LangGraph / Tavily / MySQL / RAGFlow |
| 前后端实时闭环 | 启动后台任务、上传文件、推送执行过程、展示结果和下载生成文件 | FastAPI / WebSocket / React / Vite |
| 归属 | 能力 | 工具 |
|---|---|---|
| 主智能体 | 任务规划、助手调度、结果汇总、文件交付 | read_file_content、generate_markdown、convert_md_to_pdf |
| 网络搜索助手 | 查询互联网公开信息、新闻、政策和网页资料 | internet_search |
| 数据库查询助手 | 发现表名、预览表结构和样例数据、执行 SQL | list_sql_tables、get_table_data、execute_sql_query |
| RAGFlow 助手 | 发现可用知识库助手,并向内部知识库提问 | get_assistant_list、create_ask_delete |
| 模块 | 技术 | 作用 |
|---|---|---|
| 智能体框架 | DeepAgents |
创建主智能体和子智能体,承接长任务、多工具、多助手调度 |
| 图与检查点 | LangGraph |
提供底层运行时和 InMemorySaver 会话检查点 |
| 模型与工具抽象 | LangChain / langchain-core |
封装 OpenAI 兼容模型、工具声明和 Agent 调用结构 |
| 大模型接入 | OpenAI 兼容接口 | 通过 .env 中的 OPENAI_BASE_URL、OPENAI_API_KEY、LLM_QWEN_MAX 接入模型 |
| 网络搜索 | Tavily |
为网络搜索助手提供公开资料检索 |
| 结构化数据 | MySQL / mysql-connector-python |
为数据库助手提供药品、库存、销售等示例业务数据 |
| 私有知识库 | RAGFlow / ragflow-sdk |
为知识库助手提供内部文档问答能力 |
| 文件处理 | pypdf / python-docx / pandas / ReportLab |
读取上传附件,生成 Markdown,转换 PDF |
| 后端接口 | FastAPI / Uvicorn |
提供任务、取消、上传、文件列表、下载和 WebSocket 接口 |
| 实时通信 | WebSocket |
推送工具调用、助手调用、最终结果和错误事件 |
| 前端 | React / Vite / Ant Design / Tailwind CSS |
提供对话式研搜界面、事件流、附件上传和文件下载 |
| 依赖管理 | uv / pnpm |
管理 Python 后端和前端依赖 |
deepsearch-agents/
├── app/
│ ├── agent/
│ │ ├── subagents/ # 网络搜索、数据库查询、RAGFlow 三个子智能体
│ │ ├── llm.py # OpenAI 兼容模型初始化
│ │ ├── main_agent.py # 主智能体组装与 run_deep_agent 执行入口
│ │ └── prompts.py # 读取 app/prompt/prompts.yml
│ ├── api/
│ │ ├── context.py # ContextVar 保存 thread_id 和 session_dir
│ │ ├── monitor.py # 工具调用、助手调用、结果和异常事件推送
│ │ └── server.py # FastAPI 任务、上传、文件、下载、WebSocket 接口
│ ├── prompt/
│ │ └── prompts.yml # 主智能体和子智能体提示词配置
│ ├── ragflow/ # RAGFlow 配置和基础调用示例
│ ├── tools/ # Tavily、MySQL、RAGFlow、文件读取、Markdown、PDF 工具
│ ├── utils/ # 路径解析、Markdown/PDF 底层转换等普通 Python 工具
│ ├── output/ # 运行时生成:每个会话的 Markdown、PDF 等产物
│ └── updated/ # 运行时生成:用户上传文件的会话暂存目录
├── docker/
│ ├── docker-compose.yaml # 本地 MySQL 开发环境
│ └── mysql/mysql.sql # 药品、库存、销售记录模拟数据
├── docs/knowledge_base/ # RAGFlow 知识库示例 PDF
├── examples/ # DeepAgents 章节示例脚本
├── frontend/ # React + Vite 前端项目
├── tests/ # 测试目录
├── .env.example # 环境变量示例
├── pyproject.toml # Python 项目依赖声明
├── requirements.txt # 依赖清单
└── uv.lock # uv 锁定文件
- Python
3.12 uv- Docker 与 Docker Compose
- Node.js 与
pnpm - 可用的大模型 API Key
- Tavily API Key
- RAGFlow 服务与 API Key
git clone https://github.com/didilili/deepsearch-agents.git
cd deepsearch-agentsuv synccp .env.example .env按本机实际服务和密钥修改 .env:
# LLM 配置
OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
OPENAI_API_KEY=你的大模型_API_KEY
LLM_QWEN_MAX=qwen-max
# Tavily 配置
TAVILY_API_KEY=你的_TAVILY_API_KEY
# RAGFlow 配置
RAGFLOW_API_URL=http://your-ragflow-host
RAGFLOW_API_KEY=ragflow-your-api-key
# MySQL 配置
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=deepsearch_db
MYSQL_HOST=localhost
MYSQL_PORT=3307
MYSQL_CHARSET=utf8mb4
MYSQL_COLLATION=utf8mb4_unicode_ci
MYSQL_SQL_MODE=TRADITIONAL本仓库的 docker/mysql/mysql.sql 会在 MySQL 容器首次创建数据目录时自动导入药品、库存和销售记录模拟数据。
docker compose -f docker/docker-compose.yaml up -dRAGFlow 不在本仓库的 Docker Compose 中启动,需要接入你已有的 RAGFlow 服务,或按配套文档部署。仓库内的 docs/knowledge_base/ 提供了电商、金融等示例 PDF,可用于创建 RAGFlow 知识库和聊天助手。
如果暂时不使用私有知识库能力,也可以先跑网络搜索、数据库查询和上传文件读取链路;只有任务触发 RAGFlow 助手时才会依赖 RAGFLOW_API_URL 和 RAGFLOW_API_KEY。
uv run uvicorn app.api.server:app --host 0.0.0.0 --port 8000 --reload后端默认接口:
| 接口 | 说明 |
|---|---|
POST /api/task |
启动一次 DeepAgents 后台任务 |
POST /api/task/{thread_id}/cancel |
取消指定会话任务 |
POST /api/upload |
上传一个或多个文件到当前会话 |
GET /api/files |
列出当前会话输出目录中的生成文件 |
GET /api/download |
下载输出目录中的文件 |
WebSocket /ws/{thread_id} |
推送工具调用、助手调用、结果和异常事件 |
cd frontend
pnpm install
pnpm dev前端默认连接:
API: http://localhost:8000
WS: ws://localhost:8000
如需修改,可以在 frontend/.env.local 中配置:
VITE_API_BASE_URL=http://localhost:8000
VITE_WS_BASE_URL=ws://localhost:8000从数据库中查询心血管药品的库存情况,并生成 Markdown 报告。
搜索 2026 年 AI 在电商行业的应用趋势,并结合知识库资料生成一份 PDF。
请先读取我上传的行业报告,再结合公开资料整理一份研究摘要。
「深度研搜」适合入门到进阶阶段理解多智能体工程主链路,但它不是一个完整企业级生产系统。当前版本重点覆盖 DeepAgents 多智能体调度、真实工具接入、文件交付、FastAPI 接口、WebSocket 实时推送和前后端联调。
它没有刻意展开以下生产治理能力:
- 用户登录、角色权限和多租户隔离;
- 文件上传安全扫描和内容审核;
- 任务队列、分布式执行和大规模并发治理;
- 全量事件持久化、历史会话恢复和审计追踪;
- 系统化评测集、自动化回归和 Agent 质量评估;
- 生产监控、告警、链路追踪和灰度发布;
- 复杂报告编辑、协同工作流和权限化文件管理。
这些能力适合在主链路跑通之后继续扩展。本仓库先承担一个清晰角色:把 DeepAgents 多智能体项目最关键、最必要的工程骨架讲清楚、跑起来,并为后续企业级扩展打基础。

