Run 入口

wesgine 发起 Run 的两个入口及其区别。


两个入口

入口返回适用场景
cell.Runtime().Run(ctx, req)(<-chan engine.Event, error)SSE 流式
cell.Runtime().Chat(ctx, req)(string, error)同步等待

Run(流式)

events, err := cell.Runtime().Run(ctx, AppRunRequest{
    Actor:     "alice",
    SessionID: "s1",
    AgentID:   "agent-legal",
    Messages:  []Message{...},
    Model:     "gpt-4o",
})
// events 是只读 channel,消费方 range 读取
for evt := range events {
    switch evt.Type {
    case engine.EventStreamDelta:
        // 流式文本
    case engine.EventToolStart:
        // 工具调用开始
    case engine.EventDone:
        // Run 完成
    }
}

Chat(同步)

resp, err := cell.Runtime().Chat(ctx, AppChatRequest{
    Actor:    "alice",
    Messages: []Message{...},
    Model:    "gpt-4o",
})
// resp 是最终回复文本

必填字段

字段说明缺失行为
Actor请求主体(用户标识)ErrActorRequired
Model模型名称ErrModelRequired(INV-MODEL-01)
Messages用户消息空消息无意义

Actor 来源

产品Actor 值
wesclaw desktopweisyn uid / "local"
wescode"local"
wescraft 个人版"local"
wescraft 团队版SSO uid
teleclawJWT userId

可选字段

字段说明
SessionID会话 ID(新建或续接)
AgentIDAgent 配置 ID
Tags审计元数据
ThinkingLevel推理深度
ProviderName指定 Provider
CycleDetectOverrideper-Run CycleDetect 覆盖

HTTP 入口

POST /cells/{cellID}/run       → SSE 流式
POST /cells/{cellID}/chat      → 同步

SSE 事件流

Run 产出的事件类型:

事件类型含义
stream_delta流式文本片段
tool_start工具调用开始
tool_progress工具执行进度
tool_result工具执行结果
turn_end单轮结束
plan_createdPlan 创建
plan_updatedPlan 步骤更新
plan_completedPlan 完成
plan_interruptedPlan 中断
budget_status预算状态
error错误
doneRun 完成

SSE 重连

GET /cells/{cellID}/runs/{runID}/events?from_seq=N

断线后用 from_seq 续播(INV-RUN-DETACH)。


Run 生命周期与 SSE 解耦

SSE 断开 ≠ 取消 Run。

取消 Run 的唯一途径:


相关文档