Janitor AI 里的提示词突然“失效”,很多时候并不是被覆盖了,而是被埋到了上下文深处。平台公开的请求组装说明都指出:聊天记录会排在提示词模块之后。对话每推进一轮,你写下的规则就会离模型输入末尾更远一些。短小、针对具体症状的模块更能扛住这种变化;800 词的“万能主提示词”反而撑不了多久。
先对症,再决定把提示词放在哪个字段
下面提到的各种来源,描述的都是几类独立传给模型的内容:角色定义、你的 Persona、Chat Memory,以及提示词字段。复制了一段提示词却没有效果,常见原因就是放错了位置。先在表格里找到与你遇到的现象最接近的一行,然后一次只改一个地方。
| 你看到的现象 | 最可能的原因 | 最小改动 |
|---|---|---|
| 机器人替你的角色说话 | 首条消息或示例对话已经替你做了发言 | 先修正源文本,再加入下面的角色控制模块 |
| 规则前 20 轮有效,之后逐渐失效 | 随着聊天记录累积,提示词被埋到了更深处 | 把最关键的一条规则重新写进 Chat Memory |
| 回复越写越像小论文 | 没有任何长度规则,或角色卡与提示词里的规则互相冲突 | 只保留一条段落数量规则,并且只写一次 |
| 机器人把你的消息原样重复一遍 | 最近几轮对话强化了这种模式 | 删除或编辑问题回复,再加入“不要复述”的规则 |
| 提示词看起来完全没被执行 | 固定内容超出了上下文预算,部分内容被截掉 | 删减提示词,不要先删故事 |
| 换模型后,同一段提示词表现不同 | 提示词按代理模型的上下文长度写的,却放在 JLLM 上运行 | 按后文表格重新调整长度 |
有两件事比任何模板都重要:每次测试只改一个变量,并保留旧版本,方便随时回退。
提示词位于请求的哪里?第 80 轮还能剩下多少影响力
Janitor AI 每轮都会把多个独立模块组装成一个请求,而你编辑的字段并不是模型最后读到的内容。公开资料对具体顺序的描述并不完全一致,但它们都指向同一个关键事实。
| 来源 | 提示词字段的位置 | 后面还有什么 |
|---|---|---|
| 社区聊天机器人指南(性格、聊天记忆、场景、高级提示词、最近消息) | 5 个模块中的第 4 个 | 最近消息 |
| rshtola/jai-info,2026 年 4 月在代理路径上的观察结果 | 紧跟全局提示词之后,排在第 2 个 | 角色 Persona、场景、用户 Persona、示例对话、摘要、Lorebook |
| 介绍 JLLM 路径的提示词排障文章 | 6 个模块中的第 5 个 | 完整对话 |
三种排列方式都会把对话追加到已组装的模块之后。这就解释了社区讨论中反复出现的一种故障:规则并没有停止发送,只是要和后续几千个 token 的新文本竞争。它也解释了另一个很多人能感觉到、却未必说得清的现象——即使长期提示词已经不太起作用,插入一行 OOC 仍然能影响当前回复。原因很简单:OOC 出现在输入末尾。
如果你使用代理,jai-info 文档还提到一个值得注意的细节:空字段会被直接丢弃,而不是作为空白区块发送;自定义提示词也是 Janitor 少数不会自动包裹在 <Scenario> 或 <UserPersona> 等标签中的模块之一。你的文字会以无标签形式放在那里,所以如果希望模型把它当成规则集来读,最好自己加一行标题。
实际操作上,凡是希望到了第 80 轮仍然成立的内容,都不该只放在提示词字段里。用 Chat Memory 维护一份简短摘要,随着事实变化及时更新;把通用的回复行为规则留在提示词字段。不要想当然地认为这个分工一定有效,最好在第 80 轮实际验证。
五个提示词模块,每个只解决一个问题
前四个放进 Advanced Prompt 或 Custom Prompt 字段,第五个放进 Chat Memory。一次只粘贴一个,运行 6 轮;只有当你能明确说出它带来了什么变化时,才保留它。五个模块一口气全塞进去,最后通常只会得到一个无法排查的“大提示词”。
阻止机器人替你的角色说话
这是 r/JanitorAI_Official 里经常出现的反馈,也是最需要斟酌措辞的一类问题。不要只告诉机器人“不该做什么”,还要明确告诉它“应该写什么”。
Write only {{char}}, the world, and side characters.
{{user}}'s dialogue, actions, thoughts and decisions belong to {{user}} alone.
When {{char}} would need {{user}}'s response, end the reply on the action or question that invites it.
Treat {{user}}'s latest message as the current truth of the scene.
社区里被广泛引用的排障讨论还建议在 Persona 中明确宏的定义:写出 {{user}} = Name,并说明 {{user}} 不是 {{char}}。不过不要期待它百分之百稳定。在一篇讨论机器人抢走用户角色控制权的长帖中,有人这样评价标准解决方案:
“有 80% 的效果”——u/NextCompetition6019,r/JanitorAI_Official
限制回复长度,但别把描写一起砍掉
Default to 2–3 paragraphs. Expand only when {{user}} asks for detail.
Lead with what {{char}} does and says in the current moment.
Open each reply with new material rather than restating {{user}}'s message.
相比段落数量,“不要复述”这一句更关键。机器人如果先把你的输入重复一遍,回复的一半篇幅就已经被消耗掉了,真正的新故事还没开始。
固定视角和时态
Narrate {{char}} in close third person, present tense.
Keep dialogue in quotation marks and actions in plain prose.
Match the register of {{user}}'s writing rather than escalating it.
很多人会跳过最后一条“匹配文风”。其实它能有效遏制文风逐渐变成浮夸的紫色 prose;而在倾向于模仿用户写法的模型路径上,它也给了模型一个具体的模仿目标。
让场景继续向前推进
Advance one meaningful beat per reply.
Let {{char}} act on their own motives instead of waiting for instructions.
Leave at least one thread unresolved at the end of each reply.
这个模块只适合被动、总在等指令的机器人。它和长度限制一起使用时,可能让场景推进得过快,所以保留两者之前,最好先组合测试。
给 Chat Memory 用的摘要模块
这一段完全不要放进提示词字段。
Place: [where the scene is happening]
Goal: [what {{char}} wants right now]
Fact: [one confirmed thing about the relationship]
Open thread: [what is unresolved]
Correction: [the most recent thing {{user}} fixed]
Janitor AI 官方的 Advanced Prompting 101 帮助文章,被多个社区指南引用来说明:长对话开始遗忘细节后,与其继续追加规则,不如写一份短摘要。重写这 5 行所占用的上下文,通常比再塞进一段规则少得多。
把规则写成模型能执行的动作
同一篇帮助文章建议,不要用“no”“don't”“never”和“stop”来堆规则,因为你点名描述某个行为,就等于把它继续放进了输入里:比如“no blood”中仍然包含 blood。文章里另一个被广泛引用的说法是:重复就是噪音。同一条规则换五种说法,只会增加 token,不会自动提高执行率。
更好的做法是加入明确的“改走哪条路径”规则。把每条负面命令改写成具体的替代动作。
| 不要这样写 | 改成这样 |
|---|---|
| “Never speak for {{user}}” | “Write only {{char}}'s speech, thoughts and actions” |
| “Don't ask me what I want to do next” | “Where {{char}} would ask for direction, have {{char}} take one action alone” |
| “Don't be repetitive” | “Open each reply with an event that has not happened yet” |
| “Avoid short replies” | “Give each reply two paragraphs: one action, one line of dialogue” |
“Avoid”和“refrain from”也不是什么例外,因为它们同样会把不想要的行为带进提示词。如果角色卡或示例对话里已经演示了你正在禁止的行为,通常还是角色卡更占上风。先修正源文本,再考虑添加规则。
按当前模型调整提示词长度
为 32k token 的代理上下文写好的提示词,直接粘贴到免费的 JLLM 会话里,往往就是“这个预设坏了”这类反馈背后的隐性原因。Advanced Prompting 101 中被反复引用的关键数字是:JLLM 的工作上下文大约为 8,000–9,000 tokens,而 Persona、角色定义、记忆、场景、你的提示词和完整对话都要共同分摊这部分空间。
| 配置 | 工作上下文(代理配置文章中的常见说法) | 合理的提示词规模 |
|---|---|---|
| JLLM(内置、免费) | 约 8k–9k tokens | 3–5 条短规则;过长的预设会挤占故事空间 |
| 通过代理使用 DeepSeek | 通常配置为 16k–32k | 规则加上 2–3 组示例对话 |
| 通过代理使用 GLM | 与 DeepSeek 类似 | 同上;换路由后要重新测试格式规则 |
做上下文预算时,可以先记住一个实用换算:大约 1,000 tokens 对应 750 个词。那些把提示词放在第 6 个模块中的第 5 个位置的排障文章,还把所有固定内容的上限设为 2,000 tokens,也就是 Persona、角色卡、记忆和提示词合计不超过这个数字。社区聊天机器人指南给出的标准更低:高级提示词一旦超过几百个 token,就可能开始挤掉它本来要优化的角色定义。
JLLM 和外部模型可能会把同一个机器人带向不同方向,所以换路由时,先把它视为一次代理配置决策,再重新测试提示词,不要默认原来的效果会原封不动保留下来。
<JAILBREAK=ON> 或 <AUTOPLOT=ON> 之类的方括号命令,也经常被当成 Janitor AI 的设置来传播。但发布这些命令的列表通常会明确说明,它们是针对特定代理使用的指令,与 Lorebook 代码、按请求切换模型等仅代理支持的功能放在一起;Janitor AI 官方文档并没有定义这些命令。没有对应解析器的路由不会理解它们,它们在那条路由上只会作为普通文本占用提示词空间。
自定义提示词到底值不值得保留
这个问题确实存在两派意见,而且分歧并不只是新手和老手之间的区别。Janitor AI 的一位版主在 2023 年发文称,自定义提示词“可以极大影响机器人行为”,而不设置提示词“可能改善”表现,随后又把结论放回了试错框架。类似“删掉 AP”的讨论会定期出现,回复也分成两边:有人清空字段后,JLLM 的输出更干净;也有人换成长一点的模块后,质量明显提升。
这两种结果其实都能从发送顺序中得到解释。提示词可以为一张模糊的角色卡补上结构,但如果角色卡本身已经写得很好,它也可能只是与示例、记忆和最近对话争夺上下文空间。
所以真正的问题不是“我的提示词写得好不好”,而是“这个机器人到底需不需要提示词”。用同样的开场内容运行 6 轮,做两次对比:一次清空字段,另一次只放入一个模块,然后从四个方面评分:
- 它有没有替你的角色写对白或动作?
- 声音和人设是否在全部 6 次回复中保持一致?
- 场景是在推进,还是停滞并不断重复?
- 它能否接受你在场景中途做出的修正?
在下结论之前,让一个模块至少经历两轮这样的测试。如果第二轮仍然看不出变化,问题就不在措辞。更可能是角色卡、首条消息或模型路由出了问题;继续追加规则,只会从故事里抢走更多上下文。
Janitor AI 提示词 FAQ
Janitor AI 提示词应该粘贴在哪里?
打开聊天的 API 或生成设置。如果使用 JLLM 路由,找到 Advanced Prompt 字段;如果通过代理连接,则查找 Custom Prompt 字段。
Advanced Prompt 和 Custom Prompt 有什么区别?
社区通常把 Advanced Prompt 视为 JanitorLLM 使用的字段,把 Custom Prompt 视为外部 API 和代理使用的对应字段。两者都用于承载全局回复行为规则,但它们在组装请求中的位置可能不同,所以换路由后要重新测试同一模块。
为什么我的 Janitor AI 提示词用了一段时间后就失效了?
聊天记录会追加在提示词模块之后,因此每增加一条消息,你的规则就离输入末尾更远一些。缩短提示词,把不能丢的规则移到 Chat Memory;如果只是想修正单次回复,则使用行内 OOC。
{{char}} 和 {{user}} 能在自定义提示词里使用吗?
可以。它们是分别代表角色和用户 Persona 的标准宏,观察到的代理路径模板也会替换这些占位符。为了减少测试变量,机器人制作者仍然会在 Persona 中明确写出 {{user}} = Name。
Janitor AI 提示词应该写多长?
JLLM 上建议控制在 3–5 条规则;16k–32k 的代理上下文可以稍微多写一些;所有固定内容合计控制在 2,000 tokens 以内。能够完整送达的 5 条规则,比被截断的 25 条更有用。
这一切背后的取舍仍然没有定论:提示词要短到足以在第 80 轮继续发挥作用,就不可能把你想要的一切都写进去;而且目前没有找到公开的、受控的对比测试,能够说明 JLLM 与常见代理模型之间的界线究竟在哪里。在这样的测试出现之前,最稳妥的默认方案仍然是:使用一段小而明确的模块,保存一份曾经有效的版本;如果一个做得不错的机器人并不需要提示词,也愿意把字段清空。
相关文章
- Janitor AI persona template:介绍同一上下文堆栈中与
{{user}}相关的部分 - Best AI models for roleplay:介绍如何选择能让你的提示词撑下去的模型