跳转到主要内容

人机协同审核

Shannon 的人机协同(HITL)审核系统允许你在工作流开始执行之前,审核和优化 AI 生成的研究计划。这对于深度研究任务特别有用——你可以引导研究方向、添加约束,或确保代理聚焦于最重要的内容。

你将学到

  • HITL 审核周期的工作原理(计划生成、反馈、批准)
  • 在任务提交时启用 HITL 审核
  • 与审核 API 交互(获取状态、发送反馈、批准)
  • 基于版本号的乐观并发控制
  • 审核过程中发出的 SSE 事件
  • Python SDK 中的 HITL 审核用法
  • 配置选项与超时设置

前置条件

  • 已运行的 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"

HITL 审核流程

HITL 审核在任务提交与研究执行之间插入人工检查点:
1

提交启用审核的任务

在上下文中添加 require_review: true(或 review_plan: "manual")提交研究任务。
2

AI 生成初始研究计划

LLM 服务根据查询生成研究计划。工作流暂停,等待人工输入。
3

审核并提供反馈

通过审核 API 查看提议的计划,发送反馈进行迭代优化(最多 10 轮)。
4

批准计划

满意后批准计划。工作流恢复执行已确认的研究方向。
5

研究执行

ResearchWorkflow 以批准的计划作为上下文运行,产出聚焦的、带引用的研究报告。

架构

启用 HITL 审核

在提交研究任务时,将 require_review: true 添加到任务上下文中:
HITL 审核需要 force_research: true,因为审核流程属于 ResearchWorkflow 的一部分。如果不设置此参数,协调器可能将任务路由到不支持审核的其他工作流。
另一个上下文键 review_plan: "manual" 也可接受,行为完全相同。桌面应用在用户对深度研究关闭自动批准时使用 require_review: true

获取审核状态

提交后轮询以等待审核计划就绪。工作流通过 LLM 生成初始计划并将其存储在 Redis 中。

响应

响应包含一个 ETag 头,其中包含当前版本号,用于乐观并发控制。

发送反馈

发送反馈来优化计划。网关将你的消息转发给 LLM,LLM 根据你的输入生成更新的计划。

反馈响应

intent 字段表示 LLM 的评估:
  • "feedback" — LLM 正在提出澄清问题(尚无可执行计划)
  • "ready" — LLM 已提出可执行的研究方向

并发控制

If-Match 头(curl)或 version 参数(SDK)启用乐观并发。如果自上次读取以来另一个请求修改了状态,服务器返回 409 Conflict
分布式 Redis 锁还可防止两个反馈请求在 LLM 调用期间竞争。

轮次限制

最多允许 10 轮反馈。在最后一轮,LLM 被指示生成明确的计划。超过此限制后,仅接受批准操作:

批准计划

计划满意后,批准以恢复工作流执行:

批准响应

批准后:
  1. 网关向等待中的工作流发送 Temporal Signal
  2. 已确认的计划和审核对话被注入任务上下文
  3. ResearchWorkflow 按批准的研究方向继续执行
  4. SSE 发出 RESEARCH_PLAN_APPROVED 事件
如果 current_plan 为空,则无法批准。LLM 必须至少生成过一个意图为 "ready" 的计划。如果在没有计划的情况下尝试批准,服务器返回:

SSE 事件

HITL 审核过程中发出专用 SSE 事件,可通过流式端点消费:
这些事件发布到 Redis 事件流,使审核对话在会话历史和页面刷新后可见。

配置

审核超时

工作流默认等待审核完成的时间上限为 15 分钟。超时后工作流终止:
可通过 review_timeout 上下文参数(单位:秒)自定义超时:

审批工作流(独立功能)

Shannon 还有一个独立的审批工作流,用于非研究任务。它在 features.yaml 中配置,根据复杂度阈值或危险工具使用情况触发:
审批工作流使用不同的端点(POST /api/v1/approvals/decision),与 HITL 研究审核相互独立。详情参见审批任务 API 参考

Python SDK 参考

Shannon Python SDK 提供了 HITL 审核专用方法:

异步 SDK

最佳实践

使用版本跟踪

始终传递 If-Match 头(或 SDK 中的 version 参数)以防止竞态条件。当多个用户或标签页可能与同一审核交互时尤为重要。

设置合理的超时

默认 15 分钟超时适用于大多数交互场景。对于异步审核流程(如邮件审批),请增加 review_timeout

等待 intent: ready

批准前确保 LLM 已生成意图为 "ready" 的计划。意图为 "feedback" 的轮次表示 LLM 需要更多信息。

配合研究策略使用

HITL 审核与所有研究策略预设(quickstandarddeepacademic)兼容。批准的计划将指导后续研究执行。

故障排查

审核状态存储在 Redis 中,TTL 为 20 分钟(审核超时 + 5 分钟缓冲)。超时后审核会话不再可访问。重新提交任务以启动新的审核。
表示自上次读取以来另一个请求修改了审核状态,或另一个反馈请求正在进行中。通过 GET /review 重新获取当前状态,然后使用最新版本重试。
LLM 仅提出了澄清问题(intent: "feedback"),尚未生成可执行计划。发送至少一条反馈消息,以便 LLM 生成具体的研究方向。
审核用时超过配置的超时时间(默认:15 分钟)。在任务上下文中增加 review_timeout,或更快地完成批准。

后续步骤

深度研究

构建全面的研究报告

审批任务 API

非研究任务的审批工作流

HITL 审核 API

审核端点完整 API 参考