Skip to content

Latest commit

 

History

History
62 lines (48 loc) · 5.06 KB

File metadata and controls

62 lines (48 loc) · 5.06 KB

深度研究(Deep Research)设计说明

前置调研结论摘录见文末。本功能在现有 chat 链路上以最小改动接入。

1. 目标

在聊天里提供一个「深度研究」开关:开启后,模型会联网多步检索、按需深读网页,最终产出一份基于真实来源、带内联引用的结构化报告;研究过程(检索了什么、读了哪些来源)对用户可见

2. 路线选择(对应调研)

决策 选择 依据
信息来源 联网搜索(可扩展到文档) 用户选定;deep research 的核心是外部实时资料
编排方式 AI SDK v7 多步工具循环(streamText + tools + stopWhen 与现有架构一致、改动最小、流式与过程可见天然支持
搜索 provider AnySearch REST Search 返回结构化结果,MCP Extract 深读 HTML;无 Key 时可匿名使用
停机 stepCountIs(RESEARCH_MAX_STEPS) 有工具必须设停止条件,防无限循环/成本失控
过程可见 工具调用渲染为检索卡片 + 来源链接 assistant-ui 的 tool-call 渲染天然提供;再加自定义 UI 美化
引用溯源 系统提示要求内联 markdown 链接 + 末尾 Sources 模型基于返回的来源 URL 回填引用,链接可点击核对

3. 数据流

composer「深度研究」开关(useResearchMode)
   │ prepareSendMessagesRequest 注入 body.deepResearch
   ▼
/api/chat  ── deepResearch=true ──────────────────┐
   │  system = 研究提示;tools += {webSearch, readUrl};stopWhen = 更高步数
   ▼
streamText 多步循环:模型自主 搜索→(深读)→再搜索→…→综合报告
   │  每次工具调用与结果流式回传
   ▼
assistant-ui:webSearch/readUrl 渲染为检索卡片(过程可见),最终报告为 assistant 文本
             正文里的来源链接经 markdown 渲染器在新标签打开

4. 关键文件

  • lib/chat/research-mode.ts:zustand 开关 store(composer 与 transport 共用)。
  • app/page.tsx:自定义 AssistantChatTransport({ prepareSendMessagesRequest }),把开关状态随每条消息发给后端(用 getState() 读发送时的最新值)。
  • components/assistant-ui/deep-research-toggle.tsx:composer 左下角开关。
  • lib/ai/search.ts:AnySearch Web 搜索/抽取适配器;API Key 可选,支持匿名访问。
  • lib/chat/research-tools.tswebSearch / readUrl 两个后端工具(zod inputSchema)。
  • constants/research.ts:最大步数、结果数、抽取字符上限、研究系统提示。
  • app/api/chat/route.tsdeepResearch 分支——注入工具、系统提示并放宽步数。
  • components/assistant-ui/research-tool.tsx:检索/深读的过程可视化 UI。

5. 健壮性与取舍

  • 停机三重意识:步数上限(RESEARCH_MAX_STEPS)是硬兜底;系统提示要求「检索有节制」;工具单次结果数/抽取字符有上限,控制上下文与成本。
  • 匿名回退:未配置 ANYSEARCH_API_KEY 时仍挂载工具并使用 AnySearch 匿名额度;配置 Key 后自动发送 Bearer 认证。
  • 引用:一期用「系统提示 + 内联 markdown 链接」实现可溯源引用(轻量、够用)。更强的结构化引用(Output.objectcitations[]、逐结论 {claim,url,quote} 校验)作为后续增强项。
  • 抓取正文:serverless 下不自建 jsdom/readability,直接用 AnySearch MCP extract 托管抽取;仅支持 HTML 页面。
  • 未做(可扩展):查询分解为显式的并行 planQueries 工具、跨轮 URL 去重、反思校验一步、把已上传文档也纳入研究来源(与现有 pgvector 融合)。

6. 调研结论摘录

  • 架构范式参考 dzhng/deep-research(breadth/depth 递归 + 硬停机)与 nickscamara/open-deep-research(同 Next.js + AI SDK)。
  • 搜索 provider:AnySearch,REST Search 提供结构化搜索结果,MCP extract 补抓 HTML 正文;Exa/Firecrawl 可作为后续备选。
  • AI SDK v7:有工具必须stopWhenprepareStep 可分阶段(先强制搜索、末段强制产报告);结构化报告可用 Output.object
  • 质量要点:层内并行、层间串行;结构化保存 {claim,url,quote} 做可溯源引用;末段反思校验压幻觉。

来源:dzhng/deep-research、nickscamara/open-deep-research、AnySearch API/Skill 文档、AI SDK Loop Control 文档等(详见调研原始材料)。