跳到正文
Sean
返回

Agent Harness、约束与工具路径

1. 核心判断

好的约束不是为了限制 AI,而是为了减少无效探索,让 AI 更快进入正确动作空间。

SOUL.md 这类文件如果只是放进上下文,本质上是软约束。它适合做人类可读的规范、审计依据和策略声明,但不能单独保证不访问 PII、不删除文件、不调用高危 API 或不泄露密钥。

真正可靠的约束需要落到执行层:

更准确的表达是:

SOUL.md 是策略声明,不是强制执行机制。
它需要 runtime、tool gateway 和 policy engine 配合,才能变成可靠的安全边界。

2. 搜索视角

无约束 agent 很像裸 DFS:它会沿着某条看起来可行的路径一路深入,但可能陷入无关分支、错误假设或循环尝试。

更好的 agent 应该像:

DFS + 剪枝 + 启发式排序 + 回溯 + 验证

对应关系:

Agent      = 搜索器
Goal       = 目标状态
State      = 当前世界状态 / 上下文状态
Tools      = 可扩展边
Tool call  = 沿着某条边走一步
Plan       = 从 State 到 Goal 的路径
Constraints = 剪枝条件
Memory     = visited set
Evaluator  = 验证函数
Approval   = 高风险边的人工判定

真正高效的 agent,不是想得更多,而是少搜索错误空间。

3. 工具是边

工具可以建模为从一个状态到另一个状态的有向边,并且每条边都有成本、前置条件和副作用。

read_file:
  precondition: path exists
  effect: context += file_content
  cost: tokens + time
  risk: low

delete_file:
  precondition: path exists
  effect: filesystem -= file
  cost: low
  risk: high
  requires_approval: true

run_tests:
  precondition: deps installed
  effect: confidence += test_result
  cost: time
  risk: low / medium

所以工具不是孤立能力,而是状态图里的可执行边。

4. Harness 是搜索控制器

Harness 的角色不是简单调用工具,而是帮助 agent 在巨大、动态、部分未知的状态图中找到一条足够好的路径。

它负责:

可以抽象为:

candidate_actions = policy(state, goal)
valid_actions = filter(candidate_actions, constraints)
next_action = rank(valid_actions, cost, risk, expected_gain)
new_state = execute(next_action)
score = evaluate(new_state, goal)

Harness 不一定能找到全局最优路径。真实目标通常是:

找到一条足够好、足够安全、成本可接受、可验证的路径。

5. 与复杂度的关系

Agent 执行不能直接等同于一个 NP 完全问题。

某些子问题可以是 NP-hard,甚至更难:

但真实 agent 任务不是一个干净的判定问题,因为它包含自然语言目标、动态外部状态、不完整观测、工具副作用、不确定成本和不总是明确的验证函数。

更准确的总结是:

Agent 执行不是在求形式化 NP 完全问题的最优解,
而是在巨大、动态、部分未知的状态空间里,
用约束、启发式、验证器和工具执行,
寻找一条可行且足够好的路径。

6. 追踪性

追踪性可以理解为:最后的结果能倒查回来,知道它从哪里来、经过了哪些动作、为什么这么做。

它不需要记录所有 token 或完整思考过程,而是记录外部可观察的执行链:

Goal -> Step -> Tool Call -> Observation -> State Delta -> Next Decision -> Artifact

追踪性主要包含两类:

真正有用的 trace 不是流水账,而是执行路径的有向图。除了记录时间顺序,还要记录因果关系:

因为本地没有 harness 目录
所以创建 docs/harness-agent-constraints.md

因为飞书搜索没有找到明确的 harness 知识库节点
所以创建新的飞书文档

因为创建后需要验证同步成功
所以 fetch 飞书文档确认内容完整

最小可用的事件结构可以是:

{
  "run_id": "run_20260603_001",
  "goal": "沉淀 harness 笔记并同步飞书",
  "event_id": "evt_004",
  "type": "tool_call",
  "tool": "lark.docs.create",
  "input_summary": {
    "title": "Agent Harness、约束与工具路径",
    "parent": "my_library"
  },
  "caused_by": ["evt_003"],
  "reason": "飞书搜索未找到明确的 harness 知识库节点,需要创建新文档",
  "constraint_checks": [
    "user_authorized_lark_docs_write",
    "not_high_risk_delete",
    "content_source_available"
  ],
  "result": {
    "status": "success",
    "artifact": "https://..."
  }
}

最小字段集合:

用前面的图模型说:

Trace = agent 从初始 State 走到 Goal 的路径记录

因此,harness 需要记录会话中的关键操作、状态变化、产物,以及它们之间的因果边。这样系统才能审计、回放、解释、回滚和优化 agent 的执行路径。

7. 类比区块链交易账本

Agent trace 有点像区块链里每笔交易都可追踪。

可以把 agent trace 理解成一种执行账本:

区块链交易:账户 A -> 账户 B,金额 X,交易哈希 H,前序区块 PrevHash
Agent trace:状态 A -> 状态 B,动作 X,事件 ID,前序事件 caused_by

相似点:

差异也很重要:

区块链追踪的是资产状态变化。
Agent trace 追踪的是任务执行状态变化。

区块链更强调:

Agent harness 更强调:

所以 agent trace 不一定需要真的上链,也不一定需要强共识。很多时候,普通数据库、事件日志、append-only log 或 hash chain 就够了。

更准确的类比是:

Agent trace = 面向 AI 执行过程的 transaction log

每次工具调用都像一笔交易:

{
  "event_id": "evt_007",
  "prev": ["evt_006"],
  "action": "lark.docs.update",
  "input_summary": "追加第 6 节追踪性",
  "state_delta": "飞书文档 revision 3 -> revision 4",
  "artifact": "https://...",
  "hash": "hash(event_content)"
}

如果想做得更强,可以加入:

因此,agent trace 的目的不是金融级不可篡改,而是让 AI 的执行路径从黑盒行动变成可检查的操作历史。这对 agent 系统非常关键。


分享这篇文章:

下一篇
博客自动发布链路测试