SuperAPI AI 工具集

dym-harness-sdk-interventions

智能体与模型

查看项目

更新于 10-18 01:23

技能介绍

该技能为 Strands harness 的工具调用提供拦截与审批机制,通过 interventions 参数配置。

用途

当需要让 agent 在执行危险工具前先询问人工、自动分类风险,或遵循 Cedar 策略时使用。与普通 hook 拦截不同,处理器返回带类型的决策:Proceed、Deny、Guide、Interrupt、Transform;注册表按优先级合并:Deny > Interrupt > Transform > Guide > Proceed。Deny 会截断后续链,Guide 会累积反馈,并共享审计日志。

主要能力

字符串语法是确定性的,不猜测内容(harness-py/src/strands_harness/interventions.py):

  • "off" / None:无处理器
  • "ask":HumanInTheLoop(ask=...),每次调用都询问人工
  • "smart":HumanInTheLoop(classifier=True),由 LLM 分类风险,仅对标记的调用询问
  • 以 .cedar 结尾的字符串:CedarAuthorization(policies=<file>),需 pip install 'strands-agents[cedar]'
  • 其他字符串:作为风险分类器的文字提示
  • InterventionHandler 实例:直接使用,不做转换

可叠加多个不同类别的层:

create_harness(interventions=["policies/tools.cedar", "smart"])

使用方式

通过 create_harness 的 interventions 参数传入上述值。错误行为示例(测量于 2026-09-28,rc 0):

create_harness(session=False, memory=False, interventions=["ask", "ask"])

ValueError: Two interventions share the handler name 'strands:human-in-the-loop' ...

create_harness(session=False, memory=False, interventions=123)

ValueError: Invalid interventions value 123; expected a preset name, ...

规则

  • 两个同类型处理器会抛出异常(SDK 每个 name 只保留一个处理器);不同类别可组合(如 Cedar + 一个人工审批预设)。
  • 内联编写的 Cedar 策略不会被自动识别(看起来像普通文本),需直接传 CedarAuthorization(policies=...)。
  • 子代理继承父级的 interventions;programmatic_tool_caller 内部的工具调用同样经过 interventions,无法通过间接调用绕过。
  • 将开销低的处理器放在前面(Cedar → 服务 → LLM),因为 Deny 会截断后续链。
  • "ask" 在 ask=None 时使用 stdio;在 headless/CI 环境会阻塞等待输入,应传入回调或使用 interrupt/resume。

适用场景

需要人工审批危险工具调用、按风险自动分级审批、或按 Cedar 策略授权工具调用的 agent 工作流。

限制

同类型处理器重复会报错;内联 Cedar 策略需显式传入;"ask" 在无回调的 headless 环境会阻塞。