Files
Genarrative/docs/npc-conversation-situation-draft.md
高物 c49c64896a
Some checks failed
CI / verify (push) Has been cancelled
初始仓库迁移
2026-04-04 23:57:06 +08:00

4.0 KiB
Raw Blame History

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_breathshared_danger_coordination 两类情景下,对话应该:

  • 先接刚才发生的事
  • 先评价判断或身手
  • 句子更短
  • 少做完整背景说明

当前实现路径

上下文字段

StoryGenerationContext 目前已经承载:

  • 对话阶段控制
  • 三维风格
  • 情景标签
  • 压力级别
  • 最近共同经历
  • 本轮说话重点

prompt 注入

当前 prompt 会显式加入:

  • 当前 NPC 对话阶段控制
  • 当前对话情景控制

目的:

  • 不让模型自己从一堆底层状态里猜场合
  • 先让系统做好裁决,再让模型负责“怎么说”

下一步建议

1. 把 surfaceHook 改成更口语、更像现场句

当前最大风险不是结构不够,而是字段文案还可能像“作者说明”。

应优先改成:

  • 能直接对人说
  • 不像自我介绍
  • 不像任务摘要
  • 更像“站在现场会脱口而出的话”

2. 引入“问题命中”判断

不只看好感,也看玩家这次是不是问到了点上。

建议:

  • 好感够,但问题没命中 -> 仍保留
  • 好感够,问题命中 -> 松口一层

3. 使用 revealedFacts

后续可把已公开的信息记下来,避免:

  • 重复卖同一个关子
  • 前后口径反复横跳

4. 把开场第一段从通用剧情生成中进一步拆出

现在开场仍部分受通用剧情引擎影响。

更理想的方向:

  • 开场先走纯对白生成
  • 对话定稿后再推导后续选项

这样语言会比“剧情导演 + JSON + 选项合法性”混合生成更自然。

验收重点

改完后重点看这几类表现是否成立:

  1. 初见不再像互背设定卡
  2. 刚打完怪时,对话明显更短、更贴眼前
  3. 同一阶段下,不同性格角色表达方式确实不同
  4. 玩家和 NPC 都不会在第一轮自曝完整动机
  5. 同一个 NPC 连续几轮聊天时,信息释放节奏是连续的,不会忽冷忽热