Deep Research 怎么才算 "Deep"
需求分析
在开发Deep Research系统时,遇到了一个核心问题:如何真正体现"Deep"的含义?通过分析现有的研究系统,发现"深度"主要体现在两个方面:
第一个方面:LLM对问题的理解深度
在反思阶段,LLM需要能够深入理解问题,准确识别研究中的不足之处。这不仅仅是简单的关键词匹配,而是需要对问题本质有深刻的理解,能够发现研究过程中的盲点和需要补充的方向。
第二个方面:资料搜索的深度
在搜索阶段,需要找到足够多、足够相关的资料。这里的"深"不仅指搜索范围要广,更重要的是围绕当前研究主题要足够深入。简单来说,不仅要找到相关的资料链接,还要能够深入提取每个链接中的关键信息。
技术选型
基于对需求的分析,选择了以下技术方案来实现深度搜索:
搜索广度:Tavily Search
选择了Tavily Search来保证搜索涵盖的范围足够广。Tavily Search能够返回大量的资料链接和链接内容总结,这为后续的深度提取提供了基础。
选择理由:
- 搜索覆盖面广,能够找到大量相关资源
- 提供链接摘要,便于快速判断相关性
- API接口稳定,易于集成
搜索深度:Tavily Extract
选择了Tavily Extract来保证搜索涵盖的资料足够深。Searcher Agent通过判断Search到的链接summary,能够知道是否需要对链接内容进行进一步的提取。
工作流程:
- 通过Tavily Search获取大量链接和摘要
- Searcher Agent分析摘要,判断哪些链接需要深度提取
- 对需要深度提取的链接调用Tavily Extract
- 获取完整的页面内容,提取关键信息
选择理由:
- 能够深入提取页面完整内容
- 与Tavily Search配合,形成"广度+深度"的搜索策略
- 支持按需提取,避免不必要的资源消耗
多模态资料处理
在搜索过程中,会遇到图片、音视频等多模态资料。对于这些资料,需要判断哪些是有效的,哪些需要进一步处理。
图片处理策略:
对于图片,需要判断哪些图片需要做OCR处理。判断依据包括:
- 图片的caption:如果图片有说明文字,说明图片可能包含重要信息
- 围绕图片的文本描述:如果图片周围的文本提到了图片内容,说明图片可能相关
- 预置网站固定位置的图片:比如文章中的图片,而不是网站icon。这需要识别图片在页面中的位置和上下文
实现思路:
对于网站多媒体资料的有效性判断,可以通过指定的知识库来保证。当需要判断时,根据网站host召回有效位置的描述信息。这样可以为不同网站定制不同的判断规则,提高判断准确性。
技术选型:
- 只保留文本资料:对于音视频等无法直接处理的资料,暂时跳过
- 图片OCR:对于判断为有效的图片,使用OCR技术提取文本内容
- 知识库支持:通过RAG技术描述网站结构信息,辅助判断
网站结构信息支持:RAG
为了帮助Searcher Agent判断哪些链接或页面信息是有效的,哪些链接是无效的,设计了RAG机制来描述某些网站的结构信息。
设计思路:
通过RAG技术,可以为常见网站建立结构信息知识库。当Searcher Agent遇到这些网站时,可以查询知识库获取网站结构信息,从而更准确地判断:
- 哪些链接是导航链接(通常无效)
- 哪些链接是内容链接(通常有效)
- 哪些页面区域包含主要内容
- 哪些页面区域是广告或无关信息
实现优势:
- 提高链接有效性判断的准确性
- 减少无效内容的提取和处理
- 可以根据网站特点定制提取策略
架构设计
基于以上技术选型,设计了以下架构:
整体架构
反思阶段] B --> C[理解问题深度] C --> D[Searcher Agent
搜索阶段] D --> E[Tavily Search
广度搜索] E --> F[链接摘要分析] F --> G{需要深度提取?} G -->|是| H[Tavily Extract
深度提取] G -->|否| I[多模态资料判断] H --> I I --> J{是否为有效图片?} J -->|是| K[OCR处理] J -->|否| L[网站结构RAG查询] K --> M[提取文本内容] L --> N[判断链接有效性] N --> M M --> O[整合搜索结果] O --> P[返回深度搜索结果] style B fill:#e3f2fd style D fill:#fff3e0 style E fill:#f3e5f5 style H fill:#e8f5e9 style L fill:#fce4ec
核心组件设计
1. Reflection Agent(反思阶段)
职责:
- 深入理解用户查询的问题本质
- 识别研究中的不足之处
- 生成深度搜索策略
设计要点:
- 使用高质量的LLM模型,确保理解能力
- 设计反思提示词,引导模型深入思考
- 支持多轮反思,逐步深入
2. Searcher Agent(搜索阶段)
职责:
- 执行广度搜索(Tavily Search)
- 分析链接摘要,判断是否需要深度提取
- 执行深度提取(Tavily Extract)
- 判断多模态资料的有效性
- 查询网站结构信息
设计要点:
- 工具函数设计:
tavily_search(),tavily_extract(),check_image_validity(),query_site_structure() - 决策逻辑:基于链接摘要和网站结构信息,智能判断是否需要深度提取
- 资源优化:避免对无效链接进行深度提取
3. 多模态资料处理模块
职责:
- 识别页面中的图片、音视频等资料
- 判断资料的有效性
- 对有效图片进行OCR处理
设计要点:
- 图片有效性判断:基于caption、上下文文本、网站结构信息
- OCR处理:使用OCR服务提取图片中的文本
- 知识库支持:通过RAG查询网站结构信息
4. 网站结构RAG模块
职责:
- 存储常见网站的结构信息
- 根据网站host查询结构信息
- 辅助Searcher Agent判断链接和内容有效性
设计要点:
- 知识库设计:为每个网站存储结构描述信息
- 查询接口:根据host快速查询结构信息
- 扩展性:支持动态添加新网站的结构信息
实现过程
阶段1:基础搜索功能
首先实现了基础的搜索功能,使用Tavily Search获取大量链接和摘要。这个阶段主要验证了搜索API的可用性和返回数据的质量。
遇到的问题:
- 返回的链接数量过多,需要筛选
- 链接摘要质量参差不齐,有些摘要无法准确反映内容
解决方案:
- 设计链接相关性评分机制
- 基于摘要质量进行初步筛选
- 为后续深度提取做准备
阶段2:深度提取功能
在基础搜索的基础上,实现了深度提取功能。Searcher Agent分析链接摘要,判断哪些链接需要深度提取。
遇到的问题:
- 如何准确判断是否需要深度提取?
- 深度提取会消耗更多资源,如何平衡?
解决方案:
- 设计判断规则:基于摘要长度、关键词匹配度、网站类型等
- 设置提取阈值:只对高相关性的链接进行深度提取
- 实现缓存机制:避免重复提取相同链接
阶段3:多模态资料处理
实现了多模态资料的处理功能,特别是图片的有效性判断和OCR处理。
遇到的问题:
- 如何准确判断图片是否有效?
- OCR处理成本较高,如何优化?
解决方案:
- 设计多维度判断:caption、上下文文本、网站结构信息
- 实现知识库支持:为常见网站建立结构信息
- 优化OCR调用:只对判断为有效的图片进行OCR处理
阶段4:网站结构RAG支持
最后实现了网站结构RAG支持,帮助Searcher Agent更准确地判断链接和内容有效性。
遇到的问题:
- 如何描述网站结构信息?
- 如何快速查询和匹配?
解决方案:
- 设计结构描述格式:使用结构化数据描述网站布局
- 实现RAG查询:根据host快速召回结构信息
- 支持动态扩展:可以随时添加新网站的结构信息
关键技术细节
链接深度提取判断逻辑
设计了以下判断逻辑来决定是否需要深度提取:
-
摘要质量评估
- 摘要长度:过短的摘要可能信息不足
- 关键词匹配:摘要中是否包含查询关键词
- 摘要完整性:摘要是否完整描述了页面内容
-
网站类型判断
- 新闻网站:通常需要深度提取
- 博客网站:根据摘要质量决定
- 文档网站:通常需要深度提取
- 社交媒体:通常不需要深度提取
-
相关性评分
- 计算摘要与查询的相关性评分
- 设置阈值,只对高相关性链接进行深度提取
图片有效性判断逻辑
设计了多维度判断机制:
-
Caption检查
- 检查图片是否有说明文字
- 分析caption与查询的相关性
-
上下文文本分析
- 分析图片周围的文本内容
- 判断文本是否提到了图片内容
- 评估文本与查询的相关性
-
网站结构信息
- 查询网站结构知识库
- 判断图片在页面中的位置
- 识别是否为文章内容图片
-
预置规则
- 为常见网站设置固定规则
- 例如:文章中的图片通常有效,导航栏图片通常无效
网站结构RAG设计
知识库结构:
为每个网站存储以下信息:
- Host信息:网站域名
- 页面结构:主要内容区域、导航区域、广告区域等
- 链接规则:哪些链接是内容链接,哪些是导航链接
- 图片规则:哪些位置的图片通常是有效的
查询机制:
当Searcher Agent遇到某个网站时:
- 提取host信息
- 查询知识库获取结构信息
- 根据结构信息判断链接和内容有效性
- 如果没有找到结构信息,使用默认规则
遇到的问题和解决方案
问题1:搜索范围与深度的平衡
问题描述: 在实现过程中,发现如果对所有链接都进行深度提取,会消耗大量资源,而且很多链接可能并不相关。但如果只进行广度搜索,又可能遗漏重要信息。
解决方案: 设计了分层搜索策略:
- 第一层:广度搜索,获取大量链接和摘要
- 第二层:智能筛选,基于摘要质量判断是否需要深度提取
- 第三层:深度提取,只对高相关性链接进行完整内容提取
这样既保证了搜索的广度,又保证了关键信息的深度。
问题2:多模态资料处理成本
问题描述: OCR处理成本较高,如果对所有图片都进行OCR,会大幅增加系统成本。
解决方案: 设计了智能判断机制:
- 先判断图片是否有效
- 只对判断为有效的图片进行OCR处理
- 使用知识库和上下文信息提高判断准确性
- 实现OCR结果缓存,避免重复处理
问题3:网站结构信息的维护
问题描述: 不同网站的结构差异很大,如何维护网站结构信息是一个挑战。
解决方案: 设计了可扩展的知识库机制:
- 为常见网站建立结构信息
- 支持动态添加新网站的结构信息
- 使用RAG技术,可以根据网站特点自动学习结构信息
- 提供默认规则,对于未知网站使用通用规则
优化方向
短期优化
-
提高判断准确性
- 优化链接深度提取的判断逻辑
- 改进图片有效性判断的准确性
- 完善网站结构信息的描述
-
性能优化
- 实现更智能的缓存机制
- 优化OCR调用频率
- 减少不必要的深度提取
-
扩展性提升
- 支持更多类型的多模态资料
- 扩展网站结构知识库
- 支持自定义判断规则
长期优化
-
智能化提升
- 使用机器学习模型优化判断逻辑
- 自动学习网站结构信息
- 根据历史数据优化搜索策略
-
多模态支持
- 支持音视频内容的处理
- 支持更多类型的多媒体资料
- 实现多模态内容的智能提取
-
知识库扩展
- 建立更完善的网站结构知识库
- 支持社区贡献结构信息
- 实现知识库的自动更新机制