193 lines
4.0 KiB
Markdown
193 lines
4.0 KiB
Markdown
# NPC 对话阶段与情景注入草案
|
||
|
||
## 目标
|
||
|
||
让 NPC 对话同时受三类因素控制,而不是只靠一大段 prompt 生硬约束:
|
||
|
||
1. 好感与信任阶段
|
||
2. 角色三维表述风格
|
||
3. 当前情景与刚刚共同经历
|
||
|
||
最终目标不是“少说设定”,而是“像真人一样按场合和关系逐步说”。
|
||
|
||
## 当前已经落地的控制层
|
||
|
||
### 1. 好感阶段
|
||
|
||
- `guarded`
|
||
- 低好感
|
||
- 只谈眼前局势、态度和试探
|
||
- `partial`
|
||
- 开始松口
|
||
- 给出表层理由或半真半假的说明
|
||
- `honest`
|
||
- 逐步触及真实动机的轮廓
|
||
- `deep`
|
||
- 可以谈更深层的来历、目标和旧事
|
||
|
||
### 2. 三维表述风格
|
||
|
||
- `guardStyle`
|
||
- `blunt` 直硬
|
||
- `wary` 谨慎
|
||
- `evasive` 回避
|
||
- `measured` 克制
|
||
- `warmStyle`
|
||
- `dry` 冷淡
|
||
- `steady` 平稳
|
||
- `gentle` 温和
|
||
- `teasing` 带点松弛感
|
||
- `truthStyle`
|
||
- `direct` 说真话时直给
|
||
- `fragmented` 碎片式透露
|
||
- `deflecting` 先绕一下再说
|
||
|
||
### 3. 情景注入
|
||
|
||
当前新增的情景标签:
|
||
|
||
- `first_contact_cautious`
|
||
- 初见试探
|
||
- `camp_first_contact`
|
||
- 营地第一轮正式对接
|
||
- `camp_followup`
|
||
- 营地里承接上轮旧话头
|
||
- `post_battle_breath`
|
||
- 刚打完一轮冲突后的短暂松动
|
||
- `shared_danger_coordination`
|
||
- 危险未解除,优先短句对接
|
||
- `private_followup`
|
||
- 已经聊过一轮,不再是模板式初见
|
||
|
||
配套压力标签:
|
||
|
||
- `high`
|
||
- `medium`
|
||
- `low`
|
||
|
||
并补充:
|
||
|
||
- `recentSharedEvent`
|
||
- 刚刚共同经历了什么
|
||
- `talkPriority`
|
||
- 这轮优先先说什么
|
||
|
||
## 设计原则
|
||
|
||
### 1. 把“知道什么”和“愿意说什么”拆开
|
||
|
||
角色完整设定始终存在,但 prompt 不应长期直接暴露:
|
||
|
||
- `reason`
|
||
- `goal`
|
||
- 完整背景
|
||
- 旧事全貌
|
||
|
||
而是按阶段只注入:
|
||
|
||
- `surfaceHook`
|
||
- `immediateConcern`
|
||
- `guardedMotive`
|
||
- `reason`
|
||
- `goal`
|
||
|
||
### 2. 初见先谈现场,不先谈人生
|
||
|
||
无论玩家还是 NPC,初次见面都优先:
|
||
|
||
- 眼前危险
|
||
- 当前判断
|
||
- 彼此态度
|
||
- 一点没说透的钩子
|
||
|
||
不优先:
|
||
|
||
- 完整来意
|
||
- 长篇背景
|
||
- “我们的目标一致”
|
||
- 正式自我介绍
|
||
|
||
### 3. 刚打完怪时优先短句
|
||
|
||
`post_battle_breath` 和 `shared_danger_coordination` 两类情景下,对话应该:
|
||
|
||
- 先接刚才发生的事
|
||
- 先评价判断或身手
|
||
- 句子更短
|
||
- 少做完整背景说明
|
||
|
||
## 当前实现路径
|
||
|
||
### 上下文字段
|
||
|
||
`StoryGenerationContext` 目前已经承载:
|
||
|
||
- 对话阶段控制
|
||
- 三维风格
|
||
- 情景标签
|
||
- 压力级别
|
||
- 最近共同经历
|
||
- 本轮说话重点
|
||
|
||
### prompt 注入
|
||
|
||
当前 prompt 会显式加入:
|
||
|
||
- 当前 NPC 对话阶段控制
|
||
- 当前对话情景控制
|
||
|
||
目的:
|
||
|
||
- 不让模型自己从一堆底层状态里猜场合
|
||
- 先让系统做好裁决,再让模型负责“怎么说”
|
||
|
||
## 下一步建议
|
||
|
||
### 1. 把 `surfaceHook` 改成更口语、更像现场句
|
||
|
||
当前最大风险不是结构不够,而是字段文案还可能像“作者说明”。
|
||
|
||
应优先改成:
|
||
|
||
- 能直接对人说
|
||
- 不像自我介绍
|
||
- 不像任务摘要
|
||
- 更像“站在现场会脱口而出的话”
|
||
|
||
### 2. 引入“问题命中”判断
|
||
|
||
不只看好感,也看玩家这次是不是问到了点上。
|
||
|
||
建议:
|
||
|
||
- 好感够,但问题没命中 -> 仍保留
|
||
- 好感够,问题命中 -> 松口一层
|
||
|
||
### 3. 使用 `revealedFacts`
|
||
|
||
后续可把已公开的信息记下来,避免:
|
||
|
||
- 重复卖同一个关子
|
||
- 前后口径反复横跳
|
||
|
||
### 4. 把开场第一段从通用剧情生成中进一步拆出
|
||
|
||
现在开场仍部分受通用剧情引擎影响。
|
||
|
||
更理想的方向:
|
||
|
||
- 开场先走纯对白生成
|
||
- 对话定稿后再推导后续选项
|
||
|
||
这样语言会比“剧情导演 + JSON + 选项合法性”混合生成更自然。
|
||
|
||
## 验收重点
|
||
|
||
改完后重点看这几类表现是否成立:
|
||
|
||
1. 初见不再像互背设定卡
|
||
2. 刚打完怪时,对话明显更短、更贴眼前
|
||
3. 同一阶段下,不同性格角色表达方式确实不同
|
||
4. 玩家和 NPC 都不会在第一轮自曝完整动机
|
||
5. 同一个 NPC 连续几轮聊天时,信息释放节奏是连续的,不会忽冷忽热
|