本篇为spring-ai-alibaba学习系列第四十一篇

DeepResearch 定位

大模型问答,简单RAG,DeepResearch 三者像是专业度不断提高的搜索引擎

大模型问答,知识取决于训练截止日期,无法获取最新数据;细分领域的专业知识储备也比较少;

RAG 解决了上述问题,通过外挂知识库解决了大模型知识时效性和专业性的问题,但是对问题的挖掘不够深入,仅仅是泛泛的回答

而 DeepResearch 则更像是一种高级 RAG,会对问题进行分类,不同类型的问题可能会查询不同的知识库,会对问题进行背景调查,会生成研究计划及具体步骤,按步骤分步执行等等 

类比

如果把大模型问答比作闭卷考试,仅能通过记忆来回答

那 RAG 就像是开卷考试,可以查询手头资料,大多是直接相关的内容

而 DeepResearch 则像是毕业论文,需要查阅各种资料,包括一些间接相关的内容

DeepResearch 简介

DeepResearch 模块是一个基于图核框架的自动化深度研究系统,旨在通过多智能体协作、多源搜索和报告生成来完成复杂的调研任务。该系统利用状态图(StateGraph)来编排和管理研究流程,支持长时间运行任务的中断与恢复,并通过前端UI提供实时的流式响应。

DeepResearch 核心流程

DeepResearch 将深度研究任务拆解为问题分析、背景调查、制定研究计划、执行研究计划、生成报告等步骤,并将其封装为一个个节点,通过流程图来控制节点的执行和回退,实现了自动化深度研究的完整流程。

具体流程如下

1)对用户问题进行重写和扩展

2)检索自建知识库

3)背景调查:对问题进行分类,根据分类不同选择不同的智能体进行搜索

4)制定研究计划:包含若干步骤

5)执行研究计划:根据步骤内容不同,选择合适的智能体进行处理

6)检索专业知识库:根据用户问题检索对应的专业知识库

7)生成报告

ps:个人感觉检索专业知识库应该向前移动,跟检索自建知识库并行

项目结构

DeepResearch 模块是 spring-ai-alibaba 项目中的一个独立子模块,专注于实现深度研究功能。其主要结构包括后端服务和前端UI两大部分。

后端服务位于 src/main/java 目录下,核心功能分布在 node(节点实现)、controller(API控制器)、config(配置类)、service(业务服务)等包中。node 包包含了核心节点的实现。controller 包中的 ChatController 负责处理前端的 SSE(Server-Sent Events)流式请求。config 包中的 DeepResearchConfiguration 是整个流程的配置中心,负责构建和编译状态图。

前端UI位于 ui-vue3 目录下,是一个基于 Vue 3 和 TypeScript 构建的单页应用(SPA)。src/components/chat/index.vue 是核心的聊天界面组件,负责与后端建立 SSE 连接并实时渲染流式响应。

架构概述

该系统的架构基于一个有向无环图(DAG),由 StateGraph 表示。整个研究流程被分解为一系列节点(Node),节点之间通过边(Edge)连接,形成一个可编排的工作流。系统通过ChatController 接收前端请求,启动一个 CompiledGraph 实例来执行该工作流。每个节点的输出会更新共享的 OverAllState 状态,后续节点可以读取这些状态进行处理。结果通过SSE流式传输给前端,实现低延迟的实时交互。

用户扩展点

DeepResearch 提供了一个深度研究的框架,用户可以根据自身需求,针对性的扩展其中的关键环节来适配当前业务。

问题分类类型:当前 DeepResearch 将问题分为学术研究、生活旅游、百科、数据分析、通用研究五个类别并配置了对应的研究智能体,用户可以修改这部分内容来适配自己的领域分类。

研究智能体的底层搜索平台:每一类研究智能体可以选择多个不同底层搜索平台,例如生活旅游类支持opentripmap 和 tripadvisor,通用研究支持百度搜索、tavily搜索等,用户可以根据设置的问题分类来添加对应的底层搜索平台。

自建知识库:用户可以自行搭建本地知识库,规划填充自身领域内的文献资料或业务规则。

专业知识库:可以参考的公开的外部知识库服务,可以是知识库,也可以是检索服务或某领域搜索引擎。

其他:剩余的基本都是使用框架的配置来进行微调,例如是否开启某项功能,计划中包含的最大步骤数等。

Logo

更多推荐