RabiPC 语音工作站
SkillCommunicationLets your agent design or review a voice messaging system with microphone input, speech recognition, and text-to-speech.
Use RabiPC 语音工作站 in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add RabiPC 语音工作站 and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the RabiPC 语音工作站 skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Design, implement, or review the RabiPC voice messaging endpoint and the RabiSpeech TTS/ASR workstation. Covers the resident microphone, RMS/VAD utterance segmentation, Route hot-delivery and persona keyword wake-up, bidirectional voice context, direct persona TTS, 24-hour audio cache, explicit API
What this skill tells your AI
The instructions your AI receives, as published by vb2250158/rabiroute in skills/rabiroute-voice-workstation/SKILL.md and read by ahel’s review.
系统边界
浏览器麦克风 / 音频文件 / HTTP 客户端
-> RabiPC 语音消息端
-> RabiSpeech 本地 TTS / ASR,或用户显式启用的 API Provider
-> 可选 RabiRoute Route / Agent
-> RabiSpeech 主机级 FIFO 播放
RabiSpeech 的普通手动 TTS/ASR API 不接入 Agent。常驻麦克风完成非空转写后只向 POST /api/speech/messages 提交一次且不指定 Route;Manager 广播给所有已启用语音消息端的 Route。每个 Route 再独立执行 speechPushMode,因此同一段 ASR 可以同时进入多个人格,但主机只采集和识别一次。
本地 Provider 是默认安全基线。外部 API Provider 必须满足:配置显式启用;密钥或声线 ID 只来自点名环境变量;远端地址使用 HTTPS;不做失败后的隐式云端回退;local_only / relay_safe 如实反映启用状态。会议区分发言人应使用专门的 diarization 能力并返回 speaker turns,不得把普通短句 ASR 描述成已支持分人,也不得把说话人标签冒充已验证声纹身份。
活跃接口
底层本地服务:http://127.0.0.1:8781
GET /healthGET /v1/modelsGET /v1/models/<provider>/<model>GET /v1/capabilitiesGET /v1/eventsGET /v1/recordsGET /v1/speaker-profilesPUT /v1/speaker-identitiesPUT /v1/speaker-bindingsPOST /v1/audio/speechPOST /v1/audio/transcriptionsGET /v1/microphone/statusPOST /v1/microphone/startPUT /v1/microphone/settingsPOST /v1/microphone/stopGET /v1/playback/statusPUT /v1/playback/settingsPOST /v1/playback/stop
RabiRoute Manager 同源代理:先调用已安装的 RabiRouteHost.exe --command status --json,使用当前应用代际返回的 managerBaseUrl;不得缓存或扫描端口。
GET /api/speech/statusGET /api/speech/eventsGET /api/speech/modelsGET /api/speech/personasGET /api/speech/recordsGET /api/speech/speakersPUT /api/speech/speaker-identitiesPUT /api/speech/speaker-bindingsPOST /api/speech/ttsPOST /api/speech/asrGET /api/speech/messagesPOST /api/speech/messagesPUT /api/speech/microphone/settingsPOST /api/speech/microphone/reconcilePUT /api/speech/playback/volume
模型列表的每一项都要返回方法、endpoint、Content-Type、必填字段、可选参数和示例。调用方不得靠写死表格猜当前模型能力。
麦克风常驻转写
- 只在用户主动开启后获取浏览器麦克风权限。
- Route 的语音消息端总开关是该 Route 的主机 ASR 订阅真源;任意一个 Route 订阅时保持常驻监听,关闭一个只取消自身订阅,最后一个关闭才停止麦克风。
- 计算 PCM RMS,低于声音阈值时不触发新语段。
- 保留短前置缓冲,避免吞掉句首。
- 说话后按静音时长切段,同时设置最短与最长语段保护。
- ASR 请求顺序处理,避免多个 GPU 大模型争用显存。
- RabiSpeech 播放队列活跃时暂停麦克风触发,防止 TTS 回录形成反馈环。
- 常驻 ASR 每段只提交一次,由 Manager 广播给所有订阅 Route;语音服务页不得提供“投递 Route”或人工会话 ID,Route 页也不得重复主机 ASR/VAD 参数。
- 主机实时波形、五段链路、计数器、运行日志和最近转写只放在“语音服务 → ASR”;Route 的语音消息端只保留订阅开关、热投递/人格关键词、人格 TTS 摘要、职责说明、回复自动播放和单次广播说明。
- VAD/切句参数使用滑条加精确数值输入,当前统一覆盖录音阈值、转写阈值、自适应倍率、自适应余量、静音窗口、最短语段和最长语段。
- 手动 ASR 和直接人格 TTS 不要求 Route 或 Agent。
热投递与关键词唤醒
speechPushMode归 Route:hot表示每个已完成、非空的 ASR 片段立即进入普通start/steer投递链;keyword表示先记录,再决定是否唤醒。speechTriggerKeywords归人格:放人格名、常用称呼和唤醒词,多条 Route 绑定同一人格时共用。keyword模式下所有 ASR 仍写语音记录和人格会话账本;只有文本命中当前人格关键词才投递 Agent。- 关键词为空时保持“只记录”,绝不暗中回退
hot。 - 公开 HTTP 终态必须区分
delivered、recorded、failed;recorded是关键词未命中时的正常结果,不算投递失败。 - 普通消息端命中规则后默认直接投递。Heartbeat 的忙碌跳过和语音的热/关键词模式是两个独立、显式的例外。
人格与播放
人格资料属于 data/roles/<RoleId>。persona.md 是人格真相源;voice/voice-profile.json 是 TTS 模型、声线、语言、语速和表达指令的唯一配置真源;声音参考、台词索引、voice/cache/reference-audio/ 和 voice/cache/tts-audio/ 也归对应人格。只知道人格名时也能直接调用 TTS,Provider 声线 ID 必须通过该人格点名的环境变量解析,不能写进公开配置。没有解析到人格的直接 TTS 才使用 RabiSpeech 私有 fallback 缓存,不得伪装成人格资产。
RabiSpeech 是唯一播放所有者。所有 Route、会话、Agent、人格和模型的完成音频进入同一个 FIFO;不得让下游 worker 或浏览器另起并发播放器。
主机播放音量同样只归 RabiSpeech:范围 0–100,唯一运行时真源是 output/playback-settings.json,WebGUI 只能经 Manager 的滑条加精确输入更新。每条音频开始播放时冻结当时音量,因此修改从下一条开始播放的音频生效。Windows 使用 SoundFile / PortAudio 解码和播放,不能回退到会误读流式 WAV 头的 winsound。Windows 11 音量合成器按进程映像展示应用身份,因此安装/启动链必须使用带 RabiSpeech 版本资源的真实 runtime/RabiSpeech.exe。服务运行期间保持一个持续无声的共享输出会话:启动时把历史 Core Audio 倍率只归一一次到 100%,之后只保活、不回写,保证系统滑条一直可调。无声保活不得进入 FIFO,也不得触发麦克风防回流。
TTS 记录保留生成文本、Provider、模型、人格、会话、Route、播放状态、安全相对缓存引用和预计到期时间。音频缓存按每条记录自己的文件时间戳保留 24 小时,不按自然日整批删除;服务启动时扫描一次,之后只维护最早到期的一次性 cleanup deadline,新成品仅在更早到期时重排。预计到期仍不是硬实时承诺,因为进程停机和系统调度可能延后删除。Manager/WebGUI 只可暴露 POSIX 风格逻辑相对路径:人格记录使用 <RoleId>/voice/cache/tts-audio/<file>,fallback 使用 output/tts-audio/<file>,旧记录兼容单文件名;绝对路径、..、反斜杠越界必须省略。语音消息端触发的 Agent 回复必须走明确发送 API,由 Outbox 冻结当前 Route 的人格与语音参数后入队;Agent 不直接调用 worker。
双向上下文与说话人
- 所有消息端的统一人格会话真源是
data/roles/<RoleId>/conversation/current.jsonl,必须同时记录 inbound 与 outbound,并保存消息端、会话、发送方向和可用的说话人字段。 current.jsonl不设总条数上限。显式整理时,先检查是否存在超过 72 小时未活跃项;触发后把连续前缀中超过 24 小时可编辑窗口的完整输入集合归档到archive/<n>~<m>.jsonl。- 自动注入额度按人格、消息端和会话过滤,收发合计;每个消息端独立配置
0–200,默认100。0只关闭自动注入,不停止记录或删除历史。 - ASR 与成功 TTS 回传使用同一
speech上下文额度,并尽量保留相同sessionId,让 Agent 能理解前后问答。 - 说话人资料库是主机级共用真源。支持人工创建资料与把
sessionId + speaker label绑定到某人;若没有经过验证的 matcher,必须明确显示自动声纹识别不可用。 - Agent 使用
PUT /api/speech/speaker-identities原子查找/创建人物、合并别名并绑定当前会话标签;人工设置仍放在语音服务 ASR 页,两条入口共用同一资料库。 - 主机每个可提取分段的正式人格证据是稳定不透明的
voiceprintId(来自该主机 cluster)。speakerId和speakerSuggestionId只供主机诊断,不能参与人格isUser分类或 AgentPacket 人格身份注入。 validated=true必须同时配置通过私有真实语料门禁生成的validation_report_path;运行时必须核对目标模型 ID、模型 SHA-256、hard threshold、min margin 和目标引擎 policy 结果,不匹配时关闭正式自动认人。- 人工标注区按未知/已知说话人折叠,并按分段标签或人物资料展示最近 10 句话;这只是辅助确认,不把聚类标签冒充生物声纹。
- 人格通过
GET /api/roles/:roleId/voice-transcripts读取conversation/current.jsonl与自身voice/voice-identities.jsonl的派生联结。matchedCount和 coverage summary 必须按完整筛选结果计算,不能被明细limit截断;统计不回写任何真源,也不作为主动智能轮询源。 - 自动声纹正式支持必须由真实同人/异人语料、显式校准 policy 和
--require-pass报告证明。示例 policy 只是起点;未通过时保持validated=false,不得把实验候选或未知聚类描述成已校准认人。
RabiLink 中转
Relay 只代理 allowlist 内的原始请求/响应,并使用通用应用 token。远端请求不能加载 Python 模块、修改模型 allowlist、下载模型或读取本机任意文件。只暴露规范化语音 API 和 OpenAPI,不暴露 worker 端口、模型路径或参考音频路径。
手机/眼镜 PCM 启动请求必须分开提交稳定 source_device_id 和临时 stream_id。前者进入 sourceDeviceId 并作为普通回复的唯一设备目标,后者只进入 sourceStreamId 用于诊断本次连接;不得把流 ID 写进 targetDeviceIds。
整个语音与主动智能链使用事件流:Android、PC worker 和 Manager 订阅 Relay SSE;RabiSpeech 通过 /v1/events 推送状态,Manager 通过 /api/speech/events 转发。cursor 只用于重连补漏,settle/重试/Heartbeat 只使用一次性 timer 事件;禁止固定间隔查询消息、重读账本、扫描配置或刷新状态。
动作安全
- 本地 TTS/ASR、模型查询和播放属于语音服务动作,不意味着 QQ/NapCat 外发。
- 常驻 ASR 的目标集合只由各 Route 的语音消息端订阅决定;显式
routeId只保留给调试/兼容 API。外部消息发送仍经过 RabiRoute Action Gate。 - 不记录或公开 token、真实 Relay URL、私聊转写、录音、人格私有材料、模型权重和绝对路径。
验证
至少验证:
- RabiSpeech
/health与模型列表。 - 一个直接人格 TTS WAV。
- 用该 WAV 完成一个真实 ASR 请求,并检查文字、speaker turns 和同会话记录。
- Manager TTS/ASR 代理。
- 播放状态和停止接口。
- WebGUI 构建与语音消息端主要控件。
- 两个 Route 同时订阅时,一段 ASR 只识别一次并返回两条
deliveries[];关闭其中一个不停止麦克风,关闭最后一个才停止。 - 没有订阅 Route 时返回
recorded + no_enabled_speech_routes;显式routeId调试调用继续兼容。 hot返回delivered;keyword未命中返回recorded;命中人格关键词返回delivered;空关键词不回退热投递。- 人格双向账本能同时看到 ASR 与 TTS,TTS 写入对应人格的
voice/cache/tts-audio/,24 小时预计到期时间正确,WebGUI 不暴露绝对/越界路径,自动注入额度只影响注入不影响记录。
Signals
- GitHub stars
- 502
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
rabiroute-voice-workstation- Source
- github.com/vb2250158/rabiroute
github.com/vb2250158/rabiroute
More in Communication
Skill · anthropics
More in Communicationerror-handling
Skill · affaan-m
More in Communicationemails
Skill · coreyhaines31
More in Communicationazure-messaging
Skill · microsoft
More in Communicationinvestor-outreach
Skill · affaan-m
More in Communicationgws-gmail
Skill · googleworkspace
More in Communication