# 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 连续几轮聊天时,信息释放节奏是连续的,不会忽冷忽热