Pronunciations
【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS
Names and terms with non-obvious pronunciations. Used by your DA's TTS system.
- LifeOS→ P-A-I (letters, not "pie")
- Anthropic→ an-THROP-ick
要点有二: 1. **用途定位**:它记录"发音不显然"(non-obvious)的人名和术语,供 DA 的 TTS 系统使用——这正是语音体验中"说对名字"的关键数据源; 2. **表达方式**:采用 `**原文** → 音标/读法` 的条目式写法,例如 LifeOS 要逐字母读作 P-A-I,而不是读成 "pie";Anthropic 读作 an-THROP-ick。 ### 模板 frontmatter 逐字段解读 模板顶部的 YAML frontmatter 是 Pulse v2 页面系统的元数据,决定了该文件在发布与渲染管线中的行为: ```yaml category: voice # 页面归类:属于语音(voice)域 kind: reference # 页面类型:reference(参考页,渲染为键值表) publish: false # 模板本身不对外发布,仅作为个人起步脚手架 review_cadence: never # 无需周期性审查 provenance: template # 来源标记:template(模板)→ 编辑后自动变为 customized last_updated: 2026-05-03其中kind: reference意味着该页面在 Pulse v2 UI 中以"参考表"(键值对表格)的形式渲染,这一点可以从 PULSE/Schema/Snapshots/pronunciations.fixture.html 快照中看到对应的ref-table渲染实现。而provenance字段则与模板流转机制绑定(见下节)。
模板的 provenance 流转机制
根据 USER_TEMPLATES/README.md 的说明,所有USER_TEMPLATES/下的*.md文件都是"每个 Pulse v2 页面的起步脚手架":
provenance: template—— 公开发布管线会在下一个版本中包含该文件,所有运行 LifeOS 的用户都会得到同一份起步内容;provenance: customized—— 发布管线会排除该文件,你的个性化编辑保持私有。
你无需手动翻转该字段:系统会检测编辑(无论是通过 Pulse 内联编辑器,还是直接修改文件 mtime),并自动把template翻转为customized。README 同时提到MarkTemplate.ts与MarkCustomized.ts两个 CLI 可用于极少数需要强制覆盖的场景。
二、把模板落地为个人发音库
模板的用法在 USER_TEMPLATES/README.md 中有标准三步流程,对发音模板同样适用:
- 复制模板到
USER/目录(去掉_TEMPLATES后缀):cp LIFEOS/USER_TEMPLATES/Pronunciations.md LIFEOS/USER/Pronunciations.md - 编辑文件,写入自己的内容。Pulse 检测到改动后会自动把
provenance: template翻转为provenance: customized; - 也可以删掉模板、完全从零编写——Pulse 只要求 manifest 指向的文件真实存在(
LIFEOS/PULSE/pages/<id>.manifest.toml)。
三份文件的角色分工
结合仓库实际内容,发音定制涉及三份文件,职责各不相同:
| 文件 | 位置(仓库内示例) | 运行时角色 | 谁读取 |
|---|---|---|---|
| 起步模板 | install/LIFEOS/USER_TEMPLATES/Pronunciations.md | 随版本分发的脚手架 | 人 / 发布管线 |
| 用户笔记 | install/USER/PRINCIPAL/PRONUNCIATIONS.md | 记录"为什么这样读"的备注 | 仅人阅读 |
| 运行时数据源 | install/USER/PRINCIPAL/PRONUNCIATIONS.json | TTS 发音覆盖规则 | VoiceServer 实际读取 |
关键事实:语音层不读取 Markdown 笔记,只读取同名.json扁平映射。这一点在用户笔记版PRONUNCIATIONS.md开头有醒目标注,也在 JSON 文件自身的_comment中再次声明(详见下两节)。
安装到个人环境后,运行时路径为~/.claude/LIFEOS/USER/PRINCIPAL/PRONUNCIATIONS.json——该默认路径由 VoiceServer 源码硬编码(见第五节)。
三、真正的数据源:PRONUNCIATIONS.json 扁平映射
仓库随发行版携带的示例 install/USER/PRINCIPAL/PRONUNCIATIONS.json 全文如下:
{ "_comment": "Pronunciation overrides for the TTS layer. Flat map: exact text to match -> how it should be spoken. Matching is literal, so add each inflection you actually say ('is live', 'went live'). The VoiceServer reads THIS file (LIFEOS/USER/PRINCIPAL/PRONUNCIATIONS.json); the sibling PRONUNCIATIONS.md is human notes only. Delete these examples and add your own.", "LifeOS": "LIFE-ohess", "is live": "is lyve", "went live": "went lyve" }这份 JSON 定义了三层语义:
- 结构:
"原文" -> "读音"的扁平映射(flat map),即一个普通对象,键是文本原文,值是该文本应当被 TTS 念出的读音写法; - 匹配是字面精确的(matching is literal):不做词形还原、不做大小写归一,你实际说出的每个形态都要单独建一条规则。例如同样是 "live",过去式 "went live" 与现在时 "is live" 读音不同,就要分别写
"is live": "is lyve"和"went live": "went lyve"; - 示例即占位:
LifeOS: "LIFE-ohess"是随发行版携带的示例条目,注释明确要求"删除这些示例、添加你自己的"。
值得注意的细节是,模板中的 LifeOS 读法是逐字母 P-A-I(letters, not "pie"),而用户示例 JSON 中的读法是整体拼读 LIFE-ohess——两者并不冲突:前者是模板给出的"发音思路",后者是发行版示例采用的"读法风格",你完全可以在自己的 JSON 里按喜好选择任何一种(或自创第三种),只要键值配对即可。底层实现完全不关心读音字符串的书写风格,只负责把原文替换成读音文本(见第五节)。
四、PRONUNCIATIONS.md:给人看的发音笔记
用户笔记版 install/USER/PRINCIPAL/PRONUNCIATIONS.md 的作用是记录"为什么存在这条覆盖规则"。其开头明确警告:
The voice layer does NOT read this file. It reads the sibling
PRONUNCIATIONS.json, a flat"text": "spoken form"map. This markdown file is for your own notes onwhyan override exists; every entry you actually want spoken must also exist in the.json.
即:笔记不驱动语音,条目必须同步存在于.json中才会被念出来。这份笔记提供了三类结构化表格模板,供你维护"人读"视角的发音词典:
## Names | Word | Pronunciation | Notes | |------|---------------|-------| | (your last name) | (phonetic) | (any context) | ## Technical terms | Word | Pronunciation | Notes | |------|---------------|-------| ## Acronyms | Acronym | Pronunciation | Notes | |---------|---------------|-------| | LifeOS | LIFE-ohess | product name |三张表分别覆盖人名(Names)、技术术语(Technical terms)、缩写(Acronyms)——这三类恰恰是 TTS 最容易读错的领域。表格的 Notes 列用于补充语境(如 "silent c, soft-t"),帮助未来的你理解当初为什么这样标。
五、源码级原理:VoiceServer 如何编译与套用发音规则
发音规则的实际执行者是 Pulse 的语音服务端 PULSE/VoiceServer/voice.ts。其实现分为"加载编译"与"文本替换"两段,值得逐行理解。
5.1 加载与编译:loadPronunciations
源码位于voice.ts第 169–197 行。默认读取路径硬编码为用户主目录下的安装产物:
const paiDir = join(homedir(), ".claude", "LIFEOS") const userPronPath = customPath ?? join(paiDir, "USER", "PRINCIPAL", "PRONUNCIATIONS.json")- 支持通过
customPath(对应配置项pronunciations_path,见voice.ts第 29 行)覆盖默认位置; - 文件存在则
JSON.parse得到扁平映射,并逐条编译为正则规则:escapeRegex(第 165–167 行)先把术语中的正则特殊字符(.*+?^${}()|[\]\\等)全部转义,保证字面匹配;- 词边界锚定技巧(第 182–183 行):只在术语首/尾字符是单词字符(
\w)时才添加\b。源码注释点明了原因——\b只存在于单词字符旁边,若在.env这种以点开头的术语前加\b,或在Live.这种以点结尾的术语后加\b,规则会静默失效。因此:const lead = /^\w/.test(term) ? "\\b" : "" const tail = /\w$/.test(term) ? "\\b" : ""
- 若文件缺失,仅记录一条 warning("TTS will use default pronunciations"),不影响服务启动。
5.2 文本替换:applyPronunciations
源码位于voice.ts第 199–205 行:
function applyPronunciations(text: string): string { let result = text for (const rule of pronunciationRules) { result = result.replace(rule.regex, rule.phonetic) } return result }所有规则按声明顺序依次替换,前一条替换的结果会进入下一条匹配。因此在 JSON 中把更具体的短语(如 "is live")排在更泛的词(如 "live")之前,可以获得更可预期的结果。
5.3 在 TTS 管线中的位置
发音替换发生在同形异义词消歧之后、真正交给 TTS 合成之前(voice.ts第 330 行附近):
const pronouncedText = applyPronunciations(disambiguateHomographs(text))这意味着一份文本会先经过同形异义词处理(例如区分 "live" 的两种读法),再套用你的发音覆盖规则,最终才进入 ElevenLabs 等 TTS 引擎。此外,启动日志与健康检查会报告已加载的规则数量:loadPronunciations成功时输出loaded N pronunciation rules,健康/状态信息中也会带上pronunciation_rules计数(见voice.ts第 654、670 行),方便你确认自己的 JSON 是否真的被加载。
六、两种录入途径:/interview 与直接编辑
6.1 通过 /interview 交互采集
用户笔记版PRONUNCIATIONS.md明确建议:运行/interview来捕获 DA 必须念对的词。其背后的采集逻辑在 TOOLS/InterviewScan.ts 第 101 行附近,访谈问题包含:
"Your name (with pronunciation if uncommon)?"即访谈流程会在问及姓名时主动索要"非常规发音",把容易念错的名字在源头就收集下来。同时,主身份配置中也为发音预留了字段——TOOLS/LifeosConfig.ts 第 37 行定义了pronunciation?: string,并在第 174 行把principal.pronunciation映射进配置结构,说明"发音"是 DA 身份建模中的一等公民。
6.2 直接编辑 JSON
更直接的方式是手动编辑~/.claude/LIFEOS/USER/PRINCIPAL/PRONUNCIATIONS.json(仓库内示例见 install/USER/PRINCIPAL/PRONUNCIATIONS.json)。编辑时注意:
- 保留
_comment字段的语义约定:匹配是字面精确的; - 把每个实际会说的形态都单独建条,例如同时维护
"is live"与"went live"; - 读音字符串就是你希望 TTS 念出的文本,可以用音节化拼写(如
LIFE-ohess)、逐字母读法(如P-A-I)或自定义音标风格; - 修改后需让 VoiceServer 重新加载——从源码看,发音规则在服务启动/配置加载阶段(
voice.ts第 640 行loadPronunciations(config.pronunciations_path))读入,重启或触发重新加载后生效。
七、参考页渲染与 Schema fixture
发音页面在 Pulse v2 中属于kind: reference页面,其构建产物的 schema 示例见 PULSE/Schema/Fixtures/pronunciations.reference.json:
{ "kind": "reference", "title": "Pronunciations", "category": "voice", "description": "Names and terms with non-obvious pronunciations.", "entries": [ { "key": "Schmidt", "value": "shmit", "notes": "silent c, soft-t" }, { "key": "LifeOS", "value": "P-A-I", "notes": "letters not 'pie'" } ], "meta": { "schemaVersion": "1.0.0", "pageId": "pronunciations", "lastBuildAt": "2026-05-03T01:00:00.000Z", "sourceHashes": { "LIFEOS/USER/PRINCIPAL/PRONUNCIATIONS.json": "ghi789" }, "adapterVersion": "pronunciations-v1", "model": "claude-sonnet-4-6", "costUSD": 0.005, "latencyMs": 1800, "provenance": "customized", "warnings": [] } }【免费下载链接】LifeOS⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life and work.项目地址: https://gitcode.com/GitHub_Trending/pe/LifeOS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考