Skip to content

Spec 模式

Spec 是编排器的默认模式,也是其他模式的"基准"。它把工作流拆成一串 阶段(Stage),每个阶段里若干 节点(Node) 串行或并行跑;阶段间严格串行,前一阶段所有节点都收工后才进入下一阶段。每个节点 = 一次 LLM 调用 + 一段 prompt 模板。最后一个阶段产出"作业说明"注入主模型,前面所有阶段都是为它做准备。

你已经在用了

启用编排器时默认就是 Spec,而且自带一套能跑的工作流(distiller、规划、约束、审查、合成器...)。这份文档的目标是:改默认工作流、写新工作流、理解为什么默认这样设计

99% 的人不该手搓

手搓 stage / node 之前先看一眼 AI 迭代工作台——一句话描述需求,AI 给方案,逐条审。手搓只在工作台搞不定的极致定制场景才用。

概念速览

到这一节,几个术语开始派上用场。简短定义:

  • Stage 阶段 — 工作流的横向切片。阶段间严格串行,Stage 2 必须等 Stage 1 跑完才能开始。
  • Node 节点 — 阶段内的执行单位。一个节点 = 一次 LLM 调用 + 一段 prompt 模板
  • DAG — 有向无环图。说人话就是「有先后顺序、不会绕回去的流程图」。

每个阶段有一个执行方式:

  • 串行 — 阶段内的节点一个接一个跑
  • 并行 — 节点用 Promise.all 同时跑

每个节点要么是 worker(干活),要么是 review(审查上一阶段的输出)。

默认编排流程

Spec 是一条固定流水线。默认 profile 自带 5 个 stage、7 个 worker —— distiller 读懂场景,接着 lorebook_reader + anti_data_guard 并行锁定硬约束,然后 planner + recall_relevance 并行规划下一拍,critic 评审(并可把上一阶段打回重做),最后 synthesizer 落笔写 capsule。

d2 Diagram

默认 agent 在编排里各自负责什么:

Agent作用简单示例(RP 场景)
distiller紧凑、有据可查的场景状态快照(用户意图、当前张力、可能的走向);下游所有 worker 都读它。返回「林晚自第 12 楼以来第一次问起洛阳;她在判断要不要把家族故事讲给你听」。
lorebook_reader从激活的世界书里挑出这一回合必须遵守的硬约束(文风禁令、叙事边界、角色 / 禁忌规则、连续性锚点),写成可执行的写作指令。返回「世界书:洛阳本季被围,林晚不可能轻松离开;不得打破围城紧张感」。
anti_data_guard拦截播报体、观察体、指标体、天气预报体的扁平叙述;违规一律标 BLOCKER 并给出具体改写指令。抓到「林晚焦虑值:7/10」—— BLOCKER,改写指令:「把焦虑写进攥紧的指节里,不要给数字」。
planner提下一拍进程,讲清因果,保留角色独立性与世界自洽,不默认让世界围着用户转。节拍:「林晚躲闪 → 用户追问 → 她漏出一个细节 → 主回复就停在那个细节」。
recall_relevance在已召回的记忆线索里挑出本回合真正该用的那些,按即时相关性排序;不无中生有。「第 18 楼外祖母线索:高相关;第 3 楼天气记录:跳过」。
critic(review 节点)按一整套审查口径(连续性、OOC、世界书合规、anti-data、世界自洽 ……)审上一个 worker stage,通过点名上游某个 worker 重跑。只下判定,不下笔改写。「grounding 通过;reason 退回 —— planner 让林晚走出被围的洛阳,与世界书冲突。重跑 planner:她还在城里。」
synthesizer(finalize 节点)把通过的 worker 输出和 critic 的反馈合成成最终注入下一回合主回复的那段编排指引 capsule。capsule:「林晚对洛阳话题焦虑;会躲闪,但会漏出一个家族细节。让她留在被围的城里。不要用数据体叙述。」

手搓:Spec 工作流编辑器

工作台搞不定的极致定制场景,直接动 stage / node。从编排器面板打开:打开编排编辑器

Spec 编辑器

左边面板是工作流(阶段及其节点)。右边面板是 Agent 预设库。每个节点引用一个预设,预设携带系统提示、用户提示模板、可选的 API/Chat Completion 预设覆写、执行标志。

模板变量

用户提示模板支持以下占位符:

变量含义
{{recent_chat}}最近的聊天消息
{{last_user}}最后一条用户消息
{{previous_outputs}}前序阶段的输出
{{distiller}}蒸馏器节点的输出
{{previous_orchestration}}上一回合的编排结果。运行时自动注入,模板里一般不用写。

审查节点

审查节点检查上一个工作阶段的输出,通过两个专用工具调用与运行时交互:

工具作用
luker_orch_review_approve工作合格,推进到下一阶段
luker_orch_request_rerun一个或多个节点需要重做,附带修改建议

约束:

  • 审查节点只能审 直接相邻的前一个工作阶段 的节点
  • 重跑作用于具体节点 ID,不是整个阶段
  • 重跑次数受 审查重跑最大轮数 控制(默认 2)。设为 0 时,审查节点只能「通过或失败」,不能重跑
  • 重跑后审查节点重新跑,形成「执行 → 审查 → 重跑 → 再审查」的循环,直到通过或达到上限
  • 审查节点必须输出审查反馈

常见场景配方

我想要这样做
AI 回复前先想清楚情节再写AI 迭代工作台描述里加「分两阶段:先规划下一步,再写文」
AI 不要轻易出戏启用 Anti-Data Guard;AI 迭代工作台描述里要求「加一个硬挡 meta 评论的 Constraint Agent」
同一个工作流跨卡通用应用到全局,不要绑卡
不同卡用不同工作流在角色卡选中状态打开工作台,应用到角色卡
太慢 / 太贵概览 → Step 2;或切到 单 Agent 模式 只跑一个节点
想反复调试同一个工作流工作台的 session 会话——它会持久化
换电脑用概览 → 导入导出
全部重置编排编辑器有 重置全局 按钮

看一次 Spec 跑

运行面板 会实时显示每次 Spec 运行。每个 stage 是一张卡片,展开就能看到该 worker 的思考、流式输出和工具调用。Spec 模式可以重点关注:

  • 节点执行次数 —— 整条 DAG 里所有 worker 跑过的总次数。
  • REVIEW 重跑次数 —— 审查节点驱动的重跑(默认上限 2 次,可在配置参考里调到 0 关闭或 20 上限)。某 stage 触发重跑时,对应 worker 会在面板里出现两次。
  • 各 stage 输出形态 —— 由节点的 prompt 模板决定。比如 distiller 通常输出一段 summary + 一段 xml_guidance(带 <story_state> / <location> / <key_items> 之类的标签),后续 stage 可以解析它取结构化字段。
  • capsule —— 最后一个 stage 的输出会打包注入主模型的上下文,前面所有 stage 都在为它做准备。

面板顶部的导出按钮把整次 run 下载为 JSON(便于回报问题)。

Spec 配置参考

Spec 专属配置
设置说明
节点迭代最大轮数单节点的迭代上限
审查重跑最大轮数0 禁用审查驱动的重跑
Anti-Data Guard默认 Spec 工作流里的一个内置节点,屏蔽数据化 / 报告腔的散文(诸如 观察 / 分析 / 评估 / 监测 / observation / analyze / metric / probability 这种把 RP 写成观察日志或参数表的词)。硬编码约 18 个词的词典。不想要的话直接把这个节点从工作流里删掉。
节点 API 预设节点级覆写;留空 = 全局
节点 Chat Completion 预设节点级覆写;留空 = 全局

每个节点可以用不同的 API 和 Chat Completion 预设,所以你可以让蒸馏器走便宜模型、合成器走高质量模型。

相关页面

预设

本模式的配置可以保存为命名预设,并在编辑面板中切换。完整工作流见 编排预设

基于 SillyTavern 构建