跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Omni 条件与派生链

设置固定策略、三值条件、产物选择器和有界的媒体处理链。

以下字段属于 omni 实验分支的 processing.fixedPolicies。先确定哪些资源应处理,再选工具和产物去向;不要将它当作能执行任意代码的自动化语言。

策略身份与顺序

策略 ID 匹配 ^[A-Za-z0-9][A-Za-z0-9._-]*$。同名值设为 null 可以删除低层合并来的固定策略;传输守卫另有不可删除规则。

priority 默认 0,按数值从高到低执行,同分按 ID 升序。mediaTypes 必填且非空,可选 image、video、audio。origins 默认 user 和 tool;派生资源属于 policy,需要显式接收。

执行控制

字段默认与行为
when不设则总是匹配
onConditionUnavailableskip;也接受 run,保留设计值 abortTurn 当前会被拒绝
toolName必填,必须是已注册策略工具;被 tools.disabled 排除的工具不可引用
arguments空对象,按工具设置 schema 校验
maxRunsPerLineage1,限制同一资源谱系的同一策略次数
onFailurecontinue,可设 abort 中止该根资源处理
output.reprocessMediafalse,开启后派生媒体再次匹配策略
output.sourceomit,用派生结果替换源;keep 同时保留源
output.artifacts默认所有产物 include

inputPath、outputDir、resourceId 由编排器注入,不能在固定 arguments 中手填。未知键会报错。abort 的范围是当前根资源处理,不应自行扩写为关闭整个会话。

条件表达式

例如只处理超过二十分钟且不少于 1MiB 的音视频:

[
  "all",
  [">", ["field", "resource.durationMs"], 1200000],
  [">=", ["field", "resource.sizeBytes"], 1048576]
]

比较支持 >、>=、<、<=、==、!=,两个操作数为字段引用或数字/字符串/布尔字面量,排序比较要求数字。all、any、! 组合条件;不支持任意 JavaScript、JSONPath 或通用嵌套求值。

resource 可读 sizeBytes、durationMs、width、height、maxWidth、maxHeight、frameRate、frameCount、bitRate、sampleRateHz、channels、estimatedTokenCount。maxWidth/maxHeight 是宽高别名。

session 可读 contextWindowTokens、promptTokenCount、reservedOutputTokens、availableContextTokens。request.totalEstimatedMediaTokens 是当前 pass 中该资源及派生物的估算,按资源分别计算,不是本次全部附件之和。

未知条件不是 false

无法探测字段时得到 unavailable。all 中存在确定 false 则为 false;any 中存在确定 true 则为 true;其余不确定性继续向上传递,最后由 onConditionUnavailable 决定跳过或执行,并记录缺少哪些字段。

memory.hasTranscript、hasOcr、hasCaption、hasSummary、hasKeyframes、hasClip 用 1/0 表示资源媒体记忆中的已存在产物,覆盖派生链。记忆关闭、没有绑定或存储不可读时为 unavailable,不能按“还没转写”处理。

派生链与产物去向

要让视频抽出的音轨继续压缩和转写,上游设 output.reprocessMedia:true,下游 origins 包含 policy。若开启重新处理却没有任何策略接受 policy,启动校验会拒绝这条无出口的链。

output.artifacts 使用 role:transcript、kind:image 或 * 选择器,优先级 role 高于 kind 高于 *。include 加入投递集,retain 只存储不发送。显式映射中未匹配的产物按 retain 处理;选择器指向工具不可能生成的种类或角色会报错。

链还受最大深度、每根资源总执行次数和派生字节预算约束。source:keep 会继续保留原媒体,不适合希望真正降低最终投递体积的所有步骤;结合传输守卫检查结果。