mcpField
V
voice-agents

voice-agents

github.com/sickn33Agent 工作流48.7k892 次安装1 天前更新
代码仓库

关于 voice-agents

面向开发者的语音 Agent 技能,介绍语音到语音与 STT→LLM→TTS 两种架构。内容侧重轮次管理、延迟测量,以及音频和生成语音的安全处理。

主要功能

  1. 01语音到语音与管线架构
  2. 02语音活动检测方案
  3. 03流式处理与延迟指导
  4. 04轮次与音频取消防护
  5. 05音频隐私与授权指导

适用场景

  1. 01规划语音 Agent 架构
  2. 02改进响应时序与轮次管理
  3. 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 需要受支持的引擎并进行转义。语音提示词不能构成工具授权边界。未发起任何通话、录音或提供商请求。

评论

支持 Markdown