断点续执行(从节点重启)

May 15, 2026 · View on GitHub

源文件: examples/advanced/demo_continue_exec.py

概述

本示例演示了"断点续执行"或"从节点重启"功能,允许从某个中间节点重新运行 Agent 的工作流。在初始查询完成后,你可以提供 restart_node_id(以及可选的 restart_node_output)从指定节点开始回放执行。这对于调试、测试替代工具输出或从执行中途的故障中恢复非常有用。

前置条件

  • 环境变量: DEFAULT_LLM_API_KEYDEFAULT_LLM_BASE_URLDEFAULT_LLM_MODEL_NAME
  • Node.js 运行时(用于 uvx 启动 MCP 时间服务器)

运行方式

python -m examples.advanced.demo_continue_exec

代码详解

组件 (oxy_space)

组件类型关键参数
default_llmHttpLLMapi_keybase_urlmodel_name(来自环境变量)
time_toolsStdioMCPClientcommand="uvx"args=["mcp-server-time", "--local-timezone=Asia/Shanghai"]
time_agentReActAgentdesc="A tool for time query."tools=["time_tools"]llm_model="default_llm"

入口函数

main() 演示了两阶段执行模式:

第一阶段 -- 初始执行:

payload = {"query": "Get what time it is Asia/Shanghai"}
oxy_response = await mas.chat_with_agent(payload=payload)

正常运行时间 Agent 并打印结果。

第二阶段 -- 从节点重启(已注释):

payload = {
    "restart_node_id": "BcgSFR4Ls3nHCkFm",   # 第一次执行中的 node_id
    "restart_node_output": '{"timezone": "Asia/Shanghai", ...}',  # 可选的输出覆盖
}
oxy_response = await mas.chat_with_agent(payload=payload)

使用时需取消注释并提供第一次运行 trace 中的有效 restart_node_idrestart_node_output 字段是可选的:如果提供,则替换该节点的原始输出,让你可以测试 Agent 对不同中间结果的反应。

核心概念

  • restart_node_id -- 要从其重启的中间执行节点标识符,从上次运行的 trace 数据中获取。
  • restart_node_output -- 节点输出的可选覆盖值。如果省略,将自动从数据库中检索原始查询,节点正常重新执行。
  • Trace 回放 -- 框架会存储执行 trace(节点、工具调用、LLM 响应),可以从任意点开始回放,使得无需重新运行整个链即可迭代 Agent 行为。
  • chat_with_agent() -- MAS 的核心入口点,用于运行查询。同时支持标准查询和重启载荷。

预期行为

  1. 第一阶段执行:时间 Agent 查询亚洲/上海的当前时间并打印结果。
  2. 第二阶段(取消注释后):从指定节点恢复执行,可选择使用覆盖的输出,Agent 基于该节点的数据生成新的最终答案。