本文内容
Cue 轮次检测:电话号码采集、基准测试与局限
电话号码不是一句完整的话。来电者说出几个数字,停下来回忆,然后继续。如果语音智能体把这次停顿当成自己可以说话的信号,它可能在语言模型真正发挥作用之前就丢失了号码。
Cue v1 是 Pype AI 发布的开放权重轮次检测系统,用来判断来电者是否说完,以及是否正在打断智能体。 已公布的评测把经过微调的 Gemma 4 E4B 文本决策模型,与 Pipecat 的 Smart Turn v3.2 音频分数结合使用。下载 Cue 权重只会获得文本组件,而不是完整的语音处理链路。Pype 的模型说明明确了这一边界。
它的价值在于改善结构化对话的节奏,尤其是电话号码采集。但企业真正需要回答的问题是:它能否让智能体在不抢话的情况下,获取正确且经过确认的号码?
Pype 的 Cue v1 究竟发布了什么?
Pype 的发布记录将 Cue 1.0.0 的发布日期列为 2026 年 10 月 12 日。本文核查日期为 2026 年 10 月 15 日。Cue 是 Pype 的产品,不是 Wavect 发布的模型。
发布帖及演示关注电话号码口述过程中的停顿,以及多语言对话。这有助于解释问题,却不是受控的号码采集准确率实验。本文基于公开资料进行分析,并提出评估方案。我们没有开展 Cue 生产部署,也没有独立复现其推理基准测试。
Cue 处于识别话语和决定回应之间。它不替代语音识别、电话号码校验、语音合成或最终客户记录的保存。这些属于不同的选型问题,可分别参考我们的流式 ASR 生产评测和 Phonely Alma 电话场景语言模型评测。
为什么语音智能体会在电话号码没说完时插话?
下面是一段示意对话:
智能体:“请问可以通过哪个号码给您回电?”
来电者:“加四三……”
智能体:“谢谢。您的电子邮件地址呢?”
来电者:“我还没说完。”
这不一定是转录错误。系统可能正确识别了已经说出的数字,却过早结束了来电者的发言轮次。
语音活动检测,即 VAD,判断当前是否有人说话。自动语音识别,即 ASR,把声音转成文字。轮次结束检测判断对方是否完成了这一轮表达。插话处理,即 barge-in handling,决定来电者在智能体说话时开口后,系统该如何响应。 不应把这些职责合并为一个统一的“静音超时”设置。LiveKit 的轮次管理文档解释了它们的配合方式。
延长超时可以保护思考停顿,却也会延迟已经完整的回答。关闭打断功能可能减少误停,但同时妨碍来电者纠错。一个实用系统需要区分犹豫、结束、表示在听,以及提出异议。
Cue 并非第一个处理这个问题的模型。LiveKit 早在 2025 年 12 月就公布了结构化输入与多语言轮次检测的改进,其中包括电话号码。值得评估的是 Cue 这套可检查的组合是否更适合自己的流程,而不是宣称此前没人发现问题。
Cue 如何结合对话上下文和音频?
Cue 代码仓库描述了两类决策。来电者停顿时,文本组件结合对话上下文,对四个状态进行评分。智能体说话期间,另一个提示词负责区分真正的打断和表示在听的回应。
| 决策场景 | 状态 | 预期含义 |
|---|---|---|
| 来电者停顿 | DONE | 本轮表达已经完整。 |
| 来电者停顿 | LIKELY_DONE | 可能已经说完,但仍有不确定性。 |
| 来电者停顿 | MID_THOUGHT | 句子或结构化回答尚未完成。 |
| 来电者停顿 | HOLDING | 说话者需要继续思考。 |
| 来电者在智能体说话时开口 | STOP | 为纠正、请求或打断而停止说话。 |
| 来电者在智能体说话时开口 | CONTINUE | 表示在听,不需要停止。 |
Pipecat 的 Smart Turn 模型单独分析音频波形。它是基于音频的语义轮次检测器,并不只是一个计时器。Cue 补充了显式文本上下文,例如智能体刚问了什么,以及来电者已经提供了哪些数字。
已公布的来电者与智能体对话方案采用以下组合:
text_end = P(DONE) + P(LIKELY_DONE)
combined_end_score = text_end * sqrt(audio_end_score)
随后由阈值决定是否结束轮次。这个组合分数不能证明电话号码完整或正确,这条公式也不会自动把分数变成经过真实业务校准的概率。
Cue 客户端源码中有两个值得注意的细节。模型只生成一个答案 token,再读取各选项的对数概率,而不是生成一整段回答。但如果服务端没有返回对数概率,客户端可以退回到返回的字母,并把全部概率质量分配给该选项。因此,HTTP 请求成功并不意味着评分接口仍按预期工作。
应检查原始服务端响应,而不只是检查辅助函数是否返回字典。此外,with_voice(...) 只负责合并调用方传入的分数,不会加载 Smart Turn,也不会处理麦克风音频。独立的 wait(...) 辅助函数使用另一套静音等待策略,并不是融合分数基准所采用的阈值策略。
Cue、Smart Turn 和 LiveKit 的基准结果如何?
Pype 使用 LiveKit 的 eot-bench 报告了以下结果。这些是发布方公布的测量,不是 Wavect 的测试,也不代表经过独立核实的排行榜背书。
| 系统 | 5% 错误截断预算下的轮次结束判定延迟 | 600 ms 延迟预算下的错误截断率 |
|---|---|---|
| LiveKit turn-detector v1,托管版 | 543 ms | 4.5% |
| Baton v1 | 577 ms | 4.8% |
| Soniox stt-rt-preview | 647 ms | 5.5% |
| Cue v1,文本加 Smart Turn v3.2 | 719 ms | 7.5% |
| 仅 Cue 文本组件 | 750 ms | 7.8% |
| 仅 Smart Turn v3.2 | 1,051 ms | 14.8% |
来源:Pype 公布的结果与限制,英语,共 400 个来电者轮次。两列是分别调优的工作点,并非同一套固定生产配置的两项同时测量值。
在 5% 预算下,表中 Cue 的判定延迟比 Smart Turn 低 332 ms,但比 LiveKit 托管模型高 176 ms。这是对该表的算术比较,不是对客户实际通话的承诺。“在这里优于 Smart Turn”有数据支持;“最好的轮次检测器”没有。
eot-bench 的评测方法测量的是实际轮次结束后,策略在何时作出决定。它不测量 GPU 推理耗时,也不等于用户直到听见智能体声音所经历的总等待。其默认转录延迟为 500 ms,并系统扫描阈值、最小动作延迟和最大等待时间。
开发集与测试集的边界也需要说清楚。Pype 表示模型微调没有使用基准对话,但其中 150 个英语基准轮次被用于开发提示词和融合公式。主表覆盖全部 400 个轮次,因此不能把整张表描述成完全未接触过的测试集结果。
多语言是否意味着德语、中文和混合语言通话表现一致?
不是。多语言评测提供的是证据,不是对所有语言、口音或语言切换方式的保证。 Pype 评估了 14 种语言:阿拉伯语、中文、荷兰语、英语、法语、德语、印地语、印度尼西亚语、意大利语、日语、韩语、葡萄牙语、西班牙语和土耳其语。
| 语言 | Cue 在 5% 错误截断预算下的延迟 | 该语言及工作点的公布排名 |
|---|---|---|
| 英语 | 719 ms | 13 个系统中第 4 |
| 德语 | 786 ms | 11 个系统中第 3 |
| 西班牙语 | 792 ms | 11 个系统中第 2 |
| 中文 | 838 ms | 9 个系统中第 2 |
| 葡萄牙语 | 681 ms | 11 个系统中第 1 |
| 阿拉伯语 | 815 ms | 9 个系统中第 6 |
这些是同一份 Pype 结果中的部分数据。葡萄牙语第一名仅适用于这个工作点,不代表所有指标第一。各语言参与比较的系统数量也不同。
评测使用同一个英语提示词,但预处理并非完全一致。对于转录经常缺少标点的语言,Pype 会将转录结尾特征设为中性。公开的 eot-bench 数据集包含带音频和文本上下文的人与智能体对话轮次,但它不是专门针对多语言电话号码采集的测试。
奥地利企业应测试真实来电者的德语口音、数字分组习惯和切换英语的情况。任何市场都应使用生产 ASR 的实际输出,而不是人工修正后的转录。我们没有发现能够证明 Cue 在同一次通话内切换语言的准确率,或完整电话号码采集准确率的公开结果。
Cue 能可靠地区分“好的”和“其实不对”吗?
读回号码时,这个区别尤其重要。“好的”可能只表示“我在听”。一句很短的“不对”,却可能推翻智能体即将保存的号码。
Pype 报告,在 90 个留出的合成问题上,STOP 与 CONTINUE 的分类准确率为 98.9%。这不等于多语言生产通话有 98.9% 的可靠性。结果中也披露了一个反例:在更多信息到来前,“hmm, actually no”可能被判为 CONTINUE。
训练使用了 310 段由 LLM 编写的对话。Pype 公开了训练规范和脚本,但没有公开这些对话本身。开放权重便于部署和检查,却不意味着可以仅凭已发布材料独立复现全部训练结论。
我们的建议是,把纠错处理作为号码采集流程中的独立安全条件。随着新词到达重新评估,发现异议时暂停待执行的保存操作,并确认 STOP 真正取消了已排队的语音。分类器即使判断正确,也无法自动停止电话传输层仍在播放的声音。
电话号码采集流程应该怎样使用 Cue?
让 Cue 决定何时听、何时说,让应用逻辑决定允许保存什么。 无论采用哪种轮次检测器,我们都建议保持这一区分。
首先,在停顿之间保留尚未完成的号码。智能体的问题和来电者之前说过的数字组应持续可用。不能用每个新的 ASR 片段覆盖整个草稿,也不能让迟到的结束判定关闭一个更新的转录版本。
其次,解析口述数字并按国家规则规范化。使用合适的电话号码库检查格式和长度是否合理,不要把“十位数字”写成全球统一规则。格式正确仍不能证明号码属于来电者,也不能证明那就是对方想提供的数字。
然后,清楚地读回规范化号码,在提交前要求适合该业务流程的明确确认。表示在听的声音不能等同于同意保存字段。发生纠正后,应替换对应的草稿值,并使之前的确认失效。
最后,只保存已确认的值。重试必须避免超时后生成重复记录。多次采集失败时,应提供电话按键输入、安全文字输入或人工协助。尽量减少音频和转录留存,不要为了调试方便而在所有日志中记录真实电话号码。
这是我们提出的控制设计,不是 Cue 自带的功能。它要实现的是正确且已确认的数据字段,而不只是降低轮次检测延迟。
如何在本地评估 Cue,而不把演示当作完整集成?
Pype 提供 GGUF 文件和 LoRA 适配器。该版本的许可声明将 Cue 的权重、适配器、提示词和文档列为 Apache-2.0。单独的 Smart Turn 依赖采用 BSD-2-Clause。
开发者基础验证需要 Python 环境,以及支持 Gemma 4、可使用 GPU 的 llama-server 构建。下面的 macOS/Linux shell 示例固定了本文审查的客户端源码版本。它不是所有依赖均已固定的生产环境,也没有在本次评测中执行。
git clone https://github.com/PYPE-AI-MAIN/cue-v1.git
cd cue-v1
git checkout 7919e712801e4b93f8de4dd1577fd908510005db
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -e . huggingface_hub
hf download Pype/cue-v1 cue-v1-q8_0.gguf --local-dir models
llama-server -m models/cue-v1-q8_0.gguf -c 8192 -np 4 -ngl 999 \
--jinja --host 127.0.0.1 --port 8090
Hugging Face CLI 指南说明了 hf download 及 --revision 参数。请记录模型版本和文件校验和,并在受控比较前固定它们。本地测试应让 llama.cpp 服务仅监听回环地址,不要将未认证的推理端口暴露到互联网。
在第二个终端中进入仓库,激活同一环境,再运行 python examples/quickstart.py。这只验证文本决策接口。要评估公开结果中的组合系统,还需要 Smart Turn v3.2、同步的音频和转录输入,以及自己的阈值策略。在接入真实电话前,还应加入请求截止时间、过期结果丢弃和有等待上限的回退机制。
一块 GPU 可以支持多少通电话?
每秒决策数不等于并发通话数。 Pype 的 T4 测量约为每秒 13 次决策。单个在途请求时,中位耗时为 79 ms;四个并发请求时升至 364 ms;十六个时为 1,220 ms。这是推理服务测量,与前面的轮次结束延迟表不同。
Pype 的容量估算假设每个来电者轮次约触发六次决策,每分钟有六个轮次。因此,每通电话平均需要每秒 0.6 次决策。二十通活跃电话平均需要每秒十二次决策,已经接近公布的吞吐量。
这不能证明二十位来电者可以同时停顿,并且每人都在 200 ms 内获得判定。应测试请求突发、缓存未命中和真实提示词长度。设置接入上限时,要看高分位延迟,而不只是平均利用率。
发布方所说约每通话分钟 0.0005 美元,是其假设下的 GPU 分摊估算,不是语音智能体总价。比较每次已验收 AI 操作的成本前,还需要加入 ASR、TTS、电话传输、流程编排、监控、闲置容量和维护成本。
电话号码采集的验收测试应该包含什么?
下表是建议测试矩阵,不是 Cue 已经取得的成绩。为每种支持语言准备经授权或合成的测试样例,并保留独立的调优集。
| 测试 | 变化条件 | 必须满足的行为 |
|---|---|---|
| 1. 分组报号 | 数字组之间的长短停顿 | 不提前回应,不丢失前一组。 |
| 2. 号码格式 | 国家代码、前导零、分机号 | 正确规范化,不补造数字。 |
| 3. 口述形式 | “两个零”、数字分组、文字与数字 | 得到同一个预期规范化号码。 |
| 4. 语言切换 | 同一个号码中切换语言 | 完整采集,或明确请求澄清。 |
| 5. ASR 修订 | 最新转录改变一个数字 | 过期判定不能确认旧值。 |
| 6. 纠正 | 停顿后替换一组数字 | 更新草稿,并重新确认。 |
| 7. 表示在听 | 读回号码时说“好的” | 不误确认,不无故重新开始。 |
| 8. 简短异议 | 读回时说“不”或“其实不对” | 停止音频,暂停保存。 |
| 9. 背景声音 | 旁人说话、噪声或回声 | 不进行无依据的字段修改或确认。 |
| 10. 长时间静音 | 对方思考或连接中断 | 等待有上限,恢复路径清晰。 |
| 11. 突发负载 | 多通电话同时出现停顿 | 满足响应期限并安全降级。 |
| 12. 写入失败 | 确认后 CRM 请求超时 | 核对状态,不生成重复记录。 |
测试前先定义核心指标:首次采集成功率 = 无需重新口述即可获得完全符合意图且明确确认号码的尝试数 / 所有符合统计条件的首次尝试数。最终采集成功率、错误保存、抢话、修复轮次和放弃通话应分别报告。
按语言和通话条件细分结果。轮次结束判定延迟、用户听到回复的延迟、提出异议到音频停止的延迟必须分别测量,并包含 P95。使用相同验收标准比较现有系统、仅 Cue 文本组件和组合方案。在调优通话上确定阈值,再冻结配置进行留出测试。
什么情况下值得采用 Cue?
当结构化回答经常被截断、多语言来电者很重要,且团队有能力运营文本与音频结合的决策链路时,Cue 值得评估。如果现有系统运行良好,未经测试直接替换,或指望它绕过不可靠的语音识别,都不够合理。
Wavect 的 AI 集成与工程服务关注如何把组件接入受控的业务流程。Twinsoft AI 案例提供相邻项目的交付背景,并非 Cue 部署证明。软件上线前 QA 检查清单则覆盖更完整的发布决策。
准备一段脱敏的号码采集失败样例,以及目标客户记录格式,即可与 Wavect 讨论语音智能体流程。目标不是让模型更早说话,而是让智能体听得足够完整,接受纠正,并保存正确结果。
