关于 voice-agents
面向开发者的语音 Agent 技能,介绍语音到语音与 STT→LLM→TTS 两种架构。内容侧重轮次管理、延迟测量,以及音频和生成语音的安全处理。
主要功能
- 01语音到语音与管线架构
- 02语音活动检测方案
- 03流式处理与延迟指导
- 04轮次与音频取消防护
- 05音频隐私与授权指导
适用场景
- 01规划语音 Agent 架构
- 02改进响应时序与轮次管理
- 03审查音频保留和工具安全决策
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill voice-agents安装后在 Claude Code 中输入/voice-agents确认已加载。
附带文件references/detailed-guide.md
详细介绍
语音 Agent
语音 Agent 代表着 AI 交互的前沿——人类与 AI 系统自然交谈。挑战不仅在于语音识别和合成,还在于实现自然的对话流程,将延迟控制在 800 毫秒以内,同时处理打断、背景噪声和情感细微差别。
本技能涵盖两种架构:语音到语音(OpenAI Realtime API,一种低延迟架构方案)和流水线(STT→LLM→TTS,控制力更强,也更容易调试)。关键在于:延迟是制约因素。人们期望在 500 毫秒内得到回应。每一毫秒都很重要。
本技能未确立市场采用率统计数据或通用延迟基准。
详细指南
执行本技能前,请阅读详细指南。其中保留了完整的流程和参考资料。请将其中的安全、前置条件和验证要求视为强制要求。针对特定任务时,请加载相关章节;端到端执行时,请完整阅读指南。
旧版流水线示意(非生产实现)
import { Deepgram } from '@deepgram/sdk';
import { ElevenLabsClient } from 'elevenlabs';
import OpenAI from 'openai';
// Initialize clients
const deepgram = new Deepgram(process.env.DEEPGRAM_API_KEY);
const elevenlabs = new ElevenLabsClient();
const openai = new OpenAI();
async function processVoiceInput(audioStream) {
// 1. Speech-to-Text (Deepgram Nova-3)
const transcription = await deepgram.transcription.live({
model: 'nova-3',
punctuate: true,
endpointing: 300, // ms of silence before end
});
transcription.on('transcript', async (data) => {
if (data.is_final && data.speech_final) {
const userText = data.channel.alternatives[0].transcript;
// Do not log raw private transcripts by default.
// 2. LLM Processing
const completion = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{ role: 'system', content: 'You are a concise voice assistant.' },
{ role: 'user', content: userText }
],
max_tokens: 150, // Keep responses short for voice
});
const agentText = completion.choices[0].message.content;
// Log only authorized redacted operational metadata.
// 3. Text-to-Speech (ElevenLabs)
const audioStream = await elevenlabs.textToSpeech.stream({
voice_id: 'voice_id_here',
text: agentText,
model_id: 'eleven_flash_v2_5', // Lowest latency
});
// Stream to user
playAudioStream(audioStream);
}
});
// Pipe audio to transcription
audioStream.pipe(transcription);
}
优化提示:
- 在 LLM 仍在生成时启动 TTS(流式处理)
- 在用户说话时预先计算第一段响应
- 使用 Flash/turbo 模型降低延迟
语音活动检测模式
检测用户何时开始或停止说话
适用场景:所有语音 Agent 都需要 VAD 来管理轮次交替
语音活动检测(VAD):
VAD Types:
1. Energy-based: Simple, fast, noise-sensitive
2. Model-based: Silero VAD, more accurate
3. Semantic VAD: Understands meaning, best for conversation
适用场景
- 用户提及或暗示:语音 Agent
- 用户提及或暗示:语音转文本
- 用户提及或暗示:文本转语音
- 用户提及或暗示:whisper
- 用户提及或暗示:elevenlabs
- 用户提及或暗示:deepgram
- 用户提及或暗示:realtime api
- 用户提及或暗示:语音助手
- 用户提及或暗示:语音 AI
- 用户提及或暗示:对话式 AI
- 用户提及或暗示:tts
- 用户提及或暗示:stt
- 用户提及或暗示:asr
限制
- 仅当任务明确符合上述范围时,才使用本技能。
- 不要将输出视为针对特定环境的验证、测试或专家审查的替代品。
- 如果缺少必要输入、权限、安全边界或成功标准,请停止并请求澄清。
版本、隐私与实现边界
这些混合版本的 SDK 示例仅供概念性参考,未经执行。使用前必须依据已安装的官方 SDK 检查 Deepgram 构造函数和 transcription.live、ElevenLabs 流式传输签名、beta Realtime 客户端以及所提到的 Silero JavaScript 包;不要推断缺失的包或运行时是否可用。smart_format 用于格式化文本,并非降噪功能;model 的 keyword/keyterm 标志因模型而异。无法根据原始振幅设置模型 VAD 的概率阈值,除非先建立经过校准的映射。置信度分数和延迟数据并非普遍可比。
将用户回合结束到首次可听输出定义为测量区间,并在有代表性的设备、网络和语言上测量 p50/p95。STT 首个部分结果、LLM 首个 token 和 TTS 首段音频的时间,不能简单相加并视作端到端保证。不要将部分或过时的假设结果发送给不可逆工具:按顺序处理各轮对话、对最终转录去重、缓冲完整且适用于 TTS 的片段、维护历史记录,并取消或丢弃过时的生成内容和音频。用户打断时,除了停止本地播放,还要截断服务端历史记录中尚未听到的助手内容;仅设置检查点并不足够。
客户端需要适当的临时或会话凭据,而非长期 API 密钥。获取经授权的麦克风、录音、语音和接收方权限范围,尽量减少音频和转录内容的留存及向外部提供商传输,并避免在未获授权时进行语音克隆或冒充。限制套接字、重试、队列和成本;断开连接时清理监听器和流。说出的姓名、数字以及身份声明都不能用作身份验证。验证租户、接收方和操作,并在需要时取得针对具体交易的确认。文本清理必须保留小数、货币、URL 和代码语义;SSML 需要受支持的引擎并进行转义。语音提示词不能构成工具授权边界。未发起任何通话、录音或提供商请求。