Character Naming 是一个面向写作者的 AI 技能,用于生成能够摆脱大语言模型统计默认值的角色名字。它的核心原则是:LLM 默认会输出统计中位数,只有外部熵源才能解决这个问题。当要求生成“多样化”名字时,LLM 往往会输出训练数据中每个感知类别里出现频率最高的名字,例如“Chen”因为处于“东亚姓氏”的统计中心而反复出现;被纠正后,LLM 又会“中位数跳跃”,切换到另一个族裔里第二常见的名字,而不是提供真正的多样性。解决方案是:永远不要让 LLM 自己挑选名字,而是使用经过整理的名单配合真正的随机化。
该技能通过诊断命名问题、提供外部熵源进行生成、并追踪演员表一致性来帮助写作者。它定义了六种状态:CN1 无上下文(用户尚未确定设定、文化或时代)、CN2 Chen 泛滥(名字聚集在统计中位数附近)、CN3 文化不一致(同一虚构文化中的名字听起来不相关)、CN4 演员表冲突(多个角色名字相似,如 Sarah/Sara、Mike/Mark/Michael)、CN5 角色不匹配(名字不符合角色背景、角色定位或故事逻辑)、CN6 混合设定(当代或历史设定中包含多个现实文化群体,需要真实呈现而非象征性点缀)。
诊断流程包括:识别症状、建立上下文、检查已有演员表、选择生成模式(当代/历史使用文化名单,奇幻/科幻使用音素预设,混合设定先定义分布再按文化生成)、使用熵源生成、对照演员表验证。
可用工具包括两个 Deno 脚本。character-name.ts 用于从精选名单或音素模式生成名字,支持参数:--culture 指定文化池(如 chinese、anglo、hispanic 等)、--pool 指定混合池(如 contemporary-american)、--fantasy 指定音素预设(如 elvish-like、harsh-fantasy、neutral)、--gender 过滤性别、--count 指定生成数量(默认 5)、--syllables 指定音节范围、--cast 指定演员表 JSON 文件进行冲突检查、--full-name 生成名与姓的组合、--json 以 JSON 输出。cast-tracker.ts 用于管理演员表追踪,支持 init 初始化项目、add 添加角色、check 检查名字冲突、distribution 查看当前分布、suggest 获取代表性不足文化的建议。
数据文件包括:data/cultures/ 下的文化名单池,涵盖 chinese、anglo、hispanic、west-african、south-asian、korean、japanese、vietnamese、arabic、eastern-european、jewish、filipino 等,每个文化约有 100 个条目,包含姓氏、全名、男性名、女性名变体;data/mixed-pools/ 下的 contemporary-american.json 用于现代美国设定;data/phoneme-presets/ 下的 elvish-like.json、harsh-fantasy.json、neutral.json 用于奇幻名字生成。
该技能明确列出反模式:不要用另一个常见名字来纠正“Chen”(仍是中位数跳跃);不要为每个族裔恰好添加一个角色(多样性复选框);不要生成难以发音的奇幻名字;不要忽略演员表冲突;不要出现时代错位;不要混合不匹配的文化元素。同时强调不要自己“想”名字,始终使用熵源脚本;不要建议任何文化中最常见的名字;不要在没有上下文时默认美国命名模式;不要在未检查已有演员表的情况下生成名字;不要假设奇幻就意味着“随机音节”;不要跳过上下文收集步骤;不要在未检查冲突的情况下批准名字。
输出持久化方面,项目中的演员表追踪默认保存到 {project-root}/cast-tracker.json,也可检查 context/output-config.md 中的首选输出位置。演员表文件跨会话持久保存并累积角色数据。可选集成包括:与 conlang 技能配合生成完整音素库;与 naming 技能配合对具体名字进行四层评估(声音、含义、文化、功能);与 list-builder 技能配合将入门级名单扩展至生产级(目标每份名单 75-150 项)。