这节课我们正式开启智能体应用实战课程的学习。作为整个课程的开篇,这节课我会带大家全面认识这个仿豆包的智能体应用平台(DodoAgent 豆豆),从项目定位、技术架构到核心功能,帮你建立起对整个项目实战课程的完整认知框架。
为什么要做这个项目?
在开始具体内容前,先回答一个核心问题:我们为什么要做这个项目? 当下 AI Agent 技术很火,但很多教程要么只讲理论,要么只做简单 Demo,缺乏工程化落地的实战内容。在前面的课程中,你可能学了 ReactAgent、PlanExecuteAgent 的实现原理,但不知道怎么把这些理论变成能上线运行的应用。 说到这里,大家平时常用的豆包,就是我们做这个项目的核心参考。这个项目我命名为 DodoAgent(豆豆),本质上就是一个仿豆包的智能体实战项目。我复刻了豆包核心的四大业务场景,分别是联网对话、文件问答、PPT生成和深度研究,覆盖了日常办公、信息获取、复杂调研等高频需求。 通过这个项目的学习,你能掌握的不只是 AI Agent 的原理,更重要的是工程化落地的思维和方法:比如怎么处理大文件、怎么保证流式响应的体验、怎么设计状态机控制主体流程、怎么让智能体的输出有可追溯的参考来源等等,真正实现从“懂原理”到“能落地”的跨越。
学习路径
我们的学习会遵循 从原理到实践、从简单到复杂 的逻辑: 1. 先基于前面课程中的 AI Agent 理论基础,落地联网对话问答 2. 进阶到文件问答助手(掌握文件问答的实现原理、大文件的处理方式、对象存储) 3. 深入最核心的难点 PPT生成模块(掌握状态机设计、多方式生成、内容稳定性) 4. 最终实现 深度研究DeepResearch模块(基于 Plan-Execute 模式、多流式控制、并行任务控制) 5. 全程贯穿工程化思考:历史记忆、流式输出/停止、会话管理等
核心功能点
接下来,我们逐一拆解 DodoAgent 的四大核心模块,让你搞清楚每个模块要解决什么问题、具备什么特性。

联网对话问答:让 AI 拥有实时信息能力
功能定位
解决传统大模型知识截止的问题,让 AI 能联网搜索实时信息,并给出带参考来源的回答。比如问“今年年双十一电商销售额”“今天南京的天气如何?”,AI 能先搜索、再回答,并且最终还会告诉你信息来自哪里,让一切的信息源头可追溯。
核心特性
- 四段式输出:把思考过程(thinking)、回答正文(text)、参考来源(reference)、推荐问题(recommend)分离展示,方便前端渲染,提升用户体验,符合用户对 AI 决策过程的认知。
- 实时流式响应:全程流式输出,并提供流式停止的功能,用户不用等完整回答,体验更流畅。
- 会话记忆:支持多轮对话,历史记录持久化到数据库,下次对话能衔接上下文。
- 工具集成标准化:基于 MCP 集成搜索引擎,后续扩展其他工具(如地图、计算器)更便捷。
文件问答助手:让 AI 帮你解决问题
功能定位
基于用户上传的文件内容做精准问答,比如上传一份 PDF 技术文档,问“这份文档的核心结论是什么”“第三章讲了哪些技术点”。
核心特性
- 多格式兼容:支持 PDF、DOCX、TXT 文本文件,也支持 PNG/JPG 图片文件(通过多模态 LLM 识别图片内容)。
- 文件-会话绑定:上传的文件与当前会话关联,后续提问自动基于该文件内容回答,不用重复上传
- 大文件友好:针对大文件做向量化处理,抽象检索工具,方便问答使用。
- 文件存储:上传的文件通过 MinIO 做对象存储。
技术关键点
- 文本提取:PDF 用 Apache PDFBox,Word 用 Apache POI,保证内容提取的准确性
- 图片识别:调用多模态 LLM 的视觉接口,解析图片中的文字内容
- 大文件分析:大文件使用 RAG 技术,上传文件执行向量化,问答执行检索工具
PPT 生成:从需求到成品的自动化
功能定位
根据用户的自然语言需求,自动生成结构完整、内容贴合的 PPT,还支持对已有 PPT 的修改。比如用户说“帮我生成一份 Spring Boot 入门的技术分享 PPT”,AI 能完成从需求澄清到最终 PPT 输出的全流程。
核心特性
- 多种生成方式:
- 模板填充:基于预定义的 PPT 模板,填充内容(兼顾美观、效率、可编辑、低成本)
- 文生图:如用Nano Banana生成高清4K图,再转换成PPT(效果炫酷、不可编辑、成本高)
- HTML转PPT:生成 PPT样式 的HTML代码,再将HTML转PPT(样式丢失)
- 状态机流程:需求澄清 → 模板选择 → 大纲生成 → 信息收集 → Schema 生成 → 渲染,每一步可确认、可修改,保证最终效果。
- 意图识别:能区分用户是「新建 PPT」还是「修改已有 PPT」,适配不同处理逻辑。
- 文生图:PPT 中的图片字段可自动调用文生图服务生成,提升多样性。 核心价值 解决传统 PPT 制作「耗时、内容零散」的问题,平衡「美观炫酷」和「稳定可编辑」——既不会因为追求特效导致 PPT 无法编辑,也不会因为追求可编辑性牺牲视觉效果。
深度研究:解决复杂分析问题的研究员
功能定位
针对复杂、需要多轮调研的问题,比如“2026 年 AI 行业发展趋势”“某竞品的核心技术优势”,智能体能像研究员一样,先拆解问题、制定研究计划,再分步执行、迭代优化,不断循环逼近目标,最终输出完整的分析研究报告。
核心特性
- Plan-Execute模式:先规划研究步骤,再执行每个步骤,最后评估结果,不达标则持续迭代优化
- 问题澄清+研究主题:自动优化丰富用户的原始问题,提升研究的精准度(比如把「研究 AI 趋势」优化为「2026 年全球 AI 行业发展趋势:技术突破、市场规模、应用场景」)
- 并行任务处理:可同时执行多个研究子任务(如同时搜索「AI 技术突破」和「AI 市场规模」),提升效率
- 多轮迭代:每次研究结果都会进行批判总结,看是否符合用户的原始需求,如果不满意时,会自动调整执行计划,继续迭代循环,直到结果达标。
项目技术栈
一个稳定的智能体应用,离不开合理的技术选型。DodoAgent 是基于 Java 生态的原生 Spring AI 构建的智能体应用,大模型使用的是在线的通义千问家族,整体开发要求门槛低,通用性强。
基础框架
| 框架 | 版本 | 核心作用 |
|---|---|---|
| Spring Boot | 3.5.6 | 整个应用的基础框架,提供自动配置、依赖注入、Web 容器等核心能力 |
| Spring AI | 1.1.0 | 简化 AI 应用开发的框架,封装了 LLM 调用、工具集成、Prompt 管理等能力 |
LLM
| 名称 | 说明 |
|---|---|
| qwen-plus | 核心大模型,负责自然语言理解、逻辑推理、内容生成 |
| qwen3-vl-plus | 全模态大模型,具备图像识别的能力 |
| nanobanana-pro | 文生图大模型,用于生成高清4K图,效果好,但成本高 |
| qwen-image-plus | 文生图大模型,生成简单的配图,成本低 |
| MCP(Model Context Protocol) | 工具集成的标准协议,统一搜索引擎、文件检索等工具的调用方式 |
| embedding | 向量模型,用于大文件向量化 |
数据存储组件
| 组件 | 版本 | 用途 |
|---|---|---|
| MySQL | 8.0.33 | 存储结构化数据:会话记录、文件元信息、PPT 实例状态、模板配置等 |
| MinIO | 8.5.1 | 对象存储服务:存储用户上传的文件、生成的 PPT 文件、图片等二进制数据 |
| PgVector | 向量存储,用于文件问答,存储大文件的分块内容 |
其他工具
| 分类 | 组件 | 版本 | 用途 |
|---|---|---|---|
| 持久层 | MyBatis-Plus | 3.5.5 | 简化 MySQL 操作,提供 CRUD 封装、分页、条件查询等能力 |
| 文件处理 | Apache PDFBox | 2.0.30 | PDF 文件文本提取 |
| 文件处理 | Apache POI | 5.2.5 | Word/Excel 文件解析 |
| 文件处理 | python-pptx | - | 生成 PPT 文件脚本 |
| 流式处理 | reactor | 3.7.11 | 控制智能体的流式输出启停 |
项目结构
src/main/java/cn/hollis/llm/mentor/agent/
│
├── DodoAgentApplication.java # Spring Boot 应用启动类
│
├── agent/ # 智能体模块
│ ├── BaseAgent.java # Agent抽象基类(通用能力:聊天记忆、响应格式、任务管理)
│ ├── deepresearch/ # 深度研究 Agent
│ │ ├── PlanExecuteAgent.java # 计划-执行模式深度研究 Agent
│ │ └── SimpleReactAgent.java # 简单 React Agent
│ ├── file/ # 文件问答 Agent
│ │ └── FileReactAgent.java # 基于文件内容进行问答的 Agent
│ ├── websearch/ # 网页搜索 Agent
│ │ └── WebSearchReactAgent.java # 基于联网搜索的智能问答 Agent
│ └── pptx/ # PPT生成 Agent
│ ├── PPTBuilderAgent.java # PPT 生成核心 Agent
│ ├── PptIntentRecognizer.java # PPT 意图识别器
│ └── strategy/ # PPT 状态策略模式
│ ├── RequirementStrategy.java # 需求分析策略
│ ├── OutlineStrategy.java # 大纲生成策略
│ ├── SchemaStrategy.java # Schema生成策略
│ ├── TemplateStrategy.java # 模板选择策略
│ ├── SearchStrategy.java # 搜索策略
│ ├── RenderStrategy.java # 渲染策略
│ ├── SuccessStrategy.java # 成功策略
│ ├── FailedStrategy.java # 失败策略
│ ├── PptStateStrategy.java # 状态策略接口
│ ├── PptStateStrategyContext.java # 策略上下文
│ └── PptStateStrategyFactory.java # 策略工厂
│
├── controller/ # 控制器层
│ ├── AgentController.java # Agent 统一控制器(流式接口、停止接口)
│ ├── FileController.java # 文件控制器
│ └── SessionController.java # 会话控制器
│
├── service/ # 服务层
│ ├── AgentTaskManager.java # Agent任务管理器(任务注册、停止、并发控制)
│ ├── AiSessionService.java # AI会话服务(历史记录、问答保存)
│ ├── AiPptInstService.java # PPT实例服务
│ ├── AiPptTemplateService.java # PPT模板服务
│ ├── FileManageService.java # 文件管理服务
│ ├── FileParserService.java # 文件解析服务
│ ├── FileInfoService.java # 文件信息服务
│ ├── EmbeddingService.java # 向量化服务(RAG)
│ ├── MinioService.java # MinIO 对象存储服务
│ ├── PptPythonRenderService.java # PPT Python渲染服务
│ ├── PptPythonRenderServiceImpl.java
│ └── impl/ # 服务实现类
│ ├── AiSessionServiceImpl.java
│ ├── AiPptInstServiceImpl.java
│ ├── AiPptTemplateServiceImpl.java
│ └── FileInfoServiceImpl.java
│
├── mapper/ # MyBatis Mapper 接口
│ ├── AiSessionMapper.java # 会话数据访问
│ ├── AiFileInfoMapper.java # 文件信息数据访问
│ ├── AiPptInstMapper.java # PPT实例数据访问
│ └── AiPptTemplateMapper.java # PPT模板数据访问
│
├── entity/ # 实体类
│ ├── AiSession.java # AI会话实体
│ ├── AiFileInfo.java # AI文件信息实体
│ ├── SlideImage.java # 幻灯片图片实体
│ ├── OverAllState.java # 整体状态实体
│ ├── record/ # 记录相关实体
│ │ ├── AgentState.java # Agent状态
│ │ ├── RoundMode.java # 轮次模式枚举
│ │ ├── RoundState.java # 轮次状态
│ │ ├── PlanRoundState.java # 计划轮次状态
│ │ ├── PlanTask.java # 计划任务
│ │ ├── TaskResult.java # 任务结果
│ │ ├── ReactAgentResult.java # React Agent结果
│ │ ├── SimpleReactResult.java # Simple React结果
│ │ ├── CritiqueResult.java # 批评结果
│ │ ├── SearchResult.java # 搜索结果
│ │ ├── TemplateSelectionResult.java # 模板选择结果
│ │ ├── FileInfo.java # 文件信息
│ │ ├── pptx/ # PPT相关实体
│ │ │ ├── AiPptInst.java # PPT实例
│ │ │ ├── AiPptTemplate.java # PPT模板
│ │ │ ├── PptInstStatus.java # PPT实例状态枚举
│ │ │ ├── PptIntent.java # PPT意图枚举
│ │ │ ├── PptIntentResult.java # PPT意图结果
│ │ │ ├── PptSchema.java # PPT Schema
│ │ │ ├── PptPageType.java # PPT页面类型枚举
│ │ │ ├── Slide.java # 幻灯片
│ │ │ └── FieldData.java # 字段数据
│ └── vo/ # 值对象
│ ├── MessageVO.java # 消息VO
│ ├── PageResult.java # 分页结果
│ ├── SaveQuestionRequest.java # 保存问题请求
│ ├── UpdateAnswerRequest.java # 更新答案请求
│ ├── SessionListVO.java # 会话列表VO
│ └── SessionDetailVO.java # 会话详情VO
│
├── prompts/ # 提示词模块
│ ├── BaseAgentPrompts.java # 基础Agent提示词(角色定义、工具调用规则、输出规范)
│ ├── ReactAgentPrompts.java # React Agent提示词(联网搜索、文件问答等)
│ ├── PlanExecutePrompts.java # 计划-执行Agent提示词
│ └── PptBuilderPrompts.java # PPT构建Agent提示词
│
├── config/ # 配置类
│ ├── CorsConfig.java # 跨域配置
│ ├── MinioClientConfiguration.java # MinIO客户端配置
│ ├── MySQLDataSourceConfig.java # MySQL数据源配置
│ └── VectorStoreConfig.java # 向量存储配置(RAG)
│
├── common/ # 公共类
│ ├── AgentResponse.java # Agent统一响应格式(text/thinking/reference/error/recommend)
│ └── BaseResult.java # 基础响应结果
│
├── exception/ # 异常处理
│ └── GlobalExceptionHandler.java # 全局异常处理器
│
├── tool/ # 工具类
│ ├── FileContentService.java # 文件内容工具(Agent工具调用)
│ └── WeatherService.java # 天气查询工具
│
├── splitter/ # 文本分割器
│ └── OverlapParagraphTextSplitter.java # 带重叠的段落文本分割器(RAG)
│
└── utils/ # 工具类
├── AppContextClient.java # Spring ApplicationContext客户端
├── DynamicPgVectorStoreFactory.java # 动态PG Vector存储工厂
├── HtmlRenderService.java # HTML渲染服务
├── HtmlToPptService.java # HTML转PPT服务
├── HttpClientUtil.java # HTTP客户端工具
├── ImageGenerationService.java # 图片生成服务
└── ImageToPptService.java # 图片转PPT服务
学完能收获什么?
本课程以 DodoAgent 实战为核心,聚焦理论落地、架构设计、工程化提升三个目标,衔接前面课程中的理论知识,帮你实现从懂理论到会落地。
理论结合业务实现完整落地
将前面课程中介绍的 ReactAgent、PlanExecuteAgent 理论,结合 DodoAgent 四类业务场景进行落地,掌握“理论知识→业务分析→代码实现→功能验证”的完整闭环,比如用 ReactAgent 实现联网问答,用 PlanExecuteAgent 实现深度研究,让理论真正落地为实际的业务功能。
掌握架构设计与智能体选型
掌握智能体架构设计、模块拆分与数据流转逻辑;明确 Agentic Agent 与 Workflow Agent 选型边界,教会你如何使用Spring AI来高效编排你的智能体流程。
提升工程化能力
掌握Agent 开发的工程化能力:会话管理、历史记忆、掌握流式输出的启停控制、多阶段异步任务、模型上下文管理、重试机制、落地用户体验优化(三段式输出、文件-会话绑定等),打造好用的智能体。 综上,学完本课程,你将实现理论落地、架构设计、工程化能力的三重提升,具备独立开发生产级智能体的实战能力。