线程、激活与目标
理解工作如何获得执行机会、进入等待、恢复、形成结果并完成交付。
一项任务可以经历多次模型调用。线程持有工作连续性,激活提供一次执行机会,模型尝试可以替换,目标则监督需要长期收敛的工作。
线程是稳定因果路径
每条线程都保存根请求、所属智能体、认知上下文、会话、执行节点、监督关系和交付状态。当前有三类线程:
- 对话线程处理一个用户回合;
- 执行线程承载工具工作、委派或目标推进;
- 交付线程把已形成的结果送回指定会话。
线程的权威生命周期包括打开、完成、失败和取消。调度器根据依赖和激活推导可运行、运行中、等待和空闲等执行阶段。暂停是一项独立的运维控制:暂停后的线程仍然打开,并保留持久信箱。
激活与模型尝试
激活是调度器授予线程的一次有时限租约。它固定本次求值的根事件、触发事件、会话、主体、目标和执行节点等因果边界。
一次激活可以经历多个模型尝试。网络重试、上下文恢复或模型输出校验失败可以替换模型尝试,同时保持所属线程和根请求不变。工具动作也带有激活与调用身份,因此恢复时可以重放结果而不重复物理副作用。
激活结束后,线程可能已经终止,也可能在等待下一项持久依赖。
线程监督与寿命
线程创建时必须声明谁消费它的最终结果:
attached线程依附于父线程,适合一次工作中的并行分解;durable线程由目标或运行时监督,适合跨多轮和重启继续;disposable线程只属于创建它的求值,不进入需要长期监督的线程组。
子线程始终附着到父线程,并跨越短暂激活继续存在。持久执行线程需要有效目标或运行时监督;缺少所有者会触发生命周期不变量错误。
多个并行子线程可以加入同一线程组。组是持久监督屏障:只有成员结果满足组条件后,等待它的线程或目标才会被唤醒。
目标是持久控制结构
目标保存自然语言目标、修订号、状态、预算、协调会话、交付会话和当前求值租约。其公共状态包括进行中、暂停、受阻、完成、取消和失败。
目标依赖
持久依赖决定进行中的目标何时可以运行。当前依赖类型包括线程、线程组、工具任务、委派、定时器、审批、用户输入、外部事件和资源可用性。
目标代次
代次标识目标的一轮有效推进。依赖满足后,调度器在同一代次内恢复工作;显式恢复暂停或受阻目标时会开启新代次。唤醒事件必须匹配当前代次,旧代次迟到的信号只保留为历史。
完成与交付是同一个终点
模型判断目标已经完成时,运行时先记录完成意图和证据引用,但不会立即把目标标为终态。拥有该目标的激活必须把最终回复、线程结果和调度状态一起提交,目标才变为完成。
这个边界避免出现“目标显示完成,但最终报告没有送达”的状态。结果形成与用户可见交付仍然分别记录,排障时可以知道失败发生在哪一步。
等待不是失败
等待必须对应一条可观察、可满足或可取消的依赖,例如:
- 模型服务进入退避,等待资源恢复;
- 工具任务尚未产生结果;
- 审批仍未决定;
- 定时器尚未到期;
- 用户输入或外部事件尚未到达。
页面若只显示“等待”而没有依赖身份,应作为可观测性缺陷处理。受阻则表示当前条件无法由已有依赖自动推进,需要新决策或修订。
检查和控制
morphz scheduler show --context=context-default --include-terminal --limit=50
morphz scheduler thread show <thread-id> --context=context-default
morphz scheduler thread pause <thread-id> --reason='Waiting for review'
morphz scheduler thread resume <thread-id>
morphz scheduler thread supersede <thread-id> 'Use the corrected requirement'
morphz objective list --context=context-default --format=json
morphz objective show <objective-id> --format=json
线程代次
线程代次隔离同一条逻辑线程前后不同的执行意图。线程控制会校验修订号;替换线程会终结当前代次,并以修订后的意图开启后继代次。原根请求和旧代次继续保留在因果历史中。