Skip to content

给一张角色卡做专属编排

本章围绕三个动作展开:

  1. 一句话为一张角色卡定制专属的多智能体编排。 不需要手写提示词,也不需要逐个配置子代理,AI 迭代工作台会代为完成。
  2. 跑一次模拟,标注产出里的 AI 八股,让工作台据此改进编排提示词与 Skills。 我们把焦点放在中文 RP 圈里通称为「八股」的那一类套话——例如"不是…是"、"嘴角的细微弧度"、"短暂的停顿"。
  3. 让工作台再为这张卡写一个自定义工具, 用以校验角色卡要求的输出格式是否完整。

示例选取了一张社区中"输出格式严格、变量更新繁琐"的同人卡。卡本身并不关键,方法对所有带格式硬要求或带专属设定的角色卡均成立。


一句话定制专属编排

导入角色卡并选中后,从「扩展 → 多智能体编排」打开面板,点击 打开编排编辑器

编排编辑器打开后

顶部第一栏标明当前角色卡、所用的执行模式,以及当前编辑的是「全局」还是「角色卡覆盖」配置。本次工作目标是角色卡覆盖——所有改动只作用于这张卡,不会污染其它卡。

右上角点击 打开 AI 迭代工作台

工作台刚打开

工作台左侧为对话区,右侧实时呈现当前编排的流水线(主代理与全部子代理)。我们在输入框写下一句话:

请给本角色卡定制一个专属编排,把全局的默认配置改成更贴合这张卡的版本。

输入框里写好定制请求

点击 发送。工作台读取角色卡内容与世界书、列出当前可见的 Skills,随后开始改写主代理提示词、新增对这张卡有意义的子代理、调整可见 Skills 集。每次改动都会弹出一张变更审阅卡片,绿色为新增、红色为删除;审阅一眼后点击 应用到角色卡覆盖 即落地。

一次变更审阅卡

如果需要细看,可在卡片内展开「逐行差异」;如果不想读代码,卡片顶部一句话即指明改了哪个字段。

提示

若不愿意逐条手动审阅,可在输入框下方勾选 自动应用变更。下一节「标注八股并改进」在自动应用模式下会更顺畅。

数轮迭代后,工作台会用一段话总结改动内容与每条改动贴合这张卡的理由。

工作台跑完,AI 总结

至此,这张角色卡获得专属编排,下次给它发送消息时即采用这套配置。


跑模拟,标注八股,让工作台改进

定制完成并不意味着万事大吉——AI 写出的提示词仍可能复发它自身的口头禅。在中文 RP 圈里,这类套话通称「八股」。其中最常见的一种是序数与量词构成的"计数体"

  • 动作切片:将一个连贯动作分成可数的细段,如「一寸一寸往回缝」「钻了半寸又停住」;
  • 节奏拍数:把声音或呼吸量化为拍子,如「三下,停半拍,又三下」;
  • 程度量化:用「一点」「半分」之类模糊数词代替真正的感受动词,如「忽然弱了一点」「弱了半分」。

孤立出现一次没有问题,但一段叙述反复使用同类计数结构后,文本会退化为 AI 分镜报告——读者听见的是计数,而不是"有人在经历这一刻"。

工作台提供 模拟 功能:不真正向聊天写入消息的前提下,让当前编排走一遍完整流程并展示产出。我们用它来抓八股。

提示

模拟继承当前聊天的全部上下文:已发生的对话记录、当前激活的世界书与 Skills、当前的预设与连接配置。换句话说,模拟所呈现的是"如果此刻在这张卡上真的发一条消息,会得到什么",而不是脱离上下文的空跑。如果想换个上下文测试,先在主界面切换聊天或调整世界书再回到工作台。

回到工作台输入框:

请用「我坐起身」作为用户输入,跑一次模拟,并展示给我审阅。

工作台调用模拟工具,跑完一轮完整的主代理与所有子代理。Director 模式跑全套需要几分钟,请耐心等待。模拟结束后弹出 模拟回顾 窗口:

模拟回顾弹窗:主代理输出与各子代理跟踪

模拟回顾窗口默认即把各段落展开,向下翻就能看到主代理最终回复全文。我们浏览这段文本,挑出"AI 味儿"较重的短语。

点击 批注模式——切到开启后,在产出文本里用鼠标选中任意一段,所选区域自动呈黄色高亮,旁侧出现批注输入框。在批注框内简述不满意之处即可(一两个词通常足够)。

本轮模拟标注了一处量词计数八股

本轮基线中我们示范性地选了一处:

选中的片段批注
"连闪了五下"(头顶警报灯的反复闪烁)"五下"把视觉变化做次数化,"光闪 → 数次数"是把感官事件抽成数据点的典型

标注完成后点击窗口底部 提交并继续。工作台将这条批注视作"症状"反馈给 AI——AI 看到的不是孤立的不满意短语,而是带上下文位置的问题清单,可借此反推根因。常见情况下,根因不在某个子代理写得不够细,而在于一条共性规律尚未被任何提示词承接。

工作台根据批注做根因诊断

本次迭代中,工作台把这条批注归入"量词计数八股"一类——把活的体感、动作、时间、身体拆解为"数字 + 量词"的可计数刻度。它没有立刻动手,而是先与用户确认:该规则是绝对禁律,还是需要保留例外?在用户明确"无例外"后,工作台读取 voice_critic 子代理实际加载的 SKILL(即 voice-critic-method-zh,而不是名字最相近的另一个),将规则补进 voice_critic 在运行时真正会读到的位置,并将原句作为反例钉入其中,附以「独立禁律、字面命中即记案、与上下文是否温暖/诗化/物理写实/口语自然无关」的明文。如此下一轮模拟时,voice_critic 才会真正扫到此类违例。

重要

工作台不会在主代理提示词里加"不要说 X"这一类字面禁令——这种打地鼠式修补治标不治本。它会去寻找触发八股的根本原因(哪个子代理审稿写得太粗、哪条 Skill 漏了禁律),从该处入手修复。

随后再跑一次模拟

改完之后,再跑一次模拟,看看序数 / 量词计数体有没有变少。

新弹出的回顾窗口中,先前被标注的几条八股短语应明显变少甚至消失。

改进后的模拟回顾

把两次回顾并排比较,差异肉眼可见——基线那一段反复出现的"光闪 → 数次数"叙述节奏("一下,两下,停一会儿,再三下"、"闪了三下"、"连闪了五下"),到改进版基本退场。改进后这一轮的终稿里,量词计数(一下 / 一节 / 一刻 / 一档 / 几下 等)总命中仅余 5 次,且都不再出现在节奏拍点上,而是落到"半度"、"一根管子"这种描述指代用法。如仍有残余,重复"标注—模拟"循环即可;两到三轮通常已经足够。


让工作台写一个自定义校验工具

这张角色卡对输出有硬要求:每条回复结尾必须附带 <overall> 总览与 <UpdateVariable> 变量更新两个标签。主代理在专注于叙事时容易遗漏这两个标签,导致角色卡的状态机器读不到本轮更新,下一轮的剧情上下文也随之失准。

针对这类需求,我们无需亲自写代码或亲自修改主代理提示词,只需用自然语言把"想要什么"告诉工作台

这张角色卡的输出格式有要求,回复结尾必须有 <overall><UpdateVariable> 两个标签——别让它漏掉。

向工作台描述格式要求

工作台会自行判定如何落实——这是一个能由代码精确判定的格式检查问题(字面匹配),适合通过 自定义工具 解决;而被检查与被提醒补全的执行者本就是写正文的主代理,所以工具应当挂在主代理上、由主代理在收尾时调用。基于这一判断,工作台会自动完成一组配套改动:

  1. 在这张卡的专属编排里新增一个工具。 工具采用 read 模式(只读、无副作用),内部一段 JavaScript 读取本轮的草稿快照、扫描尾部标签。
  2. 修改主代理的系统提示词。 追加一条规则:生成的最后一步必须调用该工具,若结果显示缺标签则就地补全后再产出。
  3. 打开主代理对该工具的访问权限。 工具新建后默认即对主代理可见,无需再单独配置。

判断哪种机制最合适、由谁调用、需要同步改哪些位置——这些通常需要用户自己提示的细节,工作台都会基于自然语言需求自行决定,无需我们事先以技术语言指明。

每条改动仍走变更审阅卡,绿色为新增、红色为删除。由于自定义工具会在你的浏览器中执行 JavaScript,工具首次落地时还会弹出一个安全确认对话框——可在其中展开「查看代码」核对工具体的行为,确认是只读扫描、无副作用之后,点击 导入并应用工具

新工具的代码审阅与安全确认

应用变更后,回到主代理那栏查看 自定义工具 列表,新工具已在其中并默认勾选启用。

工具已挂上

让工作台再跑一次模拟,确认主代理确实按规则调用了工具:

再跑一次模拟验证。

模拟跟踪里出现 validate_output_skeleton 这一行调用

跟踪中可见 validate_output_skeleton 这一行——主代理在草稿写到尾部之后调用该工具一次,工具返回检查结果,主代理据此判断是否需要补全标签。


接下来

  • 这一流程同样适用于「重输出长度」「重 OOC 规范」「重世界观禁词」一类专属约束——把"什么是好"用一句话告诉工作台,由它替我们拼装编排。
  • 想了解每个自定义工具在工具体内能拿到的上下文(ctx.chatctx.characters 等),见 自定义工具
  • 想为工作台再装一条全局通用的 Skill,见 用 Skills 调教 RP 输出
  • 若对工作台改出的某个子代理不满意,回到编排编辑器手动编辑即可——工作台旨在提效,并非必经之路。

基于 SillyTavern 构建