跳到主内容

dsh-omi-voice

34Star0Fork0Issue1Watching

为 DSH 对话内每条 AI 回复添加 🔊 点读按钮,用豆包 TTS 自然音色朗读(BYOK,Key 仅存本地 macOS 引擎)。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
Swift
License
MIT
分支
main
chinesedeepseek-harnessdsh-pluginread-aloudtext-to-speechttsvoice

安装

命令web profile
$ dsh plugin --profile web add dsh-omi-voice

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 PolinniZhong/dsh-omi-voice:先查看仓库 https://github.com/PolinniZhong/dsh-omi-voice 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

在 DeepSeek Harness 对话里每条 AI 回复旁加一个 🔊 按钮,点一下让本机的 Omi 引擎调用豆包 TTS 1.0 念出最终回答文本,豆包 API Key 只留在你自己 Mac 的 Keychain 里(BYOK)。

核心能力

  • 在每条 assistant 回复旁注入一个三态 🔊 按钮:点一次朗读、播放中再点暂停、再点从暂停处继续播放
  • 只朗读最终回答正文,工具调用日志、思考过程、命令执行、纯代码围栏、纯表格与盒绘/ASCII 图形在请求前由引擎过滤,按钮在无可朗读内容时显示为禁用态
  • 引擎主动轮询 /v1/status 同步播放/暂停/失败/空闲状态,朗读失败时弹出具体原因 toast,引擎断连后按钮自动复位
  • 文本与播放控制全部走本机 127.0.0.1:8765 HTTP 协议,插件侧不存储、不接触豆包 Key
  • 引擎做成本控制:相同文本 3 秒去重、任意朗读 300ms 节流、进程内 LRU 缓存 3 条/≤5MB、纯内存退出即清

技术实现

  • 语言: JavaScript(插件端,浏览器内运行)+ Swift 6(Omi 引擎,独立源码仓内目录)
  • 关键依赖: 无运行时依赖(package.json 的 dependencies 为空);浏览器端使用 DSH 内置 React;引擎使用 Foundation / AVFoundation / Network / Swift Concurrency
  • 架构模式: DSH cordis client 插件,通过 cordis.patch.yml 挂载极简 Node 占位入口,exports["./client"] + dsh.client.platform: web 触发客户端 bundle 自动加载;客户端向 conversation.chat.assistant-actions 槽位注册朗读按钮组件(client/lib/client.js:247-258),不修改宿主 Node 侧逻辑
  • 入口文件: 插件入口 host/lib/index.js(占位)+ 客户端入口 client/lib/client.js;引擎入口 engine/Sources/ReadAloudConfig/main.swift 与 engine/Sources/ReadAloudService/main.swift,HTTP 服务在 engine/Sources/ReadAloudService/LocalTTSService.swift

适用场景

阅读 DSH 长回复时希望「听」而不是「读」、做家务/通勤时回放 AI 答案、或是想让视障/低视力用户能在桌面端听 AI 回答的人。代价是要在 Mac 上常驻一个未签名的 Omi 引擎、付豆包按字符计费的账单。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness(dsh web)未声明插件客户端通过 dsh.client.platform: web 注入;Node 入口为空占位,package.json 未声明 dshWorkshop / engines 版本
Node未声明package.json 未声明 engines.node;host/lib/index.js 仅作占位导出
操作系统macOS 13+ Apple Silicon引擎 engine/Package.swift:6 声明 platforms: [.macOS(.v13)];engine/README.md:15 与 engine/CHANGELOG.md:101 进一步限制为 Apple Silicon Mac,Windows/Linux 引擎不可用
Xcode Command Line Tools未固定版本引擎需从源码用 swiftc 构建并 codesign(engine/README.md:15、engine/build/build-service.sh)
豆包 TTS 1.0 服务控制台开通「语音合成 1.0」BYOK,需要在火山引擎控制台创建关联该服务的 Access Key 并填入 Omi 引擎设置页
原生模块无插件 dependencies: {},未引入 node:sqlite / node-pty 等

安装方式

dsh plugin --profile web add github:PolinniZhong/dsh-omi-voice

引擎(engine/,macOS 菜单栏 App)需按 engine/README.md 单独构建并 ditto 到 ~/Applications/Omi DSH.app,本仓库 plugin 安装命令不会替你装引擎。

配置项

配置类型说明默认值
引擎 HTTP 地址localStorage 字符串(键 dsh-omi-voice/engineBase)插件调用引擎时使用的 base URL,例如当 Omi 引擎端口被改动或通过 SSH 转发时覆盖http://127.0.0.1:8765(client/lib/client.js:58-65)

豆包 API Key、当前音色、语速等设置由 Omi 引擎独立管理,不在本插件配置项内;本插件未实现 DSH cordis 风格的 ctx.config Schema。

常见问题

Q: 点 🔊 提示「未检测到 Omi DSH 引擎」怎么办?

A: 引擎没在跑或被关闭。打开「Omi DSH」(应用程序文件夹或 ⌘空格 搜「Omi」),建议在设置里勾上「应用偏好 > 开机启动」。

Q: 提示「请先在 Omi 设置页配置豆包 API Key」如何处理?

A: 引擎在跑但还没存 Key。打开 Omi 设置页「API Key」项,按 README「获取豆包 API Key」三步在火山引擎控制台开「语音合成 1.0」、建关联的 Access Key 并填入;插件自身没有 Key 输入入口。

Q: 按钮是灰的、点了没反应?

A: 这条回复经引擎清洗后没有可朗读的有效内容(纯代码、纯表格、纯盒绘/ASCII 图形),v0.1.1 起按钮以禁用态呈现并 hover 提示「这条回复没有可朗读的内容」,不会发起豆包请求。

Q: 能否切换豆包音色?插件里有音色选择 UI 吗?

A: 插件侧没有音色 UI,v1 协议只回传当前 voice 字段;切换需在 Omi 引擎设置页「音色 ID」里改,音色列表接口 /v1/voices 在协议里标注为 v1.1 预留。

Q: 支持 Windows 或 Linux 吗?

A: 不支持。Omi 引擎仅面向 macOS 13+ Apple Silicon,需要从源码构建;插件 JS 部分虽然能在任意 dsh web 加载,但没有 macOS 引擎就放不出声音。

Q: 和零配置朗读插件(如 dsh-voice-chat)有什么差别?

A: 零配置类通常用系统自带 TTS、不需要 Key、音色偏机械、按整段读;本插件用豆包 TTS 1.0 自然音色、只读最终回答并过滤噪音内容,代价是 BYOK 按字符计费、需要本机常驻 Omi 引擎。

Q: 数据存在哪?会写聊天历史吗?

A: 引擎不落盘朗读文本、不写历史、不回调任何远程端点;插件只通过 127.0.0.1 通信,PRIVACY.md 与 docs/API.md §5 明确文本与 Key 均不外发。

Q: 怎么卸载?

A: 用 dsh plugin --profile web remove github:PolinniZhong/dsh-omi-voice 卸插件,再用 rm -rf "$HOME/Applications/Omi DSH.app" 删引擎;插件卸载同时 client.js:46-55 启动时会清理旧版本残留的 localStorage 项(dsh-omi-voice/settings、dsh-omi-voice/autoSeq/*)。

上手难度

入门 — 插件本身只暴露一个按钮和可选的引擎地址覆写,但要让它真的出声需要完成三件额外事:在 Mac 上构建未签名引擎、申请豆包 Access Key、填写到 Omi 设置页。

已知问题与限制

  • 引擎仅支持 macOS 13+ Apple Silicon(engine/Package.swift:6、engine/CHANGELOG.md:101),Windows / Linux 无对应构建产物
  • 引擎当前是「macOS 源码构建版 Developer Preview」,未完成 Developer ID 签名、公证、安装包分发(engine/SECURITY.md:24、engine/CHANGELOG.md 多处声明),需要在隔离开发环境评估
  • 协议 v1 未实现长文本自动分段与预取,需等 v1.1(engine/CHANGELOG.md:103、docs/API.md:23);当前文本按 ≤900 UTF-8 字节自然分段顺序播放
  • 协议 v1 无鉴权 token,本机任意进程都可调用引擎触发朗读;当前影响面仅「本机扬声器出声」,docs/API.md:172 与 engine/CHANGELOG.md:104 均标注后续若支持读本地文件必须加 token
  • v0.1.1 起移除自动朗读与 📢 开关(CHANGELOG.md:13),刻意仅保留点读;产品决策,请勿重新引入
  • 当前 Keychain 访问策略面向未正式签名的本机开发包(engine/CHANGELOG.md:105),正式签名版本需要迁移到 Data Protection Keychain 与正式 Access Group

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/PolinniZhong/dsh-omi-voice)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录