ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Agent 排障记忆树:证伪一个假设要撤销多少后代

Agent 排障记忆树:证伪一个假设要撤销多少后代

排障Agent容易重新提议一个已经否决的方案。只把失败原因塞进摘要未必够,因为它还可能保留该方案下面的一串动作,看起来像仍可执行的待办。

一个假设失效时,应沿依赖关系撤销后续动作;失败证据本身则要保留。删除整个分支会让Agent失去“为什么不能再试”的解释,完全不撤销又会留下过期行动。

撤销权威,保留历史

下面用树表示“目标→假设→动作→观测”。从指定节点迭代遍历所有后代,不限于直接孩子,并用visited集合避免意外重复边造成无限循环。模型不负责决定状态写入;调用者确认假设已被证伪后,才触发撤销。

from dataclasses import dataclass, field @dataclass class Node: text: str children: list = field(default_factory=list) active: bool = True reason: str = '' def invalidate(nodes, start, reason): if start not in nodes: raise KeyError(start) stack, visited = [start], set() while stack: key = stack.pop() if key in visited: continue visited.add(key) node = nodes[key] node.active = False node.reason = reason if key == start else 'ancestor invalidated' stack.extend(node.children) return visited nodes = {'goal': Node('recover', ['A', 'B']), 'A': Node('bad hypothesis', ['A1']), 'A1': Node('action', ['A1a']), 'A1a': Node('observation'), 'B': Node('alternative')} changed = invalidate(nodes, 'A', 'evidence contradicts hypothesis') assert changed == {'A', 'A1', 'A1a'} assert nodes['goal'].active and nodes['B'].active assert 'A' in nodes and nodes['A'].reason print('all descendants revoked; alternative and failure evidence retained: PASS')

树是起点,真实依赖可能是图

如果两个方案共享一份观测,不能因为一个方案失效就宣布观测为假。应把“观测真实性”与“行动是否仍被该假设授权”分开。这里的树只适合明确的单父依赖,跨分支共享工件需要额外记录边的类型。

长任务Agent的工程文章讨论了跨会话留下可接续工件的重要性。本文把这个思路收窄到失败路径的状态,不把2025年的文章当成当月新发布。

IBM 10月20日的记忆研究还提醒我们,失败经验怎样被压成指引本身就是实验条件。把一条失败提炼成“永远不要做X”可能过度泛化;记录适用环境和反证比写一句禁令更稳妥。

这个例子已在本地验证孙辈节点也被撤销、另一分支保留和失败证据不被删除,没有开展模型排障或生产故障实验。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进