后台配置
这里改的是全局口径,对所有商家统一生效。
互动打断 / 段间停顿、语音合成(TTS)来源、话术缓存、助播(捧哏)——这四项会影响
每一场直播的音频行为,属于运营口径,所以只放在这一处:
商家自己的配置页看不到、也改不了(服务端会剥离任何来自商家的改动)。
改完点保存,下次开播生效,不用重装 APP。
互动打断 / 段间停顿
由 APP 引擎执行,改完保存、下次开播生效(不用重新安装 APP)。
⚠️ 开启打断后,观众提问的等待 ≈ 打断阈值(例:1000 档 ≈ 1 秒 + 合成下载约 3 秒 ≈ 4~5 秒出声;不开是 15~20 秒)。
代价:正在念的那段主播稿被当场掐断,那段话术可能讲不全。
但代价比听起来小得多:被打断的段占比 ≈ 互动频率 ÷ 段播放频率。
一段 10~15 秒,一小时播约 280 段 ——
店里人少、5 分钟才来一条互动的话,被打断的段只占 2~3%,95% 以上的稿是完整播完的。
只有互动很密(每 30 秒一条)时才需要担心,那时占比约 1/4。
所以建议直接选「等 5 秒」,响应最快。
模型选择(问答 / 改写)
保存后立即生效(服务端每次调用前重载配置,不用重启、不用重装 APP)。
2026-10-14 实测基准:
· 弹幕问答:搭子 model-text + 关推理最快(中位 0.91s、真答率 52%、零空正文)
· 逐段改写:DeepSeek + 关推理最优(2.0s、生产口径 100% 可用);搭子关推理一半超长被丢、慢 50%
· 整篇改写:只有 DeepSeek + 开推理(effort=low)稳定(过审 5/8);关推理两个模型都 0/5
⚠️ 纯推理模型(hy3-x / mm.L0)关不掉推理——配"关推理"无效,实测 hy3-x 要 28.9s 且输出不可用。
忽略账号(本店自己的号,不回复)
把商家自己用来开播/发公屏的抖音昵称填进来,这些昵称发的弹幕一律不回复。
保存后立即生效(服务端每次调用前重载,不用重启、不用重装 APP)。
为什么需要人工填:抖音接口取「房主身份」43 次调用 43 次全失败(9-29 已停用),
且 APP 上报的弹幕里没有 user_id ⇒ 后台自动识别这条路走不通。
判据是「昵称精确全等」(不是包含匹配),只对下面列出的昵称生效,不会误伤观众。
⚠️ 商家改昵称后要回来更新。
(当前名单为空 = 不过滤任何账号)
{{ u }} ✕
补稿阈值(要稿频率)
悬浮窗每隔 20 秒检查一次「手里还剩多少没播的稿」,够多就不去要。
改完保存、下次开播生效(不用重新安装 APP,也不用动服务器)。
一句话:数字越大 = 越积极去要稿;越小 = 越省、越慢。
· 0 —— 手里只要还有一条没播的就不去要(最省,但极端情况下会等到快播空才补);
· 6(默认,推荐) —— 与悬浮窗引擎内置默认值一致,正常直播不用改;
· 20 以上 —— 很积极地去要稿(有互动频繁、要求"随问随答"的场景才用)。
正常团购直播保持 6 即可:稿子是服务端主动推过来的,这个阈值只影响"补要"这一次动作。
语音合成(TTS)来源
直播音频全部由自建 TTS 合成。改完保存、下次开播生效,APP 不用重装。
自建这套是什么:跑在自家租的 3090 上(Fun-CosyVoice3 + vLLM),音色用商家自己的参考音频克隆,
合成完直接把音频发给直播服务器——按量付费的那笔钱就省掉了。
语速怎么调:实测 1.0 明显偏慢、显得拖沓,1.2 ~ 1.4 之间比较自然;建议先设 1.2,
真机听过再微调。⚠️ 别指望它精确——同一句话的时长本身有自然波动(±40%),以听感为准。
自动保护:合成的每一条都会做语音回验(转回文字跟原稿比对),说错话会自动重合成
——绝不会把错的价格/地址播出去。
那台 3090 关机了怎么办:没有云端可以回落了(百炼已弃用,见下面红框),
这种情况会直接缺音频 ⇒ 开播前记得确认它开着。
2026-09-24 起:不再有「阿里云百炼」这条路。
以前自建失败会悄悄回落到云端按量计费(等于在扣钱);现在已经是
严格模式 + 云端密钥已撤掉,无论什么情况都不会再产生云端费用。
代价说清楚:自建不可用时不再有"保可用"的兜底——这是老桑拍板的取舍(测试就要测出自建的真实能力)。
话术缓存
控制「当天同一份稿要不要复用上次改写好的话术和音频」。
为什么默认关闭:缓存开着的时候,改了音色/话术/变量设置,开播可能还是上一版的效果
(老桑真机踩到过:"每一次开播都在缓存,之前改过的东西不能立即生效")。
关闭的代价:每场都要重新逐段改写 + 全量合成音频(实测约 6 分钟、约 1 元/场),
开播门槛也会从"秒开"变成十几秒。
效果稳定之后把它打开,就能恢复「当天同稿复用」——开播秒开、当天第二场不再花钱。
另外:现在缓存指纹已经带上 音色/语速/变体数/助播配置/改写提示词版本,
所以即使开着缓存,改了这些也会自动换新稿,不会再出现旧稿挡路。
助播(捧哏)
主播讲完一段,由另一个音色(见上方「主播2 发音人」——原「助播发音人」位)接一句
❗2026-10-23:主播只 2 位轮流(每人 2 小时),第 3 位已取消。
呼应这段内容的捧场话 —— 比如主播讲价格,助播就接一句这价怎么划算。
音频(含助播句)是开播前一次性预合成的,全量生成、不额外产生费用;改完保存、下次开播生效。
为什么不是每条都接:抖音团购直播间节奏快,每条都接会抢主播的戏。
实测(团购直播间节奏、1.5 小时仿真,助播句约 7.2 秒):
| 比例 |
配助播的段 |
助播占发声时间 |
主播稿保住 |
| 10% |
3 段 |
4% |
87% |
| 30% |
9 段 |
10% |
80% |
| 50% |
14 段 |
15% |
74% |
| 100% |
23 段 |
22% |
67% |
建议 30%:助播只占 10% 时间 —— 有「直播间有人在搭话」的氛围,又不抢主播的戏。
比例
在服务端生效,而且可以随时调、不额外花钱:
助播的文案和音频是
全量预生成的(所有段都有),比例只决定「序列里给哪些段插助播」——
所以你把 20% 改成 50%,下次开播立刻生效,
不会重新烧 TTS 钱。
另外两条自动规则:队列里
有观众提问在等时自动跳过助播(互动优先,不拖延答疑);
助播一旦开播
不打断(它才 6~10 秒,掐掉等于白播)。
GPU 算力池
一张 GPU 负责 30 个「有效开播 > 2 小时」的商家(留余量给观众问答 ——
问答优先于主播稿预生成:稿没合成完可以重复播,问题不能让人等)。
超过就加卡:新开一台实例 → 跑一次 start_tts.sh → 把地址填到这里,保存即生效。
老账号继续留在原来那张卡上,已有音频缓存不会失效;某张卡出故障时,
它上面的账号会自动迁移到其它正常卡(音频重新生成)。
网关没起来怎么办:点「拉起网关」,服务器就会去把那台机器上的网关拉起来 ——
只拉网关进程,不动机器电源(机器真关着时拉不动,那是正常的)。
取不到实时健康状态:{{ gpuProbeErr }}
不影响保存配置;但"哪张卡崩了"要等采集端跑起来(或重启加载新版)之后才看得到。
健康探测:每 {{ gpuProbe.interval_s }} 秒一轮,连续失败 {{ gpuProbe.fail_to_trip }} 次自动熔断、连续成功 {{ gpuProbe.ok_to_recover }} 次自动恢复。
关机省钱不用手动停用 —— 探测会自动把卡标红、把名下商家迁到健康卡;开机后自动恢复,无需人工操作。
拉起网关:{{ gpuWakeup.auto ? '自动拉起已开' : '自动拉起已关(只能手动点按钮)' }},
同一张卡 {{ Math.round(gpuWakeup.min_interval_s / 60) }} 分钟内最多拉一次,单次命令超时 {{ gpuWakeup.timeout_s }} 秒。
保存后立即推送生效(不用重启服务)
闲时预生成
在凌晨空闲时段提前给「前一天开播 > 2 小时」的商家生成好当天的主播稿音频,
商家起播时直接命中缓存 ⇒ 秒开、不用等。超过家数上限时按播出时长降序优先(播得越久越优先)。
家数上限 = GPU 卡数 × 每卡凌晨量(自动计算,实时值见下方状态栏),不需要单独配。
窗口 {{ pregenStatus.window }}
| 午间窗口 {{ pregen.midday_start }}:00-{{ pregen.midday_end }}:00
| 上限 {{ pregenStatus.max_targets }}(凌晨)+ {{ pregenStatus.max_targets_midday }}(午间)
| 今日已完成 {{ pregenStatus.done_count || 0 }} 家
⚠️ 该加卡了(有卡已用到 {{ pregenStatus.card_alert_at }} 家)
| 在窗口内:{{ pregenStatus.in_window ? '是' : '否' }}
| 正在跑:{{ pregenStatus.running ? '是' : '否' }}
达标商家 {{ (pregenStatus.targets || []).length }} 家
(有配置 {{ (pregenStatus.targets_with_config || []).length }} 家)
| 每晚上限 {{ pregenStatus.max_targets }} 家
| 门槛 {{ pregenStatus.threshold_hours }} 小时
| 正在直播 {{ pregenStatus.active_tasks }} 场
上次执行:完成 {{ (pregenResult.done || []).length }}
| 跳过 {{ (pregenResult.skipped || []).length }}
| 失败 {{ (pregenResult.failed || []).length }}
预生成完成情况({{ pregenDone.day }}):已完成
{{ pregenDone.summary.done }} / {{ pregenDone.summary.total }} 家
(凌晨上限 {{ pregenDone.summary.night_cap }} 家 + 午间上限 {{ pregenDone.summary.midday_cap }} 家)
BP:{{ g.bp_name }}
专员:{{ r.region_name }}
({{ r.done_count }}/{{ r.total }} 已预生成)
{{ m.remark || m.name }}:{{ m.done ? '已预生成' : '未预生成' }}
系统公告
发布后,商家 APP 登录时会自动弹窗(需手动点确认/关闭);总管理员可查看
哪个 BP 下哪个专员下哪个商家已读、未读。
| 标题 |
发布时间 |
已读/总数 |
操作 |
| {{ a.title }} |
{{ fmtTime(a.created_at) }} |
{{ a.read_count }} / {{ a.total_merchants }}
|
查看阅读情况
删除
|
暂无公告
《{{ annStats.ann.title }}》阅读情况:已读 {{ annStats.summary.read }} / {{ annStats.summary.total }}
BP:{{ g.bp_name }}
专员:{{ r.region_name }}
({{ r.read_count }}/{{ r.total }} 已读)
{{ m.remark || m.name }}:{{ m.read ? '已读' : '未读' }}
保存后下次开播生效