深度研究代理
本教程演示如何使用 Shannon 的 ResearchWorkflow 产出全面且带有引用的研究报告。你将学到
- 多阶段流程:记忆检索 → 细化 → 分解 → 执行 → 引用收集 → 缺口补全 → 综合 → 校验
- 自适应模式:根据复杂度与依赖选择 React、并行、混合
- 进阶能力:实体过滤、缺口补全、上下文压缩、按任务 React 模式
- 质量控制:引用要求、覆盖率校验、论断校验
- 语言匹配:自动使用与用户查询相同的语言回复
前置条件
- 已运行的 Shannon 堆栈(Docker Compose)
- Gateway 可通过
http://localhost:8080访问 - 鉴权默认:
- Docker Compose:默认关闭鉴权(
GATEWAY_SKIP_AUTH=1)。 - 本地构建:默认开启鉴权。可设置
GATEWAY_SKIP_AUTH=1关闭;或在请求中加入 API key 头-H "X-API-Key: $API_KEY"。
- Docker Compose:默认关闭鉴权(
工作流架构
ResearchWorkflow 通过多个阶段协同,产出高质量且可溯源的研究结果:- 记忆感知:利用会话历史进行上下文研究
- 实体聚焦:检测到实体时对结果进行过滤(如特定公司/产品)
- 自我纠错:缺口补全保障覆盖完整
- 质量约束:每个研究领域均需满足(≥600 字符、每节 ≥2 处内联引用)
快速开始(HTTP)
流式事件(SSE)
LLM_OUTPUT:最终综合文本DATA_PROCESSING:进度/用量WORKFLOW_COMPLETED:完成
执行模式
Shannon 会基于任务复杂度与依赖关系,自动选择最优执行模式:React 模式(复杂度 < 0.5)
面向简单研究的“思考→行动→观察”循环。并行模式(无依赖)
用于多维度主题的并发子任务执行。web_search 以获取引用。
混合模式(存在依赖)
拓扑排序 + 汇聚/分发,顺序执行带依赖的研究。按任务 React(深度研究模式)
为高复杂度研究在每个子任务中运行小型 ReAct 循环。 触发条件:- 手动:
context.react_per_task = true - 自动:复杂度 > 0.7 且策略为
{deep, academic}
策略预设
预设提供不同研究深度的“意见化”默认值。Gateway 会校验并将其映射到工作流上下文。quick_research_agent 提示,始终采用并行执行路径,跳过迭代覆盖循环和缺口补全阶段——专为无需深度的快速摘要场景优化。
可用预设:quick | standard | deep | academic
| 策略 | react_max_iterations | max_concurrent_agents | verification | gap_filling |
|---|---|---|---|---|
| quick | 2 | 3 | ✗ | ✗ |
| standard | 3 | 5 | ✓ | ✓ (max_gaps: 3, max_iterations: 2) |
| deep | 4 | 6 | ✓ | ✓ (max_gaps: 2, max_iterations: 2) |
| academic | 5 | 8 | ✓ | ✓ (max_gaps: 3, max_iterations: 2) |
max_concurrent_agents(1–20):控制并行子任务的最大并发数(仅在多子任务执行时生效)react_max_iterations(2–8,默认 5):按任务 ReAct 循环的迭代深度(独立参数,无前置要求)
react_per_task(布尔):为每个子任务启用小型 ReAct 循环(复杂度 > 0.7 且 deep/academic 时自动启用)enable_verification(布尔):启用与引用对照的论断校验budget_agent_max(整数):可选的单代理 token 预算(带强制)
gap_filling_enabled(布尔):启用/禁用缺口补全gap_filling_max_gaps(1–20):最多检测多少个缺口gap_filling_max_iterations(1–5):每个缺口的最大重试次数gap_filling_check_citations(布尔):检查引用密度作为缺口指标
默认预设:
standard(未指定时)。若上下文已有值,预设不会覆盖。Gateway 在 /api/v1/tasks 与 /api/v1/tasks/stream 顶层接受 research_strategy 并映射到上下文。预设默认值来自 config/research_strategies.yaml。快速策略会跳过迭代覆盖循环和缺口补全阶段。Python SDK
CLI
编程方式
响应格式
GET /api/v1/tasks/{id} 的典型状态载荷包含综合结果、元数据(引用、校验)、模型/提供商与时间戳。
result为最终综合的 Markdown/文本。metadata.citations为已收集来源(所有来源都会出现在结果的“Sources”部分)。metadata.verification在启用并完成校验时出现。- 在 Gateway 的状态响应中,
created_at/updated_at反映响应时间;权威的运行时间与统计持久化在数据库(可通过事件/时间线查看)。 usage汇总 token 用量,并可能包含费用。Gateway 状态响应可能使用estimated_cost字段;工作流元数据中可能包含cost_usd。model_used与provider反映综合阶段使用的模型/提供商。
进阶能力
记忆检索
分层记忆(优先):- 结合近期(最近 5 条)与语义检索(Top 5,相似度 ≥ 0.75)
- 支持多轮上下文一致性
- 回退:会话记忆(最近 20 条)
- 会话消息数 > 20 时自动触发
- 使用 LLM 总结会话(目标:窗口的 ~37.5%)
- 防止长对话导致上下文溢出
实体过滤
当检测到特定实体(如公司 “Acme Analytics”)时: 查询细化:- 识别规范名称、精确搜索串、官方域、消歧词
- 例:
canonical_name: "Acme Analytics",official_domains: ["acme.com"]
- 评分:域名匹配 +0.6、URL 含别名 +0.4、标题/摘要/来源含别名 +0.4
- 阈值:0.3(任一命中即可通过)
- 安全底线:minKeep=8(按质量×可信度回填)
- 官方域始终保留(绕过阈值)
- 过滤与实体无关的工具结果(如避免 “Acme Mind” 与 “Mind Inc” 混淆)
- 保留仅推理输出;删除明显偏离实体的工具型结果
缺口补全
自动检测(最多 2 轮):- 缺失小节标题(
### 领域名) - 缺口提示语(如 “limited information”“insufficient data” 等)
- 引用密度低(每节 < 2 处内联引用)
- 生成聚焦查询:
"Find detailed information about: <area>" - 执行聚焦型 ReAct 循环(每个缺口最多 3 次迭代)
- 重新收集引用(与原始引用全局去重)
- 使用大模型层级重新综合
缺口示例场景
缺口示例场景
引用
收集:- 来自
web_search与web_fetch工具的输出 - URL/DOI 规范化与去重
- 评分:质量(时效性+完整性)× 可信度(域名声誉)
- 多样性约束(每个域最多 3 条)
- 每份报告至少 6 处内联引用(受可用数量限制,最低 3)
- 每个领域至少 2 处内联引用
- Sources 部分列出所有收集的引用:
- “Used inline”(正文中使用)
- “Additional source”(收集但未在正文使用)
综合续写
触发:模型提前停止且输出不完整 检测(looksComplete 校验):
- 必须以句子标点结尾(
.,!,?,。) - 结尾不得为连接词(
and, but, however, therefore...) - 每个研究领域均有小节,且满足 ≥600 字符与 ≥2 处内联引用
- 自适应余量:
min(有效最大补全的 25%, 300 tokens) - 提示:
Continue from last sentence; maintain headings and citation style - 使用大模型层级保证质量(如 gpt-4.1/opus)
论断校验
论断抽取:- 从综合结果中识别事实性陈述
- 与已收集引用进行交叉验证
- 按引用可信度加权
- 标记冲突与未支撑项
- 提供逐条论断的支撑/冲突引用明细
enable_verification: true 写入上下文。
语言匹配
- 通过启发式检测用户查询语言
- 综合结果使用相同语言输出
- 覆盖英文、中文、日文、韩文、阿拉伯文、俄文、西班牙文、法文、德文(启发式)
- 使用通用指令以增强跨语言鲁棒性
行为保障
记忆
可用时注入分层记忆(近期 + 语义)
压缩
会话消息超过 20 条时自动压缩,避免上下文溢出
覆盖
每个研究领域提供专属小节,最低 600 字符与 2 处引用
缺口补全
自动检测并二次检索覆盖不足区域(最多 2 轮)
语言
输出语言与用户查询一致
成本
统计并持久化 token 与成本;可按代理设置预算并强制执行
续写
仅在综合不完整且容量接近耗尽时触发
实体聚焦
检测到实体时过滤引用并修剪离题结果
使用建议
- 入门
- 优化
- 多轮研究
- 设置
context.force_research=true以确保路由到 ResearchWorkflow - 从
standard预设开始,按结果微调 - 通过 SSE 观察进度与用量
故障排查
校验与守护:- 非法
web_search的search_type会被清洗(回退到auto) - 重复引用通过 URL/DOI 规范化去重
- 存在实体提及时会进行实体检测与细化
- 记忆检索:
memory_retrieval_v1 - 会话记忆回退:
session_memory_v1 - 上下文压缩:
context_compress_v1 - 缺口补全:
gap_filling_v1
下一步
API 参考
REST API 文档
自定义工具
添加自定义工具
厂商适配
厂商适配集成