Run 生命周期

Run 是 wesgine 中一次完整的 Agent 执行过程——从用户消息到最终回复,经历认知循环、工具调用和认知结算。

发起 Run

curl -N http://localhost:9091/cells/my-cell/run \
  -H "Content-Type: application/json" \
  -d '{
    "actor": "alice",
    "session_id": "s1",
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "你好"}]
  }'

必填字段

字段说明
actor请求主体标识(空 → ErrActorRequired)
session_id会话 ID
model模型名称(空 → ErrModelRequired)
messages消息列表

Run 事件流

Run 通过 SSE 返回事件流:

事件说明
stream_delta模型输出片段
tool_start工具调用开始
tool_result工具调用结果
plan_created计划创建
plan_updated计划步骤更新
doneRun 正常完成
error错误
interrupted被用户中断

SSE 与 Run 解耦

Run 生命周期与 SSE 连接完全解耦:

认知循环

每个 Run 内部执行认知循环:

接收用户消息
  ↓
组装上下文(System Prompt + 记忆 + 历史)
  ↓
调用 LLM
  ↓ ← 返回工具调用 → 执行工具 → 循环
  ↓ ← 返回文本 → 结束循环
  ↓
认知结算(CognitiveSettlement)
  ↓
Run 完成

终止哲学

wesgine 的终止哲学:引擎不因 counter 阈值主动终止正常运行的任务。

Run 的终止来源:

来源说明
用户中断POST /sessions/{sid}/interrupt
CycleDetector检测到完全相同的操作+结果的死循环
ErrorStreak连续工具错误超过阈值
BudgetCheckFn外部预算耗尽回调
Cell StopCell 生命周期关闭

CycleDetector — 循环检测

唯一的引擎内终止源。检测"可证明的死循环"(完全相同操作+完全相同结果),不是"你跑太久了"。

两阶段终止协议:

  1. 自愈 — 首次检测到循环,注入纠正消息 + 重置计数
  2. HITL — 第二次检测到循环,暂停等待用户决定(超时 60s 自动终止)

认知结算

Run 结束时执行 CognitiveSettlement(认知结算):

结算是 Run 生命周期的强制阶段,唯一例外是 panic_stop。

Plan 系统

Agent 可以通过 plan 工具创建和管理执行计划:

{
  "tool": "plan",
  "action": "create",
  "steps": [
    {"description": "分析需求"},
    {"description": "编写代码"},
    {"description": "运行测试"}
  ]
}

Plan 是 LLM 驱动的线性清单——执行顺序由数组顺序决定,模型通过 plan(update) 逐步标记完成。

中断 Run

# 中断当前 Run
curl -X POST http://localhost:9091/cells/my-cell/sessions/s1/interrupt

# 中断 Cell 内所有 Run
curl -X POST http://localhost:9091/cells/my-cell/sessions/interrupt-all

查看 Run 历史

# Run 列表
GET /cells/{id}/observe/runs?limit=20

# Run 详情
GET /cells/{id}/observe/runs/{runID}

# Run 工具调用追踪
GET /cells/{id}/observe/runs/{runID}/tools