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