前置调研结论摘录见文末。本功能在现有 chat 链路上以最小改动接入。
在聊天里提供一个「深度研究」开关:开启后,模型会联网多步检索、按需深读网页,最终产出一份基于真实来源、带内联引用的结构化报告;研究过程(检索了什么、读了哪些来源)对用户可见。
| 决策 | 选择 | 依据 |
|---|---|---|
| 信息来源 | 联网搜索(可扩展到文档) | 用户选定;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 回填引用,链接可点击核对 |
composer「深度研究」开关(useResearchMode)
│ prepareSendMessagesRequest 注入 body.deepResearch
▼
/api/chat ── deepResearch=true ──────────────────┐
│ system = 研究提示;tools += {webSearch, readUrl};stopWhen = 更高步数
▼
streamText 多步循环:模型自主 搜索→(深读)→再搜索→…→综合报告
│ 每次工具调用与结果流式回传
▼
assistant-ui:webSearch/readUrl 渲染为检索卡片(过程可见),最终报告为 assistant 文本
正文里的来源链接经 markdown 渲染器在新标签打开
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.ts:webSearch/readUrl两个后端工具(zod inputSchema)。constants/research.ts:最大步数、结果数、抽取字符上限、研究系统提示。app/api/chat/route.ts:deepResearch分支——注入工具、系统提示并放宽步数。components/assistant-ui/research-tool.tsx:检索/深读的过程可视化 UI。
- 停机三重意识:步数上限(
RESEARCH_MAX_STEPS)是硬兜底;系统提示要求「检索有节制」;工具单次结果数/抽取字符有上限,控制上下文与成本。 - 匿名回退:未配置
ANYSEARCH_API_KEY时仍挂载工具并使用 AnySearch 匿名额度;配置 Key 后自动发送 Bearer 认证。 - 引用:一期用「系统提示 + 内联 markdown 链接」实现可溯源引用(轻量、够用)。更强的结构化引用(
Output.object的citations[]、逐结论{claim,url,quote}校验)作为后续增强项。 - 抓取正文:serverless 下不自建 jsdom/readability,直接用 AnySearch MCP
extract托管抽取;仅支持 HTML 页面。 - 未做(可扩展):查询分解为显式的并行
planQueries工具、跨轮 URL 去重、反思校验一步、把已上传文档也纳入研究来源(与现有 pgvector 融合)。
- 架构范式参考 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:有工具必须配
stopWhen;prepareStep可分阶段(先强制搜索、末段强制产报告);结构化报告可用Output.object。 - 质量要点:层内并行、层间串行;结构化保存
{claim,url,quote}做可溯源引用;末段反思校验压幻觉。
来源:dzhng/deep-research、nickscamara/open-deep-research、AnySearch API/Skill 文档、AI SDK Loop Control 文档等(详见调研原始材料)。