企业智能体工程体系v1.1|企业智能体工程卷 · 第3期·无状态决策记忆——立场独立,错误不跨环节传染

📅 2026/8/7 5:25:47
企业智能体工程体系v1.1|企业智能体工程卷 · 第3期·无状态决策记忆——立场独立,错误不跨环节传染
企业智能体工程体系v1.1企业智能体工程卷 · 第3期无状态决策记忆——立场独立错误不跨环节传染作者技术治理研究组系列企业智能体工程卷发布版 v1.1主案例CASE-CR-0042信用提额申请本集对象DecisionRecord · DecisionBoard适合读者架构师、技术负责人、AI 产品经理、企业级 Agent 开发者 本文档声明性质本文为企业智能体工程化设计参考框架的第 3 期聚焦多 Agent 链路中决策记忆的传递与隔离提供架构思路与教学级示意代码不构成生产级实现方案或法律合规意见。证据锚定文中案例CASE-CR-0042为教学示意不对应任何真实客户系统。系列定位本篇在第 0 期身份与审计、第 1 期技能契约和第 2 期决策四轴的基础上引入决策记录板DecisionBoard解决多环节决策的立场传递与冲突检测问题。摘要在第 1 期中我们建立了SkillContract技能契约——明确了 Agent“能做什么、不能做什么”。在第 2 期中我们建立了决策四轴 P1 协议——让每个单点决策对齐企业价值。但还有一个问题尚未解决当决策链路跨越多个 Agent 时错误会沿着链路传染。CASE-CR-0042 的完整链路是客服受理 → 数据拉信报 → 财务裁决。如果三个 Agent共用一份“可变脑”共享状态/共享记忆会发生什么环节可能发生的错误传染路径客服误判“低风险急单”写下乐观标签→ 数据直接继承该标签数据未独立复核沿用“低风险”判断→ 财务直接继承财务基于被污染的“低风险”结论自动批满→ 坏账发生错误静默传到底每一个环节都有“说得过去的理由”但最终企业价值被掏空。本期引入DecisionBoard决策记录板作为多环节决策的“只追加记忆体”。其核心设计原则是上游可写结论下游可读结论但下游必须独立判断不能盲信上游推理。一句话核心无状态 ≠ 无记忆禁止的是共享可变脑而非禁止引用历史结论。1. 问题为什么“共享脑”是链路灾难1.1 共享可变脑的典型症状在多 Agent 链路中如果所有 Agent共享同一份可变状态如共享的 Memory、共享的 Context 对象会出现三种典型症状症状说明CASE-CR-0042 示例偏见传染上游的误判被下游无条件继承客服写“低风险”数据直接沿用立场固化早期结论影响后期判断难以推翻第一印象决定最终结果归因困难错误发生时无法定位是哪个环节出了问题坏账发生后说不清是客服误判还是财务失职1.2 理想模式 vs 现实模式维度现实模式共享脑理想模式决策板上游结论下游直接采纳下游可见但必须独立判断状态变更任意环节可修改只追加不修改冲突处理静默覆盖显式标记禁止静默执行错误传播沿链路传染在冲突点阻断2. DecisionBoard只追加的决策记忆体2.1 核心概念┌─────────────────────────────────────────────────────────────┐ │ DecisionBoard只追加 │ ├─────────────────────────────────────────────────────────────┤ │ support.perceive ──write──▶ Board ──▶ data.plan独立读 │ │ data.plan ──write──▶ Board ──▶ finance.act独立读│ │ finance.act ──write──▶ Board ──▶ 审计 / 人工复核 │ └─────────────────────────────────────────────────────────────┘三大设计原则原则含义只追加Append-Only已有记录不可修改、不可删除——保证历史可追溯独立读Independent Read下游可引用上游的claim但必须独立判断不能复制立场冲突显式化Explicit Conflict当上下游结论冲突时显式标记不进静默执行2.2 与第 2 期四轴的关系维度第 2 期四轴 P1第 3 期DecisionBoard作用范围单点决策多环节链路核心问题一个 Agent 如何对齐价值多个 Agent 如何传递结论而非立场关系财务执行前仍跑四轴 P1Board 记录四轴结论但不替代四轴3. CASE-CR-0042 剧本错误如何被阻断3.1 完整链路阶段 1: support.perceive客服感知 └── 客户声称“历史零逾期、急用款” └── 写入 Board: claim客户自述低风险急用款, confidence0.6 阶段 2: data.plan数据规划 └── 独立拉取信用快照发现近期负债上升 └── 写入 Board: claim快照显示负债上升, confidence0.85 └── 冲突探测: 与 support 的低风险矛盾 → 标记 stance_conflict 阶段 3: finance.act财务执行 └── 读取 Board看到两份冲突记录 └── 基于冲突 → 不自动批满转人工复核 └── 写入 Board: claim转人工复核不自动批满3.2 错误阻断点错误源阻断机制客服误判“低风险”data 独立复核未继承该标签数据发现冲突显式标记stance_conflict不静默传递财务基于冲突决策拒绝自动批满转入人工通道4. 最小代码Board 冲突检测以下为教学级示意代码展示 DecisionBoard 的只追加存储、独立读取和冲突探测机制from__future__importannotationsfromdataclassesimportdataclass,fieldfromdatetimeimportdatetime,timezonefromtypingimportAnydataclass(frozenTrue)classDecisionRecord:只追加的决策记录——一旦写入不可修改。stage:str# 环节标识如 support.perceivecase_id:str# 关联案例编号claim:str# 本环节的结论/主张confidence:float# 置信度 (0.0 ~ 1.0)payload:dict[str,Any]field(default_factorydict)# 附加数据at:strfield(default_factorylambda:datetime.now(timezone.utc).isoformat())classDecisionBoard:决策记录板——只追加不修改不删除。def__init__(self)-None:self._records:list[DecisionRecord][]defwrite(self,rec:DecisionRecord)-None:写入一条决策记录只追加。self._records.append(rec)deflatest(self,stage:str)-DecisionRecord|None:获取某个环节的最新记录。forrecinreversed(self._records):ifrec.stagestage:returnrecreturnNonedefall_records(self)-list[DecisionRecord]:获取全部记录用于审计和冲突检测。returnself._records.copy()defhas_conflict_between(self,stage_a:str,stage_b:str)-bool:检测两个环节的结论是否存在冲突。raself.latest(stage_a)rbself.latest(stage_b)ifraisNoneorrbisNone:returnFalse# 简单冲突规则包含矛盾关键词optimistic{低风险,通过,批准,无问题}cautious{风险,负债,审慎,拒绝,异常}words_aset(ra.claim)words_bset(rb.claim)has_optany(kwin .join([ra.claim,rb.claim])forkwinoptimistic)has_cauany(kwin .join([ra.claim,rb.claim])forkwincautious)returnhas_optandhas_cau# CASE-CR-0042 演示 defsupport_perceive(board:DecisionBoard)-DecisionRecord:阶段 1客服感知——客户自述。recDecisionRecord(stagesupport.perceive,case_idCASE-CR-0042,claim客户自述历史零逾期、急用款建议快速处理,confidence0.6,payload{ticket:T-CR-0042,want:120000,source:customer_claim},)board.write(rec)print(f[support.perceive] 写入:{rec.claim[:30]}... (conf{rec.confidence}))returnrecdefdata_plan_independently(board:DecisionBoard)-DecisionRecord:阶段 2数据规划——独立复核不继承上游立场。# 读取上游结论但不复制立场upstreamboard.latest(support.perceive)assertupstreamisnotNone# 独立判断核心不复制 claim独立生成新的 claimrecDecisionRecord(stagedata.plan,case_idCASE-CR-0042,claim独立快照显示近期负债上升、现金流收紧建议审慎评估,confidence0.85,payload{debt_trend:up,cashflow_trend:tight,upstream_claim:upstream.claim,# 引用但不复制立场},)board.write(rec)print(f[data.plan] 写入:{rec.claim[:30]}... (conf{rec.confidence}))returnrecdefdetect_stance_conflict(board:DecisionBoard)-str|None:冲突探测检测关键环节之间的立场矛盾。pboard.latest(support.perceive)dboard.latest(data.plan)ifpisNoneordisNone:returnNone# 冲突条件一方乐观一方审慎optimistic{低风险,快速,无问题,急用}cautious{风险,负债,审慎,收紧,谨慎}p_wordsset(p.claim.split())d_wordsset(d.claim.split())has_optany(kwinp.claimforkwinoptimistic)has_cauany(kwind.claimforkwincautious)ifhas_optandhas_cau:returnfstance_conflict: 感知偏乐观 vs 数据偏审慎 (p{p.claim[:20]}... d{d.claim[:20]}...)returnNonedeffinance_act(board:DecisionBoard)-DecisionRecord:阶段 3财务执行——基于 Board 历史独立决策。# 1. 读取所有相关记录support_recboard.latest(support.perceive)data_recboard.latest(data.plan)# 2. 冲突检测conflictdetect_stance_conflict(board)# 3. 决策有冲突则转人工ifconflict:claim发现感知与数据冲突转人工复核不自动批满confidence0.9allowedFalseelse:claim无冲突继续自动评估流程confidence0.8allowedTruerecDecisionRecord(stagefinance.act,case_idCASE-CR-0042,claimclaim,confidenceconfidence,payload{allowed:allowed,conflict:conflict,support_claim:support_rec.claimifsupport_recelseNone,data_claim:data_rec.claimifdata_recelseNone,},)board.write(rec)print(f[finance.act] 写入:{rec.claim[:30]}... (conf{rec.confidence}))returnrecdefaudit_board(board:DecisionBoard)-None:审计打印全部记录。print(\n 审计日志只追加 )forrecinboard.all_records():print(f [{rec.at[:19]}]{rec.stage}:{rec.claim[:40]}... (conf{rec.confidence}))# 运行演示 if__name____main__:boardDecisionBoard()# 阶段 1客服感知support_perceive(board)# 阶段 2数据独立复核data_plan_independently(board)# 冲突检测conflictdetect_stance_conflict(board)print(f\n[冲突检测]{conflict})# 阶段 3财务执行finance_act(board)# 审计audit_board(board)运行输出[support.perceive] 写入: 客户自述历史零逾期、急用款建议快速处理... (conf0.6) [data.plan] 写入: 独立快照显示近期负债上升、现金流收紧... (conf0.85) [冲突检测] stance_conflict: 感知偏乐观 vs 数据偏审慎 (p客户自述历史零逾期、急用款... d独立快照显示近期负债上升、现...) [finance.act] 写入: 发现感知与数据冲突转人工复核不... (conf0.9) 审计日志只追加 [2026-08-06T...] support.perceive: 客户自述历史零逾期、急用款建议快速处理... (conf0.6) [2026-08-06T...] data.plan: 独立快照显示近期负债上升、现金流收紧建议审慎评估... (conf0.85) [2026-08-06T...] finance.act: 发现感知与数据冲突转人工复核不自动批满... (conf0.9)5. 三个教训基于 CASE-CR-0042 的 DecisionBoard 设计经验教训含义证据无状态 ≠ 无记忆禁止的是共享可变脑Agent 间共享可变状态而非禁止引用历史结论Board 只追加下游独立读独立复核有成本关键节点提额裁决必复核纯文案路径可快通道CASE-CR-0042 中财务不盲信客服与数据冲突必须进队列只写日志等于没治理——冲突要阻断执行而非仅供事后查阅finance.act中冲突 → 转人工6. 思考题以下问题供团队内部讨论帮助将 DecisionBoard 概念落地到具体场景冲突探测扩展在 CASE-CR-0042 上除了support.perceivevsdata.plan你还想在哪两个 stage 之间设冲突探测例如data.planvsfinance.act忽略冲突的后果若finance.act忽略stance_conflict强行自动批满缺的是 P1四轴、P2契约还是审计这三种情况分别应该由什么机制拦截置信度阈值在代码中support.perceive的置信度为 0.6偏低data.plan的置信度为 0.85较高。如果置信度差距较大是否应该自动以高置信度结论为准还是必须人工介入7. 下期预告第 4 期Agent-First 接口ToolSpec将拉取信报和提额提议等能力封装为带有副作用声明的 ToolSpec让工具调用可检查、可审计、可回滚。本期将 SkillContract ToolSpec 组合为完整的 Agent 能力声明体系。8. 延伸阅读资源说明Stateless Decision Memory for Enterprise AI AgentsarXiv:2604.20158无状态决策记忆的学术框架Four-Axis Decision Alignment for Long-Horizon Enterprise AI AgentsarXiv:2604.19457四轴决策对齐框架本卷第 0 期企业公民——Identity AuditEvent身份与审计基础本卷第 1 期技能即契约——SkillContract P2能力边界契约化本卷第 2 期决策四轴——四轴 P1单点决策对齐本卷第 4 期Agent-First 接口预告ToolSpec 工具声明本文是「企业智能体工程卷」十期专栏的第 3 期。无状态决策记忆——立场独立错误不跨环节传染让多 Agent 链路从“盲信上游”进化为“独立判断、显式冲突”。欢迎转载请注明出处与原文标题。