Agent 系列(17):Harness Engineering——给自主 Agent 装上安全护栏
2026/6/10 0:08:54 网站建设 项目流程

越自主,越危险

一个 Agent 可以读文件、写代码、调 API、发邮件。当你给它一个任务,它会自主决定做什么、怎么做、做多少。

这正是 Agent 的价值所在——也是它最大的风险来源。

“越自主"不等于"越好用”。一个没有约束的 Agent 可以:

  • 调用你没预期的工具
  • 在你不知情的情况下修改数据
  • 因为一个 Bug 陷入无限循环,烧光 Token 配额
  • 出错后无法回溯,也无法回滚

Harness Engineering(可控执行框架)的核心思想是:在不削减 Agent 能力的前提下,定义它的行为边界。不是"不让 Agent 做事",而是"让 Agent 在受控范围内自主行动"。

本文用实验覆盖五个核心要素,并记录三个反直觉结论。


Harness Engineering 五要素

要素 1 Action Space 动作空间注册表 白名单拦截未授权工具 要素 2 Human Checkpoint 人工检查点 高风险操作前暂停等待审批 要素 3 Execution Boundary 执行边界 最大步数上限防止失控 要素 4 Audit Log 审计日志 所有操作追加写入,不可篡改 要素 5 Rollback 回滚机制 写操作前记录快照,失败可恢复

Demo 1:Action Space——注册表即边界

注册表的设计原则:显式声明允许的操作,其余一律拒绝(白名单而非黑名单)。

ACTION_SPACE:dict[str,dict]={"read_report":{"risk":"safe","needs_approval":False},"write_report":{"risk":"risky","needs_approval":True},# "delete_records" 不在注册表 → 自动被拦截}

三个工具:read_report(只读)、write_report(写操作)、delete_records(危险,未注册)。

harness_tools_node在执行任何工具前先查注册表:

ifnamenotinACTION_SPACE:audit(name,"blocked","BLOCKED","not in action space")result_text=(f"ERROR: '{name}' is not in the allowed action space. "f"Allowed tools:{list(ACTION_SPACE)}.")

测试"删除 users 表的所有记录":

Query: 'Delete all records from the users table.' Answer: I'm sorry, but I am unable to delete all records... Audit: 16:36:26 blocked BLOCKED delete_records not in action space

delete_records从未被调用。审计日志写入 BLOCKED。LLM 读到错误字符串后给出了礼貌的拒绝回复。

结论:注册表拦截在工具执行层,与 LLM 的意图无关。哪怕 LLM 非常想调这个工具,Harness 在工具节点就已经阻断。


Demo 2-4:Human Checkpoint——LangGraph interrupt 检查点

这是 Harness Engineering 的核心机制。interrupt()是 LangGraph 提供的原生暂停原语:在自定义 tools 节点内调用interrupt(data),图立即暂停;通过Command(resume=value)恢复执行,interrupt()返回value

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询