Tool Risk Level
Tool Risk Level 是对工具操作风险的分级,决定是否需要人类审批、是否需要额外日志、是否需要沙箱执行。
#type / concept
#status / evergreen
#tech / ai
#tech / security
[!info] related notes
- 所属 MOC: Tool Calling Engineering MOC
- 相关: Human-in-the-loop, [[sandbox|Sandbox]]
Tool Risk Level
一句话定义
Tool Risk Level 是对工具操作风险的分级。查询天气是低风险,删除数据是高风险。不同风险级别决定了是否需要审批、是否需要沙箱、是否需要详细日志。
核心原理
风险等级定义
| 等级 | 特征 | 处理方式 |
|---|---|---|
| Low | 只读、无副作用 | 直接执行 |
| Medium | 有副作用但可撤销 | 确认后执行 |
| High | 不可逆、影响大 | 必须人类审批 |
| Critical | 金融、删除、发布 | 多重审批 |
风险评估
class RiskAssessor:
def assess(self, tool: Tool, arguments: dict) -> str:
# 工具级别风险
base_risk = tool.risk_level
# 参数级别风险调整
if tool.name == "delete_record":
count = arguments.get("count", 1)
if count > 100:
return "critical"
elif count > 10:
return "high"
if tool.name == "send_email":
recipients = arguments.get("recipients", [])
if len(recipients) > 10:
return "high"
return base_risk
风险与审批
async def execute_with_risk_check(tool, arguments, context):
risk = risk_assessor.assess(tool, arguments)
if risk in ("high", "critical"):
# 需要人类审批
approval = await request_approval(tool, arguments, risk)
if not approval.approved:
return ToolResult(error="用户拒绝执行")
if risk == "critical":
# 额外日志
audit_log.record(tool, arguments, risk)
return await execute_tool(tool, arguments, context)
常见坑
- 不做风险分级: 所有工具同等对待
- 风险等级太低: 高风险操作没有审批
- 不做动态评估: 同一个工具不同参数风险不同