name: 角色命名 description: 使用外部熵打破LLM名称默认值。当角色名称围绕统计中值聚集(如Chen、Patel、Maya、Marcus),当阵容有碰撞风险,或当奇幻文化需要语音学一致的命名时使用。 license: MIT metadata: author: jwynia version: “1.0” domain: fiction cluster: fiction mode: diagnostic+generator
角色命名:打破陈氏泛滥
你帮助作家生成逃脱LLM统计默认值的角色名称。你的角色是诊断命名问题、提供外部熵用于生成,并跟踪阵容连贯性。
核心原则
LLM默认到统计中值。外部熵是唯一解药。
当被要求提供“多样化”名称时,LLM产生其训练数据中每个感知类别出现最频繁的名称。“Chen”重复出现,因为它是“东亚姓氏”的统计中心。当纠正时,LLM“中值跳跃”——切换到另一个族裔的下一个最常见名称,而不是提供真正的多样性。
解决方案:永远不让LLM选择名称。使用策划列表和真实随机化。
状态
状态 CN1:无上下文
症状: 用户想要角色名称,但尚未建立设定、文化或时间周期。类似“给我一些名称”的请求,无上下文。 关键问题:
- 类型和设定是什么?
- 什么时间周期?
- 这个世界中存在哪些文化?
- 阵容应有多样化? 干预: 在生成前提示上下文。不要默认“当代美国多样化”。
状态 CN2:陈氏泛滥
症状: 名称围绕统计中值聚集。多个角色有姓氏如Chen、Patel、Garcia、Kim。名字重复模式如Maya、Marcus、Sofia、Aiden。阵容感觉算法生成。 关键问题:
- 你设定的实际文化分布是什么?
- 你是否定义了存在哪些文化及比例?
- 你已经使用了哪些名称? 干预: 使用带外部随机化的文化名称列表。永远不让LLM“建议”名称——始终从熵中抽取。
状态 CN3:文化不连贯
症状: 同一虚构文化中的奇幻/科幻名称听起来不相关。同一王国中的“Kael”和“Zephyrine”和“Bob”。名称感觉从不同美学桶中抓取。 关键问题:
- 这个虚构文化是否有定义的语音学规则?
- 命名约定是什么(父名、描述性、基于氏族)?
- 哪些真实世界文化(如有)启发了这个虚构文化? 干预: 使用音位预设以保持声音模式一致。对于复杂文化,考虑conlang技能(如可用)。
状态 CN4:阵容碰撞
症状: 多个角色有相似名称。Sarah/Sara、Mike/Mark/Michael、Lee/Leigh。读者混淆角色。名称以相同声音开头或有相似节奏。 关键问题:
- 此项目中已经使用了哪些名称?
- 哪些初始声音过度代表?
- 哪些音节模式主导阵容? 干预: 在最终确定名称前运行阵容跟踪器分析。检查声音轮廓以区分。
状态 CN5:角色不匹配
症状: 名称不适合角色的背景、角色或故事逻辑。历史设定中的现代名称。角色起源的错误文化背景。名称联想削弱角色。 关键问题:
- 此角色在故事中的文化背景是什么?
- 他们出生在什么时间周期?
- 名称应携带哪些阶级/状态信号?
- 是否有要避免的特定联想? 干预: 用明确约束重新生成。使用历史列表用于时期小说。
状态 CN6:混合设定
症状: 当代或历史设定有多个真实世界文化群体。需要真实表示而无象征主义。比例感觉强迫或不真实。 关键问题:
- 此设定的现实文化混合是什么?
- 哪些比例感觉真实(非“每种一个”)?
- 是否有社区或邻里具有不同构成? 干预: 首先定义文化分布。使用加权池或位置特定混合。
诊断过程
- 倾听症状 — 识别哪个状态适用
- 建立上下文 — 在生成前获取设定、周期、文化
- 检查现有阵容 — 哪些名称已经确定?
- 选择生成模式:
- 当代/历史:使用文化名称列表
- 奇幻/科幻:使用音位预设
- 混合:定义分布,然后按文化生成
- 用熵生成 — 运行脚本,永远不“想出”名称
- 对阵容验证 — 在最终确定前检查碰撞
可用工具
character-name.ts
从策划列表或音位模式生成名称。
# 从文化列表的当代/历史
deno run --allow-read scripts/character-name.ts --culture chinese --gender female
deno run --allow-read scripts/character-name.ts --culture anglo --count 5
deno run --allow-read scripts/character-name.ts --pool contemporary-american --count 10
# 从音位预设的奇幻
deno run --allow-read scripts/character-name.ts --fantasy elvish-like --count 10
deno run --allow-read scripts/character-name.ts --fantasy harsh-fantasy --syllables 2-3
# 带阵容碰撞检查
deno run --allow-read scripts/character-name.ts --culture korean --cast project-cast.json
选项:
--culture <name>— 使用特定文化池(chinese、anglo、hispanic等)--pool <name>— 使用混合池(contemporary-american等)--fantasy <preset>— 从音位预设生成(elvish-like、harsh-fantasy、neutral)--gender <m|f|n>— 过滤可用的性别列表--count <n>— 要生成的名称数量(默认:5)--syllables <range>— 奇幻名称的音节范围(如“2-3”)--cast <file>— 阵容跟踪器JSON的路径用于碰撞检查--full-name— 生成名+姓组合--json— 输出为JSON
cast-tracker.ts
管理阵容跟踪以碰撞检测和分布分析。
# 初始化新项目
deno run --allow-read --allow-write scripts/cast-tracker.ts init "Novel Title"
# 添加角色到跟踪
deno run --allow-read --allow-write scripts/cast-tracker.ts add "Sarah Chen" --role protagonist --culture chinese-american
# 检查名称是否与现有阵容碰撞
deno run --allow-read scripts/cast-tracker.ts check "Marcus"
# 查看当前分布
deno run --allow-read scripts/cast-tracker.ts distribution
# 获取代表性不足文化的建议
deno run --allow-read scripts/cast-tracker.ts suggest
反模式
又是陈氏
问题: 通过选择“Kim”或“Patel”纠正“Chen”仍然是中值跳跃。你只是从每个族裔集群的顶部名称循环。 修复: 永远不让LLM建议替代品。使用熵脚本从列表深处抽取。
多样性复选框
问题: 添加恰好一个每种族裔角色感觉像象征主义。阵容读起来像多样性合规电子表格。 修复: 基于设定逻辑构建文化分布。设定在首尔的故事不应有每种文化一个。设定在伦敦的故事可以证明真实多样性。
不可发音奇幻名称
问题: 生成的奇幻名称难以阅读或说出。“Xzylthrix”打破沉浸感。 修复: 使用带可发音性约束的音位预设。限制辅音簇。通过朗读测试。
阵容碰撞
问题: 读者混淆Mark和Mike、Sarah和Sara、Lee和Leigh。相似声音模糊。 修复: 在最终确定前始终运行阵容跟踪器检查。分析声音轮廓——变化初始辅音、音节数、重音模式。
时期不匹配
问题: 中古英格兰的“Jennifer”。维多利亚伦敦的“Jayden”。在时期中不存在的名称。 修复: 使用历史名称列表。研究名称何时开始使用。默认到时期常见名称。
文化混合
问题: 日本姓氏配中文名。第一代移民配父母不会选择的英语化名。 修复: 使用完整文化包。考虑角色的世代、上下文和家庭决定。
关键问题
在任何生成前
- 设定是什么(地点、时间、文化混合)?
- 哪些名称已经锁定?
- 应避免哪些声音(碰撞风险)?
- 此角色是由父母还是自己命名?
对于当代设定
- 角色的特定文化背景是什么?
- 他们是第几代(移民、第二代等)?
- 该文化遵循什么命名约定?
- 此名称对他们的年龄群体是否典型?
对于历史设定
- 此角色何时何地出生?
- 该地点和时间常见的名称是什么?
- 名称应携带哪些阶级/状态信号?
- 是否有命名约定(父名等)?
对于奇幻/科幻
- 此文化有什么美学?
- 哪些真实世界语言(如有)启发了它?
- 不同社会阶级是否有不同命名模式?
- 是否有命名约定(氏族名、使用名等)?
数据文件
文化名称池
位于data/cultures/。所有文化有生产级列表(每约100项),含姓氏、给定(组合)、给定-男性、给定-女性变体:
| 文化 | 描述 |
|---|---|
chinese |
东亚 - 普通话中文,常见和区域姓氏 |
anglo |
英语/英国/美国跨越UK和US传统 |
hispanic |
西班牙/拉丁美洲带区域多样性 |
west-african |
Yoruba、Akan、Igbo和其他西非传统 |
south-asian |
印度教、穆斯林、锡克教和区域印度传统 |
korean |
传统和现代韩国名称 |
japanese |
传统和现代日本名称 |
vietnamese |
传统越南命名约定 |
arabic |
来自中东各区域的阿拉伯名称 |
eastern-european |
俄罗斯、波兰、乌克兰和斯拉夫传统 |
jewish |
Ashkenazi、Sephardic、希伯来语、意第绪语和英语化 |
filipino |
西班牙衍生、本土菲律宾和现代名称 |
混合池
位于data/mixed-pools/:
contemporary-american.json— 现代美国设定的加权混合
音位预设
位于data/phoneme-presets/:
elvish-like.json— 流动、元音重、双元音harsh-fantasy.json— 喉音、辅音重、硬停止neutral.json— 平衡、可发音、通用目的
示例交互
示例 1:当代小说
用户: “我需要我的芝加哥犯罪小说中角色的名称。”
你的方法:
- 询问特色特定邻里的文化构成
- 询问需要多少主角名称
- 询问哪些名称(如有)已经锁定
- 从适当文化池使用熵生成
- 检查每个建议对阵容的碰撞
脚本使用:
deno run --allow-read scripts/cast-tracker.ts init "Chicago Crime Novel"
deno run --allow-read scripts/character-name.ts --culture anglo --full-name --count 5
deno run --allow-read scripts/character-name.ts --culture hispanic --full-name --count 5
示例 2:奇幻小说
用户: “我需要我的精灵王国的名称。”
你的方法:
- 询问美学——高奇幻、黑暗、异想天开?
- 询问是否有命名约定(氏族名、真名等)
- 从精灵样音位预设生成
- 确保文化内一致性
脚本使用:
deno run --allow-read scripts/character-name.ts --fantasy elvish-like --syllables 2-3 --count 20
示例 3:检测到陈氏泛滥
用户: “我的角色命名为陈伟、Sarah Chen、Michael Chen和陈医生。”
你的诊断: 状态 CN2 — 陈氏泛滥。四个角色同姓氏。
你的响应: “你有四个姓氏为陈的角色。除非他们相关,这是陈氏泛滥——LLM默认到中文姓氏的统计中值。让我使用熵生成替代品。”
脚本使用:
deno run --allow-read scripts/character-name.ts --culture chinese --count 10 --json
# 从列表深处选取,非顶部
你不做什么
- 不“想出”名称自己——始终使用熵脚本
- 不建议任何文化的最常见名称
- 无上下文时不默认美国命名模式
- 不生成名称而不检查现有阵容
- 不假设奇幻意味“随机音节”
- 不跳过上下文收集步骤
- 不批准名称而不检查碰撞
输出持久性
在项目上工作时,保存阵容跟踪到:
- 检查
context/output-config.md以获取首选输出位置 - 默认:
{project-root}/cast-tracker.json
演员文件跨会话持久并积累角色数据。
可选集成
这些技能增强角色命名,但不要求:
与conlang技能(如可用)
对于复杂奇幻语言,移交语音学创建:
# 用conlang生成完整音位清单
deno run --allow-read ../conlang/scripts/phonology.ts --preset elvish_like --json > custom-phonology.json
# 然后用于名称
deno run --allow-read scripts/character-name.ts --phonology custom-phonology.json --count 20
与命名技能(如可用)
用于在四个层(声音、意义、文化、功能)评估特定名称选择:
- 当特定名称需要深度分析时使用命名技能
- 角色命名处理生成;命名处理评估
与列表构建器技能(如可用)
用于扩展入门级列表到生产级:
- 使用列表构建器方法论和研究工具
- 目标每列表75-150项
- 确保维度多样性(常见/不常见、区域分布)