# 深度研搜:前言 --- 欢迎来到「深度研搜」项目,正式进入「AI 智能体实战速成指南」里更偏多智能体、长任务和工程闭环的一套实战项目。 如果你已经学过大模型接口调用、`Prompt`、`RAG`、`LangChain` 或 `LangGraph`,下一步通常会遇到一个更实际的问题:**复杂任务到底怎么组织成一个能跑、能看、能交付的项目?** 「深度研搜」就是围绕这个问题设计的。它不是再写一个聊天框,也不是只接一个搜索 `API`,而是用 `DeepAgents` 搭一个对话式多智能体研究台:用户输入研究任务或上传附件,主智能体判断任务需要哪些信息,再调度网络搜索、数据库查询、`RAGFlow` 知识库等能力,最后整理回答,或生成 `Markdown` / `PDF` 文件。 ![深度研搜前端首页:左侧展示 WebSocket 连接、助手调度和工具调用统计,中间提供网络搜索、数据库查询、RAGFlow、上传文件分析和报告生成等任务示例](images/0/0-0-0-1.png) **「深度研搜」不是一个只让大模型回答问题的 `Demo`,而是一套围绕“主智能体规划调度、子智能体分工执行、多来源资料检索、文件生成交付、前后端实时联动”展开的 `DeepAgents` 多智能体实战项目。** 它可能还不是一个完整的企业级生产系统,但非常适合作为入门到进阶阶段的项目实战课程。你可以在这里系统学习一个多智能体应用如何从概念、示例、子智能体、长期记忆、中间件,一步步走到真实的 `FastAPI` 接口和前端页面。 **配套源码仓库地址**:https://github.com/didilili/deepsearch-agents --- ## 1、这套项目重点学什么 很多入门项目只做到“模型能回答”。这当然重要,但离一个可交付的智能体应用还差几步。 在「深度研搜」里,重点不是让模型说得更长,而是解决这些更具体的问题: - 一个任务什么时候该查网络,什么时候该查数据库,什么时候该查知识库; - 子智能体的 `description`、`system_prompt`、`tools` 应该怎样分工; - 上传文件和生成文件怎样按会话隔离,避免不同任务互相覆盖; - 长任务为什么不能让 `HTTP` 请求一直等,为什么要用 `WebSocket` 回传进度; - 工具在深层调用中怎样拿到当前 `thread_id` 和 `session_dir`; - 最终结果怎样从命令行示例走到前端页面、输出文件和下载入口。 所以,这套项目更像一条工程练习线:从 `DeepAgents` 的基本能力开始,逐步把子智能体、记忆、中间件、文件工具、后端接口和前端联调串起来。 学完之后,你应该能明白三件事: 1. `DeepAgents` 适合处理哪类长任务,和普通工具型 `Agent` 有什么区别。 2. 主智能体、子智能体、工具、上下文、文件系统之间应该怎样分层。 3. 一个多智能体能力怎样通过 `FastAPI`、`WebSocket` 和前端页面真正交付出去。 --- ## 2、这个项目最终做成什么样 从用户视角看,它是一个“深度研究助手”。 用户可以提出这样的任务: ```text 结合公开资料、数据库信息和我上传的文档,整理一份电商行业研究报告,并生成 PDF。 ``` 系统背后会按需做这些事: 1. 判断任务需要哪些信息来源; 2. 用 `Tavily` 查询公开网络资料; 3. 用 `MySQL` 查询结构化数据; 4. 用 `RAGFlow` 查询内部知识库; 5. 读取用户本次上传的 `PDF`、`Word`、`Excel` 或 `Markdown` 文件; 6. 汇总资料,判断信息是否足够; 7. 生成 `Markdown`,必要时再转换成 `PDF`; 8. 把执行过程、最终结果和输出文件展示给前端。 ![深度研搜系统架构图:前端通过 FastAPI 和 WebSocket 连接后端,DeepAgents 主智能体调度网络搜索、数据库查询、RAGFlow 知识库和文件交付工具](images/0/0-2-0-1.svg) 执行过程中,前端不会只显示“等待中”。它会展示 `WebSocket` 状态、助手调度次数、工具调用次数,以及每一次 `tool_start`、`assistant_call`、`task_result` 等事件。 ![深度研搜执行过程页面:前端实时展示网络搜索工具调用、tool_start 事件、task_result 事件和主智能体整理后的回答](images/0/0-2-0-2.png) 如果任务生成了文件,页面还会展示输出文件列表。下面这个例子里,数据库查询助手执行 `SQL` 后,主智能体继续调用 `Markdown` 文档生成工具,最后把 `.md` 文件放到当前会话的输出区域,用户可以直接下载。 ![深度研搜文件交付页面:数据库查询任务执行后生成 Markdown 文件,前端展示输出文件和下载入口](images/0/0-2-0-3.png) --- ## 3、章节怎么安排 这套项目分成两段。 第一段是 `DeepAgents` 能力铺垫,主要对应第 1 到 7 章: | 章节 | 重点 | | ------- | ------------------------------------------------------------- | | 第 1 章 | 建立 `DeepAgents` 的定位:长任务、上下文、子智能体、长期记忆 | | 第 2 章 | 跑通最小示例,理解 `invoke()`、`stream()` 和流式 `chunk` | | 第 3 章 | 学会字典式子智能体,以及主智能体如何调度它们 | | 第 4 章 | 接入已有 `LangGraph` 图、`LangChain` 的 `Agent` 或 `Runnable` | | 第 5 章 | 理解人机协作、中断、审批、编辑和恢复执行 | | 第 6 章 | 理解 `Backend`、文件系统、`Store` 和长期记忆 | | 第 7 章 | 理解中间件和 `Skills`,给 `Agent` 执行链路加治理能力 | 第二段是「深度研搜」项目主线,主要对应第 8 到 14 章: | 章节 | 重点 | | -------- | ----------------------------------------------------------------------- | | 第 8 章 | 看清最终项目目标、整体架构和工程目录 | | 第 9 章 | 搭好 `.env`、`context.py`、`monitor.py`、`llm.py`、`prompts.yml` 等底座 | | 第 10 章 | 实现网络搜索子智能体,接入 `Tavily` | | 第 11 章 | 实现数据库查询子智能体,接入 `MySQL` | | 第 12 章 | 准备 `RAGFlow` 知识库,并封装知识库助手 | | 第 13 章 | 组装主智能体,接入上传文件读取、`Markdown` 生成、`PDF` 转换 | | 第 14 章 | 用 `FastAPI`、`WebSocket` 和前端页面完成闭环 | 这样安排的好处是,前面先把 `DeepAgents` 的核心能力拆开讲,后面再把这些能力放回一个真实项目里。你不会一开始就被完整项目淹没,也不会只停留在零散示例。 --- ## 4、技术栈和学习重点 当前项目用到的技术并不多,但每个技术都有明确位置。 | 模块 | 技术栈 | 在项目里的作用 | | ---------- | ------------------------------------------ | ----------------------------------------------------------- | | 智能体框架 | `DeepAgents` | 创建主智能体和子智能体,承接长任务和分工调度 | | 底层运行时 | `LangGraph` | 提供检查点、状态恢复和与图工作流的兼容能力 | | 模型与工具 | `LangChain` | 提供模型封装、工具声明和 `Runnable` / `Agent` 兼容方式 | | 网络搜索 | `Tavily` | 给网络搜索助手提供公开资料检索能力 | | 结构化数据 | `MySQL` | 给数据库查询助手提供表名、样例数据和 `SQL` 查询能力 | | 私有知识库 | `RAGFlow` | 给知识库助手提供内部文档问答能力 | | 文件交付 | `Markdown` / `PDF` / `Word` / `Excel` 解析 | 读取上传附件,生成 `Markdown`,并转换成 `PDF` | | 后端接口 | `FastAPI` | 提供任务启动、取消、上传、文件列表、下载和 `WebSocket` 接口 | | 实时通信 | `WebSocket` | 把执行进度、结果和异常实时推给前端 | | 前端页面 | `React` + `Vite` + `Ant Design` | 展示会话、任务事件、输出文件和下载入口 | | 环境管理 | `uv` | 管理 `Python` 环境和依赖 | 你不需要把每个技术都学到很深才开始。更好的方式是先看它在链路里解决什么问题,再回到对应章节看实现细节。 --- ## 5、这套项目不刻意覆盖什么 「深度研搜」适合入门到进阶阶段学习,但它不是完整企业级生产系统。 当前版本重点覆盖的是主链路: ```text 多智能体分工 -> 多来源工具接入 -> 会话上下文隔离 -> 文件生成交付 -> FastAPI 接口 -> WebSocket 实时进度 -> 前端闭环展示 ``` 有些生产级能力没有展开,比如: - 用户登录和数据权限; - 多租户隔离; - 文件上传安全扫描; - 分布式任务队列; - 大规模并发与限流; - 全量事件持久化; - 系统评测与回归测试集; - 监控告警和链路追踪; - 在线报告编辑与协作。 这些能力都重要,但不适合一开始全部放进来。第一版先把主链路讲清楚,后面再逐层扩展,会更容易学,也更容易改。 --- ## 6、项目目录结构 配套源码仓库是 [deepsearch-agents](https://github.com/didilili/deepsearch-agents)。最终项目的主要结构如下: ```text deepsearch-agents/ ├── app/ # 后端源码主目录 │ ├── agent/ # 主智能体、模型配置、提示词加载和子智能体配置 │ │ ├── subagents/ # 网络搜索助手、数据库查询助手、RAGFlow 知识库助手 │ │ ├── llm.py # 大模型初始化 │ │ ├── main_agent.py # 主智能体组装与 run_deep_agent 执行入口 │ │ └── prompts.py # 读取 prompts.yml 中的主智能体和子智能体配置 │ ├── api/ # FastAPI 接口层、上下文和实时进度推送 │ │ ├── context.py # ContextVar 保存 thread_id 和 session_dir │ │ ├── monitor.py # 统一封装工具调用、助手调用和任务结果事件 │ │ └── server.py # 任务、取消、上传、文件列表、下载和 WebSocket 接口 │ ├── prompt/ # prompts.yml,集中管理主智能体和子智能体提示词 │ ├── ragflow/ # RAGFlow 连接配置和基础调用示例 │ ├── tools/ # Tavily、MySQL、RAGFlow、文件读取、Markdown、PDF 工具 │ ├── utils/ # 路径解析、Word/PDF 转换等通用工具 │ ├── output/ # 每个会话生成的 Markdown、PDF 和输出文件 │ └── updated/ # 用户上传文件的会话暂存目录 ├── docker/ # 本地 MySQL 等服务的 Docker Compose 配置 ├── examples/ # 1 到 15 章对应的 DeepAgents 示例脚本 ├── frontend/ # React + Vite 前端项目 ├── tests/ # 工具、连接管理、取消任务等测试 ├── pyproject.toml # Python 项目配置 ├── requirements.txt # 依赖清单 └── uv.lock # uv 锁定文件 ``` --- ## 7、建议怎么学 如果你是第一次接触 `DeepAgents`,不建议直接从最终版的主智能体 `main_agent.py` 开始看。它背后依赖了子智能体、检查点、`ContextVar`、`monitor`、文件工具、异步流式执行和 `WebSocket` 推送。 更稳的顺序是: ```text 先看第 1 章,知道 DeepAgents 解决什么问题 -> 跑第 2 章,熟悉 invoke / stream / chunk -> 看第 3 章,掌握子智能体配置和调度 -> 看第 5 到 7 章,理解中断、记忆、中间件和 Skills -> 从第 8 章进入真实项目 -> 第 9 章看懂 context、monitor、path_utils、llm、prompts -> 第 10 到 12 章完成三个专家助手 -> 第 13 章组装主智能体和文件交付工具 -> 第 14 章接上 FastAPI、WebSocket 和前端页面 ``` --- 如果你已经准备好了,就从下一章开始,正式进入「深度研搜」的项目学习。 后面的内容会按照 **“DeepAgents 核心概念 -> 快速入门与流式解析 -> 子智能体与兼容接入 -> 人机协作、记忆、中间件 -> 项目工程初始化 -> 三个专家助手 -> 主智能体 -> FastAPI 与前端闭环”** 这条主线,逐步把整套项目拆开讲清楚。 学完之后,你收获的不只是“跑通了一个 AI Demo”,而是能说清楚:一个 `DeepAgents` 多智能体系统为什么要这样设计,代码为什么要这样拆,`DeepAgents`、`WebSocket`、`Tavily`、`MySQL` 和 `RAGFlow` 在一条完整业务链路里分别解决什么问题。