Skip to content

实验 13 · Agent 与 MCP — 类型化工具、状态机与崩溃恢复 ​

本实验筑牢 AI Agent 系统的四个工程底线:严格基于 JSON Schema 的参数校验、高风险操作的人在环路(HITL)审批令牌、可确定性重放的状态机,以及基于持久化 Checkpoint 的崩溃恢复能力。


网页即时交互实验一:Agent 核心生命周期状态机 ​

真正的生产级 Agent 绝不是简单的 while True 死循环,而是严格由状态转移驱动的有限状态机。在模型生成 tool_calls 后,必须依次通过 Schema 校验、权限鉴权、人在环路拦截、工具执行与自纠错收敛:

交互:Agent 主循环状态机

所谓 Agent,本质就是一个「LLM 推理 → 调工具 → 把结果塞回上下文」的 while 循环。

user msgneed toolargs okresultcontinuefinal answerretry 用尽IdleThinkSelectToolExecuteObserveDoneError
Idle

等待用户输入

step 0 / 8 · retry 0/3
→ think(user msg)
点「单步执行」开始

教学要点(红旗实验):把失败率拉到 80%,反复点执行 —— Agent 会卡在 Execute 自旋, 直到触发 3 次重试上限进 Error。没有 max_steps 和重试上限的 Agent 会烧光你的 token 预算。 这两个数字不是可选项,是生产环境的保险丝。


网页即时交互实验二:故障注入与 Checkpoint 崩溃恢复演练 ​

在长时间运行的多步智能体任务中,网络中断或进程崩溃在所难免。通过在每个状态转换边界写入幂等 Checkpoint,Agent 在故障重启后能够从最近一次一致状态继续执行,避免重复扣费或副作用重放:

STATE MACHINE · LOCAL FIXTURE

HITL、checkpoint 与幂等恢复

等待下一事件

每一步只推进一个状态;高风险动作先批准,故障重试复用同一个 idempotency key,不把重复副作用当成功。

before_toolcheckpoint saved · idempotency=write-001
  1. before_toolcheckpoint saved · idempotency=write-001

这是离线状态机演示;真实合同由 python/agent_core、checkpoint 和安全测试证明,不连接任何工具或账号。


网页即时交互演练三:声明式 Tool 分发与状态机执行循环 ​

在免安装的浏览器 WebAssembly 运行环境中,直接练习实现 Agent 状态机与工具调用分发循环:

🐍

实验 13 · 声明式 Tool 派发与 Agent 状态机

JSON Schema 严格校验、工具安全分发与可恢复执行循环
↗ 独立演练台
Python 3行 1, 列 121 行 · 604 字符
运行:⌘ / Ctrl + ↵
就绪 (点击运行)
点击右上角「▶ 运行」或按 ⌘/Ctrl+Enter 在浏览器端直接执行

交互实验指南 ​

  1. 人在环路拦截:在状态机中触发高危操作(如转账或写入磁盘),观察系统如何挂起并等待人工审批 Token。
  2. 崩溃重放一致性:在恢复演练中注入断电故障,点击恢复执行,核对执行结果是否与无故障运行保持位级等价。

本地动手实验与单元测试 ​

在网页端观察状态转移后,回到本地运行你的类型化工具分发、MCP 协议集成与崩溃恢复套件:

bash
cd <仓库根目录>
source .venv/bin/activate
export PYTHONPATH="$PWD/python"

# 运行 Agent 状态机与 MCP 单元测试
pytest python/tests/test_agent_tools.py -v

下一步 ​

→ 返回第15章正文查看完整实现细节与故障注入表
→ 进入实验 14:真实生产级 LLM API 接入

私有学习站 · 原理从零构建 · 勿提交个人隐私或密钥