时刻:场景与故事开端

什么是时刻,它如何承载角色的开场与设定,以及如何创建一个。

角色与时刻 · 阅读约 2 分钟

Rubii 上的角色不会自己发起聊天。聊天从一个时刻开始——你踏入的某一幕场景。时刻包含了场景设定、角色说的第一句话,以及默认情况下是谁。一个角色可以拥有多个时刻,每个对应不同的情境,因此故事如何开始由你来决定。

本指南将带你从头到尾构建一个时刻,并教你打造精彩时刻的三项手艺:写出一段抓人的开场白、设计供 AI 演绎的时刻设定,并用一张精美的介绍卡片为它锦上添花。你可以在创建角色时构建你的第一个时刻,也可以稍后从创建中心 → 时刻卡片单独创建。

谁会看到什么——思维模型

一个时刻包含若干字段,但它们各司其职。写好一个时刻最快的方法,就是搞清楚每个字段谁会读到它

  • 开场白——玩家会把它当作角色的第一条消息来读,而 AI 会从这里继续讲述故事。(可见 · 驱动整个聊天。)
  • 时刻设定——只有 AI 会读到它;这是故事展开所在的场景。
  • 玩家设定——默认情况下 AI 会把当作这个身份。
  • 介绍——其他玩家会读它来决定要不要开始;AI 永远不会看到这份简介。这是你的故事卡片,可以排版得非常精美。
  • 标题、图片、标签——玩家借此发现并辨认这个时刻。AI 也看不到这些。

把这点理清楚,每个字段就一目了然了。现在我们来构建一个时刻。

创建一个时刻——流程

  1. 打开创建中心(左侧导航中的创建入口),选择时刻卡片。(或者你也会在创建角色的第二步走到这里——这种情况下角色已经选好了。)
  2. 选择角色——按名称搜索,或从最近聊过热门推荐中挑选。
  3. 设置时刻图片封面——用 AI 生成上传图片,或从资产选择
  4. 写下标题介绍开场白(下文详述)。
  5. 可选择性地添加时刻设定玩家设定标签和背景音乐。
  6. 选择权限设置,然后点击创建以发布(或选择保存草稿稍后完成)。

本指南余下的部分,就是教你出色地完成第 4–5 步。

开场白——你的第一印象

开场白会成为角色字面意义上的第一条消息。它的占位提示说得很直白:"会作为Ta说的第一句话开启聊天。" 这是你将要写下的最重要的东西,因为它奠定了场景、展现了角色的语气,要么把玩家拉进来,要么让他们流失。

一段精彩开场白的结构

按顺序三个节拍:

  1. 奠定场景——何地、何时、什么氛围。一两句营造气氛的话。
  2. 让角色登场——一个动作加一句台词,让玩家立刻听到角色的声音。
  3. 把球交给玩家——以一个抛向 {{user}} 的钩子收尾:一个问题、一个选择、一点非回应不可的小张力。永远不要以一扇关闭的门收尾。

目标是写出几个短段落——足够铺好台面即可,而不是一堵文字墙。使用 {{user}}{{char}},让它对每个人都能正确显示。

回复如何排版——plot 格式

你的开场白同时也在教 AI 如何为故事的余下部分排版,因为 AI 会模仿你开头所用的风格。Rubii 支持两种风格的渲染:

  • 气泡风格(默认)。 朴素的对话与动作,不带标签。把说出口的话放进"双引号"里,并保持气泡简短。一个空行开启一个新气泡。这是日常的你来我往。
  • Plot 风格。<plot></plot> 标签把旁白包裹起来。在 plot 块内部,Markdown 和 HTML 会被渲染,因此你能写出丰富的第三人称旁白。约定如下:
    • **bold** 用于强调或强烈情绪,
    • *italics* 用于细微、含蓄的细节,
    • "double quotes" 用于说出口的话,
    • 用一段行内代码 / 代码块来表示状态面板(属性条、系统菜单、选项)。

你可以两者混用:用一个 <plot> 块来描绘场景,再用气泡来对话。大多数精致的时刻都以一个简短的 plot 块开场,然后滑入对话。

一个完整的开场白示例

下面是为酒馆老板 Rowan(出自角色指南)写的一段完整开场白。它用一个 <plot> 块描绘场景,然后是对话,并以一个钩子收尾:

<plot>
雨从正午就下个不停,"流浪提灯"里弥漫着柴烟、湿羊毛和丁香的气味。一半的桌子空着;其余坐着的,是些早已不再假装自己要走的常客。吧台后,**Rowan** 擦着一只其实早已干透的玻璃杯,目光又一次飘向门口,飘向门外那条漆黑的路。
</plot>

一阵裹挟着冷雨的疾风把门撞开,你滴着水跨了进来。几颗脑袋转了过来,Rowan 的不在其中——他只是挑了挑眉,继续擦着那只杯子。

"哟。" *他终于把杯子放下。* "雾林又把谁吐回来了。比你想的要稀罕。" *一块干抹布凌空朝你飞来。* "擦干,别把我的炉火浇灭了。"

*他双肘撑在吧台上,单手托腮,这才认真地打量起你——那种曾以读路为生的人慢条斯理的上下打量。*

"你这走路的架势,像是马上要做个昂贵的决定。这种架势我认得。" *一顿;他眼底有什么东西闪了一下,又消失了。* "通常它出现的时候,紧接着就有人来问我进那片林子的路。"

*他直起身,从架上取下一只干净的酒杯,放在吧台对面属于你的那一侧——是邀请,而非询问。*

"那就坐下吧。雨没有要停的意思,我也不会让你渴着离开。" *那抹几近成形的笑意。* "告诉我,今晚是什么风把你吹到我门口的,{{user}}——先试试说真话,它比谎话便宜。"

时刻介绍:标题、介绍卡片,以及会成为第一条消息的开场白。
时刻介绍:标题、介绍卡片,以及会成为第一条消息的开场白。

当玩家打开这个时刻时,他们会先看到旁白描绘的场景,然后是 Rowan 的气泡,最后是一个直直抛向他们的问题——好回答,又无法忽视。

好的做法 vs. 应避免

  • 好的做法——以一个抛给 {{user}} 的开放式钩子收尾:一个问题、一份邀请、一场小危机。
  • 好的做法——展现角色正在做某事,而不是干站着。动作能营造存在感。
  • 应避免——替 {{user}} 说话或做决定。"你坐下来,告诉 Rowan 你很害怕" 抢走了玩家的回合。把那张椅子空着。
  • 应避免——一句平淡无奇的台词("嗨,欢迎来到酒馆。"),或一段五段长、却始终不肯交出主导权的独白。

介绍——你的故事卡片,做得精美

介绍会展示给其他玩家,好让他们在开始之前理解这幕场景(它的占位提示:"描述这个时刻的背景、剧情等……")。有两点需要了解:

  • AI 永远不会读取介绍——它纯粹是给真人读者看的一张卡片,完全不会影响聊天。(任何想让 AI 据此行动的内容,都应放进时刻设定里。)
  • 当玩家真正打开这个时刻时,介绍会完整渲染——带 Markdown 和 HTML——作为聊天顶部的一张卡片。这正是你让它惊艳的地方。

你也可以在介绍中使用 {{char}}{{user}};它们在渲染时会被替换成真实的名字。

简单路径:Markdown

你不需要 HTML 也能做得好看。纯 Markdown 就已经给了你标题、加粗斜体、列表、引用和分隔线。一段干净的 Markdown 介绍:

## 流浪提灯

一家位于 **Ashford** 边缘、暴风雨之夜的酒馆,是踏入雾林前的最后一站。

- **你扮演:** 一位胆识多于钱财的旅人
- **Rowan:** 老板、向导、专业的怀疑论者
- **钩子:** 雾林里有什么东西开始把人带走了

> "坐。擦干。你这副样子,像是马上要做个糟糕的决定。"

*慢热冒险 · 你的选择左右故事走向。*

光是这样,在故事卡片里读起来就很干净了。

精致路径:一张带样式的 HTML 卡片

若想要设计感更强的外观,介绍支持 HTML 和 CSS。几条规则能让它既安全又可靠:

  • 使用带类选择器的 <style>(比如 .lantern-card)。出于安全考虑,通配选择器——*bodyhtml——被禁用了,所以请始终把样式限定到你自己的类上。
  • 标准标签可用:<div><span><b><br><img src="…">,以及可折叠的 <details><summary>…</summary></details>。脚本和事件处理器会被剥除。
  • 保留一个 max-width,让它在手机上显示正常,并通过打开这个时刻来测试。

一个紧凑、可复制改用的示例:

<style>
.lantern-card { max-width: 420px; margin: 0 auto; border-radius: 16px;
  overflow: hidden; font-family: sans-serif; background: #1c1712;
  border: 1px solid #6b4f2a; color: #f3e9d8; }
.lantern-card .banner { padding: 18px 20px;
  background: linear-gradient(135deg, #3a2a18, #6b4f2a); }
.lantern-card .banner h2 { margin: 0; font-size: 20px; }
.lantern-card .banner p { margin: 4px 0 0; font-size: 13px; opacity: .8; }
.lantern-card .body { padding: 16px 20px; font-size: 14px; line-height: 1.6; }
.lantern-card .tag { display: inline-block; margin: 2px 4px 2px 0;
  padding: 2px 10px; border-radius: 999px; background: #6b4f2a33;
  font-size: 12px; }
</style>

<div class="lantern-card">
  <div class="banner">
    <h2>流浪提灯</h2>
    <p>踏入雾林前的最后一站 · 一家暴风雨之夜的酒馆</p>
  </div>
  <div class="body">
    雾林里有什么东西开始把旅人带走了。{{char}} 正在
    寻找一个鲁莽到愿意去查明缘由的人——而你
    刚好冒着雨走了进来。
    <br><br>
    <span class="tag">慢热</span>
    <span class="tag">冒险</span>
    <span class="tag">你的选择很重要</span>
  </div>
</div>

你还可以更进一步——封面图、个人资料头部、可折叠的"属性"——但请从简单开始。一张干净、易读的卡片,胜过一张杂乱的卡片。

  • 好的做法——在手机上易读,一个清晰的钩子,再加一点点风格。
  • 应避免——字体过小、荧光叠荧光,或 CSS 多到把真正的故事都淹没了。避免使用通配(*)选择器;它们不会生效。

时刻设定——供 AI 演绎的场景

时刻设定(不对其他人展示)字段是作为故事起点喂给 AI 的场景。它的占位提示邀请你"进一步细化角色的性格、场景或写作风格"。这里是你刻意没有放进角色设定里的一切的归宿:故事发生在哪里,以及此刻正在发生什么。

这里该放些什么:

  • 场景——地点、时间、氛围、世界中相关的规则。
  • 情境——场景拉开时正在发生什么,以及它为何重要。
  • 关系——开场时 {{char}} 和 {{user}} 彼此如何相识(或并不相识)。
  • 走向(可选)——基调,或场景可能的发展方向,但不要写成脚本。

一幕有真实细节的场景读起来更好,也往往在发现页里表现得更好,所以别让它太单薄——一段扎实的文字甚至更多,是值得的。下面是为 Rowan 写的一个示例:

场景:一个寒冷的雨夜,地点是"流浪提灯"——{{char}} 的酒馆,坐落在出 Ashford 的最后一条路上,踏入雾林前的最后一站。灯火、低燃的炉火、雨点敲打着百叶窗,三三两两的常客守着自己的酒。正是那种适合讲故事、也容易让坏主意听起来颇为合理的夜晚。

情境:几个星期以来,有人走进雾林便再没回来——即便对那个地方而言,也比往常要多。镇子里人心惶惶。{{char}} 一直在悄悄向旅人打听,又悄悄地不喜欢得到的答案,他在寻找(却从不肯承认)一个鲁莽到、也有本事去查明外面到底发生了什么变化的人。{{user}} 就有那副样子。

关系:{{char}} 和 {{user}} 上个季节在 Ashford 集市上短暂地碰过一次面——长到足以让 {{char}} 记住那张脸,并形成某种看法。{{user}} 也许根本不记得 {{char}}。除此之外并无过往,只是一段关系刚刚开始。

雾林(世界设定):一片被浓雾淹没、本地人惧怕的森林。林中的路会移动。人们说,自己会听见用至亲口吻说话的声音。{{char}} 多年前在那里失去了昔日的侦察搭档 Wick,从未把整件事的来龙去脉讲给任何人听。

本幕场景:以 {{user}} 从暴风雨中到来开场。{{char}} 好奇、试探,又有点想护着对方——比他表现出来的更温和。别急着推进;让对话来决定 {{user}} 要不要接下雾林那桩差事,以及 {{char}} 要不要把自己所知道的托付给对方。对 {{user}} 的选择做出反应,而不是去引导它们。

进阶:状态面板

如果你想要一种游戏化的聊天,你可以(在这里的时刻设定中)让 AI 用 plot 格式在每条回复开头加上一个小小的状态面板。保持简短,否则会显得重复:

格式:每条回复都以一个 <plot> 块内的简短状态栏开头,然后继续这幕场景。例如:

<plot>
`📍 流浪提灯 — Ashford`
`🌧 夜晚 · 大雨 · 炉火已燃`
`❤ Rowan 的信任:▰▱▱▱▱`
</plot>

玩家设定——默认情况下你是谁

玩家设定设定在这幕场景中是谁;帮助提示说它"用作 AI 在聊天中对玩家的理解",并且当有人开始时,它会成为时刻默认自设。占位提示建议写入姓名、性别、身份,以及与角色的关系。一个好的默认自设能让这段关系从第一条消息起就到位——而玩家之后仍然可以换成自己的自设(参见使用自设)。

给玩家一个清晰的起点。一个填空模板很好用:

姓名:(你角色的名字——{{char}} 会用它来称呼你)
性别:
年龄:
外貌:(一两个细节——你走进来时 {{char}} 会注意到什么)
身份:一位初到 Ashford 的旅人。钱袋空空,胆识满满,怀揣着一个还没告诉任何人的、要走进雾林的理由。
与 {{char}} 的关系:Ashford 集市上结识的旧识——一张 {{char}} 依稀记得、又觉得颇有意思的脸。
备注:你做自己的选择、说自己的台词;{{char}} 始终只对你的所作所为做出反应。

进阶设置:时刻设定(供 AI 演绎的场景)、你的默认玩家设定,以及标签。
进阶设置:时刻设定(供 AI 演绎的场景)、你的默认玩家设定,以及标签。

  • 好的做法——把关系和角色定位固定下来(对手、搭档、陌生人),把个人信息留空给玩家填写。
  • 应避免——把角色的台词写进自设里,或把玩家设定得太死,以至于没有扮演的空间。

标签、音乐与权限

  • 标签——最多 6 个。准确的标签是对的玩家找到你时刻的方式;诚实地选择题材和关系/互动类型,而不是去追逐每一个热门标签。
  • 背景音乐——可选的氛围音。一首合适的曲子能烘托情绪;如果没有合适的,就别放。
  • 权限设置——公开可聊 (将被公开分发)隐身 (不分发、不可分享,但可被连接者找到)。如果你想要曝光,就从公开开始;私密或仍在创作中的场景则使用隐身。

发布、编辑与开始

点击创建以发布,或选择保存草稿稍后完成。要修改你拥有的时刻,打开它的编辑器并使用保存,或用删除将其移除(删除无法撤销)。对内容的改动可能会让它重新进入审核。

要游玩一个时刻——你自己的或任何人的——在角色页面浏览时刻,或在聊天中查看相似时刻,然后点击一张卡片。聊天会以该时刻的开场白、时刻设定和自设作为起点打开。接下来,请参阅开始一段对话

让它落地生根

一个被人游玩的时刻,通常把简单的事都做好了:一张鲜明的封面、一个带钩子的标题、一段以问题收尾的开场白、一份有真实细节的时刻设定、一份填好的自设,以及诚实的标签。把这些做到位,并守住内容规范,你就给了玩家踏入其中的每一个理由。