Morphz 文档

线程、激活与目标

理解工作如何获得执行机会、进入等待、恢复、形成结果并完成交付。

一项任务可以经历多次模型调用。线程持有工作连续性,激活提供一次执行机会,模型尝试可以替换,目标则监督需要长期收敛的工作。

线程是稳定因果路径

每条线程都保存根请求、所属智能体、认知上下文、会话、执行节点、监督关系和交付状态。当前有三类线程:

  • 对话线程处理一个用户回合;
  • 执行线程承载工具工作、委派或目标推进;
  • 交付线程把已形成的结果送回指定会话。

线程的权威生命周期包括打开、完成、失败和取消。调度器根据依赖和激活推导可运行、运行中、等待和空闲等执行阶段。暂停是一项独立的运维控制:暂停后的线程仍然打开,并保留持久信箱。

激活与模型尝试

激活是调度器授予线程的一次有时限租约。它固定本次求值的根事件、触发事件、会话、主体、目标和执行节点等因果边界。

一次激活可以经历多个模型尝试。网络重试、上下文恢复或模型输出校验失败可以替换模型尝试,同时保持所属线程和根请求不变。工具动作也带有激活与调用身份,因此恢复时可以重放结果而不重复物理副作用。

激活结束后,线程可能已经终止,也可能在等待下一项持久依赖。

线程监督与寿命

线程创建时必须声明谁消费它的最终结果:

  • 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

线程代次

线程代次隔离同一条逻辑线程前后不同的执行意图。线程控制会校验修订号;替换线程会终结当前代次,并以修订后的意图开启后继代次。原根请求和旧代次继续保留在因果历史中。