- Revised site name and description for clarity and detail. - Updated navigation structure to better reflect the organization of content. - Improved changelog entries for better readability and consistency. - Migrated assistant configuration and prompt guidelines to new documentation paths. - Enhanced core concepts section to clarify the roles and capabilities of assistants and engines. - Streamlined workflow documentation to provide clearer guidance on configuration and usage.
4.0 KiB
4.0 KiB
Pipeline 引擎
Pipeline 引擎把实时对话拆成多个清晰环节,适合需要高可控性、可替换外部能力和复杂业务编排的场景。
运行链路
flowchart LR
subgraph Input["输入处理"]
Audio[用户音频] --> VAD[声音活动检测 VAD]
VAD --> ASR[语音识别 ASR]
ASR --> TD[回合检测 TD]
end
subgraph Reasoning["语义处理"]
TD --> LLM[大语言模型 LLM]
LLM --> Tools[工具]
LLM --> Text[回复文本]
end
subgraph Output["输出生成"]
Text --> TTS[语音合成 TTS]
TTS --> AudioOut[助手音频]
end
Pipeline 的关键价值不在于“环节多”,而在于每个环节都可以被单独选择、单独优化、单独观测。
它适合什么场景
- 需要接特定 ASR / TTS 供应商
- 需要稳定接入知识库、工具和工作流
- 需要把问题定位到具体环节,而不是只看到整体失败
- 需要按延迟、成本、质量对不同环节分别优化
数据流
sequenceDiagram
participant U as 用户
participant E as 引擎
participant ASR as ASR 服务
participant LLM as LLM 服务
participant TTS as TTS 服务
U->>E: 音频帧 (PCM)
E->>E: VAD / 回合检测
E->>ASR: 发送可识别音频
ASR-->>E: transcript.delta / transcript.final
E->>LLM: 发送对话历史与当前输入
LLM-->>E: assistant.response.delta
E->>TTS: 文本片段
TTS-->>E: 音频片段
E-->>U: 音频流与事件
延迟来自哪里
| 环节 | 典型影响 | 常见优化点 |
|---|---|---|
| VAD / EoU | 用户说完后多久触发回复 | 调整静音阈值和最短语音门限 |
| ASR | 语音转写速度和准确率 | 选择合适模型、热词和语言设置 |
| LLM | 首个 token 返回速度 | 选择低延迟模型、优化上下文 |
| TTS | 文字到音频的生成速度 | 选择流式 TTS,缩短单次回复 |
Pipeline 的总延迟通常不是单点问题,而是链路总和。因此更适合做“逐环节调优”。
EoU(用户说完)为什么重要
Pipeline 必须决定“什么时候把当前轮输入正式交给 LLM”。这个判断通常由 EoU 完成。
- 阈值小:响应更快,但更容易把用户停顿误判为说完
- 阈值大:更稳,但首次响应会更慢
你可以把它理解为 Pipeline 中最直接影响“对话节奏感”的参数之一。
工具、知识库和工作流如何插入
Pipeline 特别适合把业务能力插入到对话中:
- 知识库:在 LLM 生成前补充领域事实
- 工具:在需要外部信息或动作时调用系统能力
- 工作流:在多步骤、多分支流程中决定接下来走哪个节点
这也是它在企业客服、流程助手和知识问答场景中更常见的原因。
智能打断
在 Pipeline 中,打断通常由 VAD 检测和 TTS 停止逻辑协同完成:
sequenceDiagram
participant U as 用户
participant E as 引擎
participant TTS as TTS
Note over E,TTS: 正在播放回复
E->>U: 音频流...
U->>E: 用户开始说话
E->>E: 判定是否触发打断
E->>TTS: 停止合成 / 播放
E-->>U: output.audio.interrupted
相比端到端实时模型,这种方式更容易解释“为什么打断”以及“在哪个环节发生了问题”。
配置示例
{
"engine": "pipeline",
"asr": {
"provider": "openai-compatible",
"model": "FunAudioLLM/SenseVoiceSmall",
"language": "zh"
},
"llm": {
"provider": "openai",
"model": "gpt-4o-mini",
"temperature": 0.7
},
"tts": {
"provider": "openai-compatible",
"model": "FunAudioLLM/CosyVoice2-0.5B",
"voice": "anna"
}
}
相关文档
- 引擎架构 - 回到选择指南
- Realtime 引擎 - 对比端到端实时模型路径
- 工具 - 设计可被 LLM 安全调用的工具
- 知识库 - 在对话中补充领域知识