news 2026/9/13 20:42:16

Pronunciations

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pronunciations

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.tsMarkCustomized.ts两个 CLI 可用于极少数需要强制覆盖的场景。

二、把模板落地为个人发音库

模板的用法在 USER_TEMPLATES/README.md 中有标准三步流程,对发音模板同样适用:

  1. 复制模板到USER/目录(去掉_TEMPLATES后缀):
    cp LIFEOS/USER_TEMPLATES/Pronunciations.md LIFEOS/USER/Pronunciations.md
  2. 编辑文件,写入自己的内容。Pulse 检测到改动后会自动把provenance: template翻转为provenance: customized
  3. 也可以删掉模板、完全从零编写——Pulse 只要求 manifest 指向的文件真实存在(LIFEOS/PULSE/pages/<id>.manifest.toml)。

三份文件的角色分工

结合仓库实际内容,发音定制涉及三份文件,职责各不相同:

文件位置(仓库内示例)运行时角色谁读取
起步模板install/LIFEOS/USER_TEMPLATES/Pronunciations.md随版本分发的脚手架人 / 发布管线
用户笔记install/USER/PRINCIPAL/PRONUNCIATIONS.md记录"为什么这样读"的备注仅人阅读
运行时数据源install/USER/PRINCIPAL/PRONUNCIATIONS.jsonTTS 发音覆盖规则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 定义了三层语义:

  1. 结构"原文" -> "读音"的扁平映射(flat map),即一个普通对象,键是文本原文,值是该文本应当被 TTS 念出的读音写法;
  2. 匹配是字面精确的(matching is literal):不做词形还原、不做大小写归一,你实际说出的每个形态都要单独建一条规则。例如同样是 "live",过去式 "went live" 与现在时 "is live" 读音不同,就要分别写"is live": "is lyve""went live": "went lyve"
  3. 示例即占位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 siblingPRONUNCIATIONS.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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 20:41:35

Bun vs Node.js:JavaScript运行时体验重构实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 20:40:48

Vivado安装配置深度指南:JDK版本、环境变量与中文乱码避坑全解析

1. 项目概述&#xff1a;为什么一个Vivado安装配置指南值得花三小时认真读完Vivado不是普通软件&#xff0c;它是Xilinx FPGA开发的“操作系统级”工具链——从RTL代码综合、布局布线、时序分析到比特流生成、硬件调试、嵌入式系统集成&#xff0c;整条数字电路设计流水线都运行…

作者头像 李华
网站建设 2026/9/13 20:40:01

MySQL下载安装避坑指南:版本选择与配置详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 20:37:33

ROS2机器人开发指南:从环境搭建到通信机制与导航实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 20:35:10

MATLAB实现PUMA560机械臂RRT路径规划与碰撞检测

简介&#xff1a;本资源是一份面向高校自动化、机械电子、人工智能等专业学生的MATLAB课程设计项目&#xff0c;聚焦PUMA560六自由度机械臂的RRT&#xff08;快速扩展随机树&#xff09;路径规划算法仿真与实现&#xff0c;解决机械臂在复杂障碍物环境中从起始位姿到目标位姿的…

作者头像 李华
网站建设 2026/9/13 20:34:25

Keil5 .pack安装失败六大根本原因与修复方案

1. 为什么.keil5安装.pack文件失败不是“运气差”&#xff0c;而是环境链路上的必然断点在嵌入式开发圈里&#xff0c;几乎每个刚接触Keil MDK-ARM&#xff08;也就是大家常说的Keil5&#xff09;的新手&#xff0c;都会在安装芯片支持包&#xff08;.pack文件&#xff09;时卡…

作者头像 李华