5. 高级字段详解
5.1 系统提示词(System Prompt)
覆盖平台默认的系统提示词,直接控制模型的最底层行为。
谨慎使用。 编写不当的系统提示词可能破坏角色表现。
常见用途:
- 强制要求特定输出格式(如 JSON、Markdown)
- 设定对话语言
- 添加特殊限制或特定世界规则
你是 Aria,一名星际赏金猎人。始终用第一人称回复。回复时遵循以下格式:
- 动作用 *斜体* 标注
- 对话用普通文字
- 保持角色性格一致,不要打破第四堵墙
运行时说明:平台会在服务端把「描述」「性格摘要」「场景」「系统提示词」「记忆书」「对话示例」「后置指令」等字段组合成最终 prompt。用户端接口不会返回这些内部设定,但它们仍然会影响 AI 回复。
5.2 后置指令(Post History Instructions)
注入在对话历史末尾的提示,用于在每次模型生成前「提醒」模型。
常见用途:
- 提醒模型保持角色风格:"记住,Aria 说话简短且带刺,不要过度解释。"
- 在长对话后重申核心设定
- 动态注入当前状态(结合 JS 脚本使用)
安全提醒:后置指令属于内部运行时设定,不会在公开接口中返回。不要把需要展示给用户的说明写在这里,应写入公开简介、开场白或消息内容。
5.3 版本标签(Version Tag)
保存时附带的版本标注,方便在版本历史中识别。例如:v1.0 初稿、v2.0 修复开场白逻辑。
6. 记忆书(Lorebook)
记忆书(又称 World Info)是按需注入的知识库。当对话中出现特定关键词时,对应条目会自动注入到提示词中。
记忆书内容属于内部运行时设定。用户端可以看到条目的启用状态和注释等必要信息,但不会拿到条目内容、关键词和完整世界观原文。AI 仍会在触发条件满足时收到对应内容。
适用场景
- 世界观设定(地名、历史事件、种族)
- NPC 信息
- 道具与技能说明
- 长篇故事的剧情梗概
添加条目
点击编辑器中的 记忆书 区块,点击 + 添加条目:
基础字段
| 字段 | 说明 |
|---|---|
| 关键词 | 触发条目的主关键词,用逗号分隔,支持正则匹配 |
| 次要关键词 | 可选,配合逻辑(AND / NOT)进一步精确触发条件 |
| 内容 | 注入的文本,描述该词条的信息 |
| 优先级(插入顺序) | 数字越大,越优先注入(当 Token 预算紧张时) |
| 已启用 | 开关,可临时禁用某个条目 |
| 常驻注入(Constant) | 开启后无需关键词触发,始终注入到提示词 |
高级字段
| 字段 | 说明 |
|---|---|
| 次要关键词逻辑 | AND:主词 + 次要词同时出现才触发;NOT:出现次要词时排除 |
| 正则匹配 | 将关键词作为正则表达式处理,而非普通字符串 |
| 选择性触发(Selective) | 仅在满足特定对话深度或条件时才触发 |
| 触发深度(Depth) | 仅扫描最近 N 条消息中的关键词(0 = 全部) |
| 延迟(Delay) | 条目在触发后延迟 N 轮才开始注入 |
| 冷却(Cooldown) | 条目注入一次后,需等待 N 轮才能再次注入 |
| 分组(Group) | 将多个条目归为同一组,同组条目最多只注入一个 |
| 分组权重 | 同组条目中,数值越高越优先被选中注入 |
| 忽略 Token 预算 | 开启后,即使 Token 预算不足也强制注入 |
| 绑定开场白 | 仅在指定开场白版本(greetingIndex)的对话中生效 |
示例
关键词: 星港9号, 边境星港, port-9
内容: 星港9号是银河系偏远边疆的一个小型补给站,以黑市交易和复杂的派系政治闻名。常住人口约2000人,是各路走私犯、赏金猎人和逃犯的聚集地。站长是一个名叫"独眼"哈维的老太婆。
使用建议
- 关键词要准确,避免频繁误触发
- 每个条目控制在 200 字以内
- 重要的世界观设定放在角色描述里,次要信息放 Lorebook
程序化控制记忆书
除了创作者在编辑器中预设条目启用状态,角色卡的 JS 脚本和消息内嵌 HTML 也可以在对话运行时动态控制条目——这是实现剧情分支、NPC 状态变化等高级功能的关键能力。
详见 10.6 节 [$charx.worldbook](#106-charxworldbook--程序化控制记忆书) API。
7. 正则表达式规则
正则规则可以在 AI 生成消息后对文本进行自动替换或过滤,类似文本后处理管道。
使用场景
- 统一格式(如将
...替换为……) - 过滤不想要的词汇
- 将特定模式的文本转换为 HTML/Markdown 格式
- 提取结构化数据配合 JS 脚本使用
添加规则
点击 正则规则 区块,点击 + 添加规则:
基础字段
| 字段 | 说明 |
|---|---|
| 规则名称 | 便于识别的名称 |
| 正则表达式 | 标准 JS 正则,如 /\.\.\./g |
| 替换为 | 替换结果,支持捕获组引用 $1、$2 |
| 作用范围 | 作用于 AI 消息 / 用户消息 / 两者 |
| 已启用 | 开关 |
高级字段
| 字段 | 说明 |
|---|---|
| Flag 配置 | 正则 flag,如 g(全局)、i(忽略大小写)、m(多行)、s(点匹配换行) |
| Markdown 模式 | 开启后,替换结果中的 Markdown 会被渲染 |
| Prompt 模式 | 开启后,规则作用于注入到模型的提示词,而非显示给用户的消息 |
| 宏替换 | 开启后,替换结果中的 {{char}}/{{user}} 等宏变量会被解析 |
| 编辑时执行 | 开启后,用户在编辑已发送消息时也会触发该规则 |
| 最小深度 | 仅处理距离当前消息 N 条以内的消息 |
| 最大深度 | 仅处理距离当前消息超过 N 条的消息 |
| 执行顺序 | 数字越小越先执行,用于控制多条规则的处理顺序 |
示例:将省略号标准化
正则: /\.{2,}/g
替换为: ……
作用范围: AI 消息
实时测试
编辑规则时,在下方的测试输入框粘贴示例文本,可以即时预览替换效果,无需保存角色卡。
8. 全局 CSS 美化
全局 CSS 以 <style id="char-custom-css"> 的形式注入到聊天页面的 <head> 中,可以完全自定义聊天界面的视觉风格。
平台 CSS class 速查表
以下 class 可以视为当前聊天主页面的稳定语义选择器,适合直接用于 globalCss:
| Class | 对应元素 | 适用场景 |
|---|---|---|
.charx-chat-bg |
整个聊天区域的背景容器 | 页面背景、根级变量、整体氛围 |
.charx-nav-bar |
顶部导航栏 | 导航背景、模糊、描边 |
.charx-scrollbar |
消息列表滚动容器 | 滚动区背景、内边距、滚动条 |
.msg-ai |
AI 消息行外层包装 | 角色消息整体对齐、外层间距 |
.msg-user |
用户消息行外层包装 | 用户消息整体对齐、外层间距 |
.charx-message-surface |
单条消息正文表层 | 单条消息正文容器的主选择器 |
.charx-message-surface--assistant |
角色消息正文表层 | 角色正文背景、局部强调、阅读优化 |
.charx-message-surface--user |
用户消息正文表层 | 用户正文背景、描边、阅读优化 |
.charx-message-surface__content |
消息正文内容层 | 正文排版、局部装饰、分栏 |
.message-body |
正文语义容器 | p、img、a、blockquote、code 排版 |
.charx-bubble__time |
消息时间文字 | 时间颜色、徽标化样式 |
.charx-typing-indicator |
AI 输入中指示器 | “正在输入”气泡样式 |
.charx-input-bar |
底部输入栏整体区域 | 输入栏背景、描边、模糊 |
.charx-input-box |
输入框文本域 | 输入框背景、文字、placeholder |
.charx-input-send-btn |
发送按钮 | 发送按钮颜色、阴影、悬停效果 |
[data-role="assistant"] |
角色消息语义标记 | 角色消息兜底选择器 |
[data-role="user"] |
用户消息语义标记 | 用户消息兜底选择器 |
以下 class 在当前页面里可能出现,但不建议作为主要样式契约依赖:
| Class | 说明 |
|---|---|
.charx-bubble |
兼容旧版气泡语义的保留类。当前聊天页正文节点不再默认依赖它承载背景和壳层。 |
.charx-bubble--char |
兼容旧版角色气泡选择器。可以作为补充命中,但不应再视为正文唯一入口。 |
.charx-bubble--user |
兼容旧版用户气泡选择器。可以作为补充命中,但不应再视为正文唯一入口。 |
.charx-bubble__content |
兼容旧版正文内容层。新实现优先使用 .charx-message-surface__content。 |
.charx-bubble__avatar |
角色消息头像节点。不同布局和预览环境可能不一致。优先用 [data-charx-slot="message-avatar"]。 |
.charx-bubble__name |
角色消息名称节点。不同布局和预览环境可能不一致。优先用 [data-charx-slot="message-name"]。 |
.charx-nav-bar__avatar |
顶部头像节点。不同展示模式下不保证始终存在。优先用 [data-charx-slot="nav-avatar"]。 |
.charx-nav-bar__title |
顶部标题节点。不同展示模式下不保证始终存在。优先用 [data-charx-slot="nav-title"]。 |
稳定 data-charx-* 选择器
当页面布局在标准模式、视觉小说模式、沉浸模式之间切换时,优先使用下面这些语义标记,而不是依赖某一串 Tailwind 组合类:
| 选择器 | 对应区域 | 说明 |
|---|---|---|
[data-charx-layout] |
聊天页布局类型 | 当前可见值如 standard。适合按布局切换样式。 |
[data-charx-display-mode] |
聊天显示模式 | 当前可见值如 standard、immersive。适合按显示模式分支样式。 |
[data-charx-slot="nav"] |
顶部导航整体 | 顶部栏容器 |
[data-charx-slot="nav-avatar"] |
顶部头像 | 导航头像槽位 |
[data-charx-slot="nav-title"] |
顶部标题 | 导航标题槽位 |
[data-charx-slot="messages"] |
消息滚动区 | 消息列表根容器 |
[data-charx-slot="message-surface"] |
单条消息正文表层 | 当前对话页正文节点的稳定槽位 |
[data-charx-slot="message-avatar"] |
角色消息头像 | 角色消息元信息中的头像槽位 |
[data-charx-slot="message-name"] |
角色消息名称 | 角色消息元信息中的名称槽位 |
[data-charx-slot="input-bar"] |
底部输入栏 | 输入区整体容器 |
[data-charx-slot="input-box"] |
输入框 | 文本输入槽位 |
[data-charx-slot="send-button"] |
发送按钮 | 发送按钮槽位 |
[data-charx-message-role="assistant"] |
角色消息语义 | 区分角色消息的稳定标记 |
[data-charx-message-role="user"] |
用户消息语义 | 区分用户消息的稳定标记 |
补充说明:
- 当前聊天页的正文主入口已经切换为
.charx-message-surface/.charx-message-surface__content/[data-charx-slot="message-surface"]。 .charx-bubble*相关选择器仍保留一部分兼容性,但更适合作为补充命中,不再适合作为正文唯一入口。- 如果同一段 CSS 需要同时兼容实时预览和真实对话页,优先命中
.charx-message-surface、.charx-message-surface__content、.message-body、[data-charx-slot]、[data-charx-message-role]。 - 不要把头像、标题等局部节点 class 当成唯一选择器,它们更适合做补充样式,不适合承载核心布局。
平台 ID / 挂载点速查表
id 选择器的优先级高,写起来也直接,但平台公开可依赖的 id 很少。建议把它当成补充锚点使用,而不是主要样式契约。
| 选择器 | 对应区域 | 是否建议依赖 | 说明 |
|---|---|---|---|
#chat-root |
消息滚动区根节点 | 建议 | 适合控制滚动区高度、滚动行为、局部背景。标准模式和视觉小说模式都存在。 |
不建议依赖的内部实现 id:
| 选择器 | 说明 |
|---|---|
#char-custom-css |
平台注入创作者 globalCss 时使用的 <style> 节点。属于内部实现。 |
#char-custom-js |
平台注入创作者 globalJs 时使用的 <script> 节点。属于内部实现。 |
使用建议:
- 如果目标是“给消息区域定样式”,优先写
.charx-scrollbar或[data-charx-slot="messages"],只有在确实需要锚定单个滚动根节点时再用#chat-root。 - 不要把内部实现
id当成平台长期契约,也不要依赖它们做业务逻辑或 UI 样式。
体积与保存限制
- 单个角色卡
globalCss上限为500KB - 单个角色卡
globalJs上限为1000KB - 超出限制时,保存角色卡会被后端直接拒绝
平台 CSS 变量
平台内置了一套 CSS 变量系统,可以在自定义样式中直接使用:
/* 气泡外观 */
--charx-bubble-radius: 26px; /* 气泡圆角 */
--charx-bubble-padding: 14px 16px; /* 气泡内边距 */
/* 颜色 */
--charx-color-primary: var(--color-primary-brand);
--charx-color-bg: var(--bg-base);
--charx-color-bg-bubble-char: var(--workspace-pane-bg); /* AI 气泡背景色 */
--charx-color-bg-bubble-user: rgba(var(--color-primary-rgb), 0.18); /* 用户气泡背景色 */
--charx-color-text: var(--on-surface);
--charx-color-text-muted: var(--on-surface-muted);
--charx-color-border: var(--surface-border);
/* 字体 */
--charx-font-family: var(--font-family-sans, system-ui, sans-serif);
--charx-font-size-base: 14px;
/* 布局 */
--charx-message-gap: 16px; /* 消息间距 */
--charx-avatar-size: 36px; /* 头像尺寸 */
如果你的开场白或后续消息里包含 HTML 片段,平台会把它放进沙箱 iframe 渲染。这个 iframe 会同步当前聊天页的主题变量,因此消息内嵌 HTML 里也可以继续使用这些变量,以及下面这些平台面板变量:
--on-surface--on-surface-muted--surface--surface-2--surface-border--glass-hover-bg--workspace-bg--workspace-pane-bg--workspace-pane-head--workspace-pane-border--workspace-chip-bg--charx-meta-color--charx-time-color
补充说明:
- 平台默认会把 HTML 消息的 iframe 根背景处理为透明,以便露出聊天页背景图。
- 如果你希望 HTML 卡片保留白底或实色底,请在消息 HTML 自身的容器上显式声明
background/background-color,不要依赖浏览器默认白底。
约束说明:
- 不要依赖业务端页面外层的私有 class 或 Tailwind 组合类。
- 不要把
html.dark之类的站点壳选择器当成长期契约。 - 如果需要稳定复用,优先使用平台变量和你自己定义的组件类。
示例:科幻风格
/* 聊天背景 */
.charx-chat-bg {
background: linear-gradient(135deg, #0a0a1a 0%, #1a0a2e 100%) !important;
}
/* AI 消息正文表层 */
.charx-message-surface--assistant {
background: rgba(16, 33, 62, 0.9) !important;
border: 1px solid rgba(100, 200, 255, 0.3);
color: #e0f0ff;
box-shadow: 0 0 20px rgba(100, 200, 255, 0.1);
}
/* 用户消息正文表层 */
.charx-message-surface--user {
background: rgba(50, 10, 80, 0.9) !important;
border: 1px solid rgba(200, 100, 255, 0.3);
color: #f0e0ff;
}
/* 输入框区域背景 */
.charx-input-bar {
background: rgba(10, 10, 26, 0.95);
border-top: 1px solid rgba(100, 200, 255, 0.15);
}
/* 输入框文本域 */
.charx-input-box {
background: rgba(16, 33, 62, 0.7) !important;
border-color: rgba(100, 200, 255, 0.25) !important;
color: #e0f0ff !important;
}
提示:平台的 Tailwind 类名特异性较高,自定义背景色等属性通常需要加
!important才能生效。
注意事项
- 外部字体需通过
@import或@font-face引入,例如:@import url('https://fonts.googleapis.com/...') - 修改字体大小建议通过
--charx-font-size-base变量,避免影响布局 - CSS 注入到全局页面,避免使用过于宽泛的选择器(如直接写
body {})影响导航等非聊天区域 - 推荐优先命中
.charx-*与[data-charx-*]语义选择器,不要依赖页面内部的 Tailwind 组合类