dodo-agent

整体架构与功能点介绍

这节课我们正式开启智能体应用实战课程的学习。作为整个课程的开篇,这节课我会带大家全面认识这个仿豆包的智能体应用平台(DodoAgent 豆豆),从项目定位、技术架构到核心功能,帮你建立起对整个项目实战课程的完整认知框架。 为什么要做…

TL;DR

这节课我们正式开启智能体应用实战课程的学习。作为整个课程的开篇,这节课我会带大家全面认识这个仿豆包的智能体应用平台(DodoAgent 豆豆),从项目定位、技术架构到核心功能,帮你建立起对整个项目实战课程的完整认知框架。 为什么要做…

这节课我们正式开启智能体应用实战课程的学习。作为整个课程的开篇,这节课我会带大家全面认识这个仿豆包的智能体应用平台(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 开发的工程化能力:会话管理、历史记忆、掌握流式输出的启停控制、多阶段异步任务、模型上下文管理、重试机制、落地用户体验优化(三段式输出、文件-会话绑定等),打造好用的智能体。 综上,学完本课程,你将实现理论落地、架构设计、工程化能力的三重提升,具备独立开发生产级智能体的实战能力。

版本提示

模型、框架与接口会持续变化。涉及版本号、参数与生产配置时,请在实践前对照对应官方文档。

LLMentor系统化学习大模型应用工程

内容来自个人课程知识库备份,并经过结构化整理。技术版本持续演进,生产使用前请结合官方文档验证。