平台资产
全平台所有用户的音色与角色卡;删除操作不可撤销。
全平台所有用户的音色与角色卡;删除操作不可撤销。
实时语音角色扮演平台
上传参考音频注册克隆音色,每条可试听。角色绑定音色时从这里选。
网页与编排端同源部署时保持默认即可;WebSocket 地址由它推导(/ws/realtime)。
留空使用服务端默认音色。
以下为平台级设置:用户参数的默认/边界/锁定、模型白名单、输入与并发约束。改动保存后对新会话生效。
角色扮演模型生产配方:重复惩罚 1.05 + Ngram禁复 12 + 最大Token 2048。
发给模型的对话记忆保留最近多少轮(你一言我一语算一轮)。调大=角色记性好但响应变慢、更耗上下文;调小=更快但容易忘事。留空用默认 6;只影响模型上下文,会话记录仍完整保存。
改动自动保存,重新连接会话后生效;全部留空则用服务端启动时的默认后端。
把角色身份、场景人物与近期对话作为转写语境传给 ASR(Qwen3-ASR 原生支持): 显著改善人名/专名误识(如"陆逊"被识成"迅")与跨轮续说的连贯。仅角色扮演会话生效。
字数=语境总预算:角色身份/场景人物固定在开头,剩余额度给最近的对话内容。改动自动保存,重连会话后生效。
注册 1~3 位用户的声纹(每人每环境一段 8~10 秒语音)。当前处于影子观测阶段:对话时后台自动判定"现在是谁在说话"并记入服务端日志,不影响任何对话行为;积累数据用于标定拒识阈值后才会接入门控。
两种注册方式二选一:从最近对话注册(推荐,先去正常聊一句 ≥4 秒的话,音频与判定同链路,最准)/ 对着麦克风 录制注册(8~10 秒)。同名再注册 = 追加模板;建议同一用户在常用环境各留一条。
生成层(协议级,决定模型输出什么;关内心可大幅降低首响延迟):
播报层(TTS/字幕播什么,只影响语音和字幕,不影响生成):
例:只勾"台词" → 模型输出 <thought>…</thought><speech>你好</speech><action>点头</action> 时,只朗读"你好"。
绿点亮起表示当前 VAD 判定你在说话。浏览器回声消除/降噪默认开启(见控制台说明)。
自研=把 Chrome 同款 WebRTC AEC3 编译进浏览器,参考信号取自实际播出的音频(样本级同源,内置 AEC 拿不到),延迟会话内自动标定。切换在下次连接生效。选自研时内置 AEC/降噪/自动增益自动关闭(保持信号线性交给 AEC3),下面三个开关在该会话不生效。
把扬声器播放出的助手声音从麦克风信号里扣掉。扬声器外放时必须开,否则它会被自己的声音干扰;缺点是在你边听边说时可能连你的声音一起压低(表现为"难打断")。戴耳机时可关闭以获得更干净的收音。
【排障用,平时关】自研 AEC 会话期间在内存里保留最后 ~8 秒的三路音频(参考[含断流补零]/原始麦克风/AEC 后),断开连接时自动上传到客户端日志(约 1.5MB)。用于离线复演回声消除,定位"线上不消、离线能消"类的环境差异问题。
抑制稳态背景噪声(风扇/空调/电流声)。【怎么调】一般保持开;若轻声说话被吞,关闭对比一下。
自动把麦克风音量拉到稳定电平(你小声它调灵敏)。【怎么调】音量正常保持开;怀疑它放大了环境噪声/回声 → 关闭对比 VAD 条表现。
silero 用神经网络判断"像不像人说话",抗噪强、对轻声敏感;能量版只看音量,嘈杂环境容易误判。正常情况保持 silero。
语音概率超过该值才算"在说话"。当前模型为 silero v4(实测:清晰语音峰值 0.99+、均值 0.6 左右,噪声远低),0.5 是官方默认、0.75 偏严格。误触发多就升,轻声漏检就降。
连续多少帧(1帧=32ms)过门槛才认定"开始说话"。默认 1 帧=32ms 已是最快档;调到 2(64ms)可滤极短动静但开口略慢。打断难一般不怪它,先调"判定门槛"和"窗口内达标块数"。
静音多少毫秒后提示服务端提前开始应答(M3:hint 触发)。角色会在你话音刚落时就开始说话,而不是等满整个止判窗。调低=响应更快但句间停顿容易被抢答;调高=更稳重。必须小于"止判帧数×32ms",超出会被自动截到窗内。
连续多少帧(1帧=32ms)低于门槛才认定"说完了"。默认 56 帧 ≈ 1.8 秒:句中停顿 1.8 秒内不切轮(不丢语境、不触发半句抢答);接话延迟由"提前应答"独立控制,不受此值拖慢。【怎么调】爱停顿仍被截断 → 升到 65;希望更干脆认定说完 → 降回 38。
一次声音(只累计"有声"的块)不足该时长,既不开新对话轮、也不触发打断——拦咳嗽/拍手/碰撞等短促声。【数字感】拍手约 100~200ms、一个字约 300ms、正常短语 ≥600ms,350ms 是中间值。误触发多 → 升到 450;觉得要说很久才有反应 → 降到 250。
关闭后,说话不会自动打断助手,需要手动点界面"打断"按钮(适合纯旁听场景)。
开启后,角色说话期间你的语音完全不打断它(既不停播也不开轮),打断只认界面"打断"按钮。扬声器外放且经常被"自言自语"误打断时的保底开关。戴耳机或开了下方仲裁参数时可关闭,体验更自然。
播放中怀疑有人插话时,先把自己的声音静音约半秒再判定:声音跟着消失=扬声器回声(虚惊,恢复播放);声音持续=真人(确认打断)。【何时关】戴耳机、或回声不构成困扰时关闭——关闭后打断行为完全等同 Python 客户端(最灵敏);扬声器外放保持开。
判定插话的滑动窗口长度:1块=20ms,默认 5 块=100ms。配合下一个参数读作"最近 100ms 里需要几个有声块"。一般不动它,调下一个。
确认窗口(上一个参数)里累计多少个"有声"块(1块=20ms)就确认插话。【为什么默认 3/5】实测 v4 连续说话时约只有一半的块能过阈值(分数是波动的),要求 5/5 全中几乎不可能——打断会变得非常难。【怎么调】打断难 → 降到 2;连噪声都能打断 → 升回 4~5。
两次"有声"之间最多隔多久还算同一次插话(换气/字间停顿不中断判定)。【怎么调】语速慢爱停顿 → 升到 500;要求插话干脆利落 → 降到 200。
插话打断时的语音起点回看时长(独立于正常开口的 360ms)。播放中开口,VAD 判定会被扬声器回声拖慢半秒到一秒多——正常补偿兜不住,导致你说出的头几个字被吞(识别出残缺句子)。【怎么调】吞字就加大;如果发现你的台词里混进了角色自己刚说的话(回声混入),适当减小。
疑似插话时不必卡在半个词中间暂停:当前这句还剩不到这么多毫秒就播完的话,让它说完再暂停(听感=说完一句→短暂停顿→续上);剩得更多则立即暂停。设 0 = 一律立即暂停(回声暴露最少)。当前句还在合成、不知道剩多长时也立即暂停。
播放期间的插话判定门槛 = 实测回声地板 + 余量,不再绑死扬声器音量:模型每次开口先用前 0.3 秒(你还来不及开口说话)测一次回声水平,之后随回声消除收敛自动放宽。地板只从"确证的回声"抬高,你的语音不可能把门槛顶上去;关闭则全程用上方"判定门槛"的固定值。
插话判定门槛比回声地板高出多少。余量大=稳(误打断少但轻声插话难),余量小=灵敏。实测参考:回声峰值约 0.63(当前音量),回声会随音量变化,门槛会自动跟。
【仲裁机制】播放期间检测到疑似插话时,先取证(不停播放),等语音识别确认说话凑够这么多有效字(不含标点;回声识别出来是空的)才真正打断;不够字数=回声/单字应答,播放不受影响。调大=更难被误打断;调小=1 字即确认,更灵敏。手动"打断"按钮不受此限。
疑似插话后等语音识别证据的最长时间;超时仍无字=回声,不影响播放。真打断的代价≈首字识别延迟(300~600ms)。调大=容忍说话慢的人;调小=回声恢复更快。
一次"判定为回声"之后,这段时间内再次疑似插话不再影响播放(防口吃循环);期间照常听证据,你真凑够字数仍会立即打断。
换气误触发打断角色的话后怎么办:拼接=定格半句、等你说完后续写拼回,听感无缝但机器复杂(历史 bug 多发区);切了不修=豆包/OpenAI 式,打断即停、半句入史、你的话按新输入让模型重新组织回答,衔接交给模型智力。只管打断路径,不影响"半句自停自动补完"那个开关。
你停顿约 0.8 秒时,服务端用一次极小的模型调用判断"这句话是否说完了":说完了立即收轮,应答提前约 1 秒;没说完则否决刚抢答的角色(此时它还没出声,你无感),你这轮话不作废:继续说就合入同一轮,保持沉默则等止判窗收轮后照常回答。判定失败/超时=未完成,回落止判窗,不会丢轮。需要登录态。
语义端点判定用的模型(下拉建议可手填)。留空=跟随会话主模型。判定要的是小而快——建议选一个最小够用的模型,大模型判定慢会吃掉提前收轮省下的时间。
你说话期间,服务端拿未定稿的识别文本在后台先开一条【听不见的】生成,赌你最后定稿的就是那句;赌对了省一点首响延迟。实测命中率很低,收益基本被"提前应答"覆盖,每次未命中白烧一次 LLM。关掉=只靠"提前应答",对话行为不变。
收到"提前应答"提示后,服务端再静默确认这么久才开抢答。总提前量 = 上面"提前应答(ms)" + 此值。调低=抢答更激进(换气易被抢);调高=更稳重。
抢答开始后这么多秒内你继续说,算"同一句话没说完";超窗后再开口算刻意插话(新对话轮,角色停下回应你)。调大=更能容忍长停顿的补话;调小=插话判定更干脆。
换气打断后,已听到的半句保留多久;超期后你的下一句话按全新问题处理。一般与"换气判定窗口"同步调。
音频送入 VAD 前乘的系数(1.0=不衰减)。【平时保持 1.0】只在分数常年钉死 1.0、调阈值无效时用来拉开分辨率,用完需配套重调阈值。不影响发给服务端的音频和播放音量。
每一帧的 VAD 概率、门槛、判定状态。排查"VAD 数值是否异常"时打开;会话页的 VAD 概率条始终实时显示,不受此项影响。
把每一个收发事件的类型与关键载荷打到控制台(→ 发出 / ← 收到)。排查"服务端发了什么/客户端回了什么"用。音频只记字节数,不会刷屏。
把浏览器侧的完整运行日志(VAD 判定/插话仲裁/播放进度/协议事件摘要/JS 异常)按对话自动上传到服务端,与该对话的服务端日志配对保存(data/logs/{对话ID}.client.log),用于跨端排障。本地同时留一份缓存,断网/崩溃的日志下次启动补传。关闭则完全不记录。
记录轮次/门槛/打断/播放的关键状态转换:开轮、门槛丢弃、插话确认/忽略/冷却、闪避压低与恢复、清播放、进度上报等。排查交互行为类 bug 的主力开关。
判定"开始说话"有延迟,提前滚动缓存这段音频、开轮时补发,防止第一个字被吞。【怎么调】只有"每句话首字总丢"才加大;默认 360ms 足够。
收到音频先攒这么多再开播,减少起播卡顿。【怎么调】声音断续 → 升到 120;嫌首音迟 → 降。
把角色台词的语气标签(如"愤怒地低吼")实时映射为语音合成的情绪控制:同一音色按当前语气改变说话情绪。关闭 = 始终用音色默认情绪朗读。改动重连会话后生效。【注意】带参考文本注册的音色不支持情绪控制,会自动退回普通合成;听感不稳定时先关此项对比。
用 SenseVoice 旁路分析你说完的话,识别出的语气(平静/轻快/恼怒/低落/笑)写进发给角色的用户行括号里,让角色接得住你的情绪。仅角色扮演会话生效;识别失败静默省略,不影响对话。改动重连会话后生效。
打断证据改为"任一满足":STT 转写出字,或 VAD 强置信+闪避探针(怀疑插话时先把对方音量压低一拍:分数跟着跌=回声→恢复音量不打断;分数维持=真人→立即打断)。解决"说完一整句 STT 才出字、打断迟迟不生效";探针期间对方音量短暂变小属正常。关闭 = 只认 STT 转写证据(原行为)。改动重连会话后生效。
角色扮演时从该角色已建库的人生档案里检索相关记载,注入角色提示词作为回答依据("只有档案里写过的人生细节"答得准)。仅对已建库的角色有实际效果;关闭 = 本会话完全不检索不注入(档案库保留,随时可再开)。改动重连会话后生效。
选择一个角色开始对话——声音和人设自动绑定,不用分别设置。