一次 Agent 任务可能包含多次模型和工具调用。进程崩溃后,全部重跑会重复调用模型,也可能重复修改外部数据;只看日志又难以确定该从哪里继续。恢复需要区分已保存的完整结果、尚未完成的步骤,以及必须由应用核实的外部操作。
Project 02 / Embeddable agent runtime
M-Agent
0.5.1 · Durable RunM-Agent 是面向 Python 应用开发者的 Agent 运行库,负责模型调用、工具执行和运行状态的保存。应用通过 Python API 创建、启动和恢复一次执行,也可以按需接入会话、上下文处理、模型路由与评估。业务逻辑和服务部署由应用负责。
查看公开仓库- 用 Checkpoint 保存可复用的完整步骤结果
- 恢复时沿用同一 Run 身份与原定义版本
- 按工具影响类型、重试策略和预算处理重试
- 通过 WAITING 与处置接口交由应用确认
- 用租约和版本检查限制并发推进与冲突写入
- 按需组合会话、上下文、运行前路由与独立评估
我设计并实现了 Run 生命周期、持久化存储、跨进程恢复和应用处置接口,并将模型与存储适配、会话与评估、故障测试分别组织为独立模块。设计取舍、实现细节和测试中发现的限制都记录在项目文章中。
建立 Run 生命周期和 SQLite 持久化,加入定义版本、工具影响分类、有界重试与 WAITING 处置。
整理四层公共 API,明确模型能力声明与存储内容保护接口,并加入安装发行物后的恢复检查。
加入会话存储和上下文预算检查;语义压缩作为独立模型步骤,保留自己的调用与恢复记录。
加入运行前模型选择、独立评估和基线比较。已经创建的 Run 仍沿用原模型绑定。
修复多个 Run 共用 SQLite 时,上下文与压缩步骤 ID 冲突的问题,并说明旧数据库的迁移条件。
在 Checkpoint 写入前后分别终止进程,对比新进程是否复用完整结果、重新读取上下文或再次调用模型。
已有测试覆盖 Step / Attempt 仍为 RUNNING 的崩溃窗口:恢复进入 WAITING,应用核实后确认结果,不再次调用工具。
源码解析附有反例:Tool Step 已为 SUCCEEDED、Checkpoint 尚未提交时崩溃,恢复可能重复执行非幂等工具。已有 WAITING 测试不能证明所有崩溃窗口都安全。
Chat Completions 与 Responses 需要针对具体端点、凭证和能力组合单独检查。离线测试与源码阅读不能代替真实端点验证。
区分离线契约(CONTRACT)、安装环境(HOST)、模型端点(PROVIDER)和实际部署(FIELD)。本页概述已有材料,不代表本次重跑了上游测试或完成生产验收。