首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Agent 架构师:企业级系统的三个确定性支点

Agent 架构师:企业级系统的三个确定性支点

原创
作者头像
资源大佬 jzit-top
发布于 2026-10-26 10:17:44
发布于 2026-10-26 10:17:44
1510
举报

Agent 架构师与传统架构师的设计对象不同。后者的产出是服务边界和接口契约;前者的产出是Agent 拓扑、委派边界与信任层级,其关键判断从“哪些服务需要分离”变为“哪些任务可以交给概率性规划,哪些必须由确定性代码强制”。企业级 Agent 的失败很少因为模型不够强,而是因为架构师没有在概率性智能外面钉下足够多的确定性支点。

支点一:状态快照是执行契约,不是缓存

自由 ReAct 循环的根本缺陷是不可恢复:while not finished 的中间状态随进程消失。LangGraph 的 checkpointer 提供了可复用的模式:每一步将图状态持久化为 checkpoint,用 thread_id 标识一次执行,中断或崩溃后从精确断点恢复,而不是重新推理。生产环境必须使用持久化后端——InMemorySaver 在进程重启后丢失一切,PostgresSaver 才是可用的执行契约。

代码语言:javascript
复制
from langgraph.checkpoint.postgres import PostgresSaver
from langgraph.types import interrupt, Command

def approval_node(state: RunState):
    decision = interrupt({"order_id": state["order_id"],
                          "trace": state["trace"]})   # 完整上下文随暂停保留
    return {"approved": decision["approved"]}

with PostgresSaver.from_conn_string(DB_URL) as saver:
    graph = builder.compile(checkpointer=saver)

config = {"configurable": {"thread_id": f"order-{oid}"}}
graph.invoke({"order_id": oid}, config)                    # 执行至审批节点暂停
graph.invoke(Command(resume={"approved": True}), config)   # 审批后精确续跑

架构师在这里的决策不是“用不用 checkpointer”,而是哪些节点是合法的暂停点。审批、人工复核、高风险转账必须设计为 interrupt 节点,模型无权绕过;而纯查询类步骤不应引入不必要的暂停开销。状态机负责流程边界,节点内部的 LLM 继续自由规划——确定性的骨架,包住概率性的智能。

支点二:策略执行点必须位于模型之外

提示词和 System Message 不是权限边界。企业级架构必须在每一次工具调用之前放置策略执行点(PEP),由独立的策略决策点(PDP) 做出确定性裁决。PDP 的关键设计是默认拒绝:未匹配任何规则时落到 ask 而非 allow,同时维护会话污点——一旦读取过不可信内容,后续外向操作自动升级或拒绝,阻断“只读工具 + 外发工具”的组合攻击链。

代码语言:javascript
复制
class PolicyEngine:                      # PDP:策略即数据,可热加载
    def evaluate(self, tool, params, ctx):
        hits = [r for r in self.rules if r.matches(tool, params, ctx)]
        verdict = max(hits, key=lambda r: _RANK[r.decision]).decision if hits else self.default
        if ctx.get("session_tainted") and ctx.get("tool_is_egress") and verdict != "deny":
            return Decision("deny", "会话已读取不可信数据,外向操作被信息流策略拒绝")
        return Decision(verdict)

class PolicyPEP:                         # PEP:执行点,失败关闭
    def pre_tool_use(self, name, params, ctx):
        d = self.pdp.evaluate(name, params, ctx)
        if d.verdict == "allow":  return HookDecision("allow")
        if d.verdict == "deny":   return HookDecision("deny", reason=d.reason)
        approved = self.confirmer.ask(intent=ctx["intent"],
            operation=render(name, params), impact=ctx["effect"],
            timeout_seconds=600)
        return HookDecision("allow") if approved else HookDecision("deny")

default 显式声明而非隐式放行,session_tainted 在会话层面阻断逐工具合规但组合危险的路径,超时驳回走 fail-closed。PEP 放在模型外部,策略变更一次生效,整个 Agent 舰队立即继承。

支点三:评估门禁是发布前最后的确定性检查

传统软件有编译期检查和单元测试作为安全网,Agent 什么都没有:改一行 prompt,影响的是整条轨迹。Agent 输出不确定,“断言输出等于期望”不适用,因此评估必须是轨迹基线而非答案比对。Golden Dataset 的三要素缺一不可:输入、期望轨迹(调用了哪些工具、顺序如何)、期望输出。只测答案会放过“该拦住却发了”的轨迹错误,只测轨迹会放过“收件人搞错”的事实错误。

代码语言:javascript
复制
def gate(results, baseline, threshold=0.90):
    passed = sum(1 for r in results if r.trajectory_matches(baseline)
                 and r.output_covers(baseline))
    rate = passed / len(baseline)
    if rate < threshold:
        raise SystemExit(f"gate failed: {rate:.1%} < {threshold:.0%}")  # 阻断合并

门禁的价值不在阈值本身,而在于每一次生产失败都转化为一条 golden case,回归套件随事故增长而增厚。没有这条闭环,Agent 的迭代只是盲目的版本滚动。

结语

三个支点指向同一原则:架构师不替模型做决策,而是让决策的边界不可绕过、状态不可丢失、退化不可静默发布。Checkpoint 守住执行连续性,PEP 守住权限边界,评估门禁守住演进方向。缺任何一层,企业级 Agent 都只是“能演示”,而非“敢托管”。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 支点一:状态快照是执行契约,不是缓存
  • 支点二:策略执行点必须位于模型之外
  • 支点三:评估门禁是发布前最后的确定性检查
  • 结语
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档