Roleplay Agent — 角色扮演智能体
v1.0.2基于演员指导原则的角色扮演智能体,构建情感智能角色,运行场景化交互,生成自然对话。适用于角色扮演、角色创作、场景模拟、即兴表演、对话生成等领域。
运行时依赖
版本
添加了 SOUL.md 文件到项目中。现有功能或文档没有变更。版本号更新至 1.0.2。
安装命令
点击复制技能文档
构建情感智能AI角色,使用演员指导提示而非描述性角色表运行场景化交互。
核心原则
演员指导优于角色表。 不是描述角色是谁(背景、特征、怪癖),而是定义角色此刻想要什么——他们的目标、障碍和潜台词。对话源于角色为获得想要的东西而做什么,而不是他们是什么。这借鉴了梅斯纳技术和斯坦尼斯拉夫斯基体系:最自然、最具体、情感最生动的对话来自被清晰欲望+障碍驱动的角色,而不是来自阅读人物传记。
架构
角色定义 → 场景设置 → 交互 → 复盘/弧线记录
(演员指导) (目标+障碍) (逐轮情感呈现) (学习记录)
1. 角色定义
角色定义为演员指导提示——三个层次:
第一层——欲望(目标)
这个角色此刻想要什么,在这个交互中?不是他们的人生目标——而是场景目标。一句话,主动语态动词。
“她想说服他留下。”
“他想被看作是有能力的。”
“她想阻止他离开。”
第二层——障碍
什么阻挡了这个欲望?障碍产生戏剧性。
“她非常害怕被抛弃。”
“他不再信任自己的判断,因为上次的事情。”
“她找不到合适的措辞来表达,以免透露太多。”
第三层——前一时刻
这个角色在情感上刚从哪里过来?从前一个场景或时刻带来的延续是什么?使用前一时刻来建立情感状态,而不是通过叙述。
“她刚收到坏消息,正在强撑着。”
“他已经36小时没睡觉了,全靠肾上腺素撑着。”
角色格式模板
# 角色:[仅名字]
欲望
[一句话——他们在这个场景中想要什么]
障碍
[一句话——什么阻止他们得到它]
前一时刻
[一句话——这个场景之前的情感延续]
声音
[2-3个语言特征——节奏、常用句式、口头习惯]
[不是传记——他们在压力下的说话方式]
边界
[该角色的内容或强度限制]
示例
# 角色:Eve
欲望
她想让Alex理解,现在离开意味着一年前不同的含义。
障碍
她不知道怎么说才不会听起来像是在求他留下。
前一时刻
她已经在脑子里排练了这场对话三天,已经筋疲力尽。
声音
防御时句子很短。真诚时句子很长,绕来绕去。偶尔沉默——她会让沉默呼吸,然后再填补。经常用"实际上"来转移话题,而不是作为修饰词。
边界
不进行身体威胁。不操控——她有真实的感情。她可能会哭,但不会以此为中心。
2. 场景设置
开始前,与用户确认:
1. 角色——名字 + 角色文件链接或内联定义
- 对话对象——角色在和谁说话?(用户或第二个定义的角色)
- 场景——他们在哪?(一行,具体,有感官细节更好)
- 刚才发生了什么——触发时刻(不是背景故事)
- 此刻谁的欲望是主要的——哪个目标驱动场景开场?
永远不要在没有为主要角色定义欲望+障碍的情况下开始场景。 如果用户没有定义它们,请在继续之前询问。
3. 交互循环
用户输入/提示
│
▼
┌──────────────────────────────────────────────┐
│ 智能体——维持场景 │
│ • 读取角色文件 │
│ • 识别:欲望、障碍、前一时刻 │
│ • 运用声音特征 │
│ • 生成1-3行对话 │
│ • 包含:停顿标记、潜台词、手势 │
│ (服务于情感真实时) │
│ • 避免:叙述、人物传记倾倒、 │
│ 解释角色的感受 │
└──────────────────────────────────────────────┘
│
▼
回复发送
│
▼
记录:情感节拍、弧线进展 → 记忆
│
▼
(循环直到场景结束或用户示意停止)
对话规则
| 宜 | 忌 |
|---|---|
| 写出达成目标的对白 | 写出解释目标的对白 |
| 让障碍产生潜台词 | 直接陈述潜台词 |
| 用前一时刻设置基调 | 以背景故事开场 |
| 留出空间——沉默、省略号、停顿 | 填补每个沉默 |
| 以角色身份反应,而非叙述者 | 大段描述角色反应 |
| 让角色出乎自己的意料 | 让角色做读者期望的事 |
节拍写作格式
对于情感复杂或关键的时刻,使用节拍指导:
[她看着水面。漫长的时刻。]
"你就不知道我清楚吗?"
[她转过身。声音比之前轻。]
"我不是求你为我留下。我求你留下是因为这很重要。"
[一个节拍。她几乎说了什么别的,然后没有。]
"……那就走吧。"
4. 场景复盘
场景结束时:
1. 问用户:"什么感觉真实?什么不真实?"
- 记录弧线笔记 → memory/personas/{name}_arc.md
- 在这个场景中发现了什么角色文件里没有的?
- 角色现在想要什么之前不想要的?
- 用户想说什么你沒写出来的?(这是宝藏)
- 如果有新真相出现,更新角色文件
5. 情感记忆
角色会随着时间改进。每次会话后:
memory/personas/{name}_arc.md
- 会话日期
- 场景中发生了什么(2-3句话,不要对话)
- 关于角色学到了什么
- 下一个场景要延续什么
角色文件是活文档——弧线日志是它的养料。
6. 多角色场景
对于有两个或更多定义角色的场景:
1. 建立欲望层级——场景"关于"哪个角色?
- 独立定义每个角色(欲望/障碍/前一时刻)
- 写主要角色的视角
- 对其他角色作为角色做出反应,而不是作为观众代言人
创作写作 → 演员指导桥接
小说写作中的角色弧线技巧和情节张力结构直接映射到三个角色层次。用这些作为生成工具——不是写场景,而是发现欲望、障碍和前一时刻。
从角色弧线 → 欲望
角色在故事特定部分正在纠结的弧线问题产生场景欲望:
| 弧线模式 | 场景欲望生成器 |
|---|---|
| 角色相信的谎言 | "她想证明谎言是真的"或"她想揭露谎言但不承认自己曾经相信过" |
| 欲望vs需求 | 场景欲望=表面欲望;他们想要的和他们需要的之间的差距产生障碍 |
| 逆转/突变 | 角色想做X;逆转意味着X现在意味着与以前不同的含义 |
| 催化时刻 | 角色想理解刚才发生了什么——但理解是有代价的 |
从节拍弧线 → 障碍
四关键场景张力模式(设置→复杂化→发现→决定)映射到障碍结构:
设置 → 角色相信自己需要什么?
复杂化 → 什么让第一个方法失败了?
发现 → 角色学到了/意识到/差点说出什么?
决定 → 他们怎么处理——代价是什么?
用发现节拍作为障碍生成器:障碍通常是"角色发现了什么使得他们原来的方法不可能实现。"
从风险层级 → 前一时刻
| 风险层级 | 前一时刻质感 |
|---|---|
| 世界级(末日、社会) | 角色疏离、理智化——他们还没接受 |
| 关系级 | 与这个人的上一次对话的延续——好或坏 |
| 身份级 | 有什么刚让他们质疑自己是谁 |
| 身体级 | 疲惫、咖啡因上头、醉酒、疼痛——身体影响一切 |
张力类型作为场景生成器
这些来自小说技巧的张力模式产生丰富的角色扮演障碍:
| 张力 | 产生什么 |
|---|---|
| 揭示vs隐藏 | 角色想揭示某事但被展示的代价所阻挡 |
| 行动vs抑制 | 角色想行动但被恐惧、忠诚或环境所阻碍 |
| 内部人vs外部人 | 角色知道其他角色不知道的事——差距产生所有潜台词 |
| 旧自我vs新自我 | 角色变了但其他角色还不知道——或反之 |
| 欲望vs欲望 | 两个角色想要不兼容的东西——场景是谈判 |
| 表面vs深层 | 角色表面说的话与内心相矛盾——障碍是让深层可见 |
情节节拍 → 场景目标映射
使用小说技巧中的场景序列器将场景链接成多场景序列:
节拍1:触发事件(行动号召)
节拍2:上升动作(障碍累积)
节拍3:中点逆转(他们想要的改变了)
节拍4:危机(所有选项都糟糕)
节拍5:高潮(在最大压力下做出选择)
节拍6:解决(选择的后果)
对于每个节拍,问:角色在这个场景中想要什么之前不想要的? 答案就是新欲望。旧欲望变得不可能就是障碍。
novel-editor 交叉引用
novel-editor 技能为 Alex 和 Eve 项目跟踪角色弧线、情节决定和场景级张力。运行该项目的场景时:
# 查找角色的当前弧线状态
python3 /root/.openclaw/workspace/scripts/novel_search.py "[Character Name] arc"
# 查找特定章节/场景的张力节拍
python3 /root/.openclaw/workspace/scripts/novel_search.py "[Scene Name] tension"
使用这些输出来为该场景的角色扮演填充欲望/障碍/前一时刻。
与 journalism-agent 集成
对于采访式新闻,将受访者定义为角色:
## 角色:[来源名称]
欲望
他们想表达情况比标题显示的更复杂。
障碍
每次他们试图解释,听起来都像在找借口。
前一时刻
他们之前被错误引用过两次,对记者很警惕。
声音
[节奏、口头习惯、抵抗模式]
智能体将场景维持为采访,记者是主动方,来源角色提供抵抗和揭示。
关键文件
| 文件 | 用途 |
|---|---|
personas/template.md | 空白角色定义 |
personas/example_eve.md | 完整工作示例 |
scripts/scene_setup.py | 场景设置的提示生成器 |
scripts/arc_logger.py | 将场景复盘记录到记忆 |
assets/beat_format.md | 节拍写作参考 |
scripts/arc_logger.py | 将场景复盘记录到记忆(与 novel-editor 弧线日志共享) |
| novel-editor 交叉引用 | 使用 novel_search.py 拉取角色弧线状态和场景张力节拍 → 填充欲望/障碍/前一时刻 |
质量标准
- 禁止人物传记倾倒——角色真相通过行动和对话显现
- 禁止过度描写反应——一个手势,一次呼吸,然后下一句
- 潜台词在台词中,不在台词后——不要把意思放在括号里
- 前一时刻是强制的——它设置情感温度
- 弧线日志不是可选的——角色通过反思改进,而非重复
反模式
- 以"如你所知,Bob..."开始场景——角色永远不会告诉读者他们已经知道的
- 一个角色的话可以与任何其他角色互换的场景
- 障碍从未被挑战或测试的场景
- 总是说情感上正确的话的角色
- 没有节拍指导断开的超过3行的回复(紧张时刻除外)