ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

让麦克风开口说话:litellm 语音交互全链路实战教程(实时转写+语音合成)

让麦克风开口说话:litellm 语音交互全链路实战教程(实时转写+语音合成) 让麦克风开口说话litellm 语音交互全链路实战教程实时转写语音合成【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellmlitellm 是一个免费的 AI GatewayAI 网关能把 100 多家大模型 API 统一成 OpenAI 格式调用。今天不聊文本直接上语音用它搭一套实时语音交互系统——麦克风收音、服务端转写、LLM 生成回复、语音流式播回来整条链路只跑在一个代理的 4000 端口上。三分钟装好 LiteLLM 代理4000 端口起来语音链路的地基是 litellm 的代理服务器。它负责统一接入 Bedrock、xAI、OpenAI、Azure 的实时语音接口你的客户端代码完全不用跟着换。把仓库拉到本地如果不想读源码pip install litellm[proxy]装好 CLI 就行git clone https://gitcode.com/GitHub_Trending/li/litellm cd litellm pip install litellm[proxy]启动命令只有一条litellm --config proxy_server_config.yaml --port 4000仓库根目录自带 proxy_server_config.yaml里面有general_settings.master_key: sk-1234这种示例主密钥本地玩完全够用。启动成功后所有语音流量都走ws://localhost:4000/v1/realtime这一个 WebSocket 端点。接入实时语音模型YAML 里两行搞定代理认什么模型由model_list决定。语音模型和普通文本模型的区别只有一行mode: realtime。参照 cookbook/livekit_agent_sdk/config.example.yaml以 Bedrock 的 Nova Sonic 为例model_list: - model_name: bedrock-sonic # 客户端用这个名字访问 litellm_params: model: bedrock/amazon.nova-sonic-v1:0 region_name: us-east-1 model_info: mode: realtime # 标记为实时语音模型os.environ/XXX前缀可以从环境变量读密钥避免把 AK 写死在 yaml 里。配置里可以同时挂多个实时模型比如 xAI 的grok-2-vision-1212和 OpenAI 的gpt-4o-realtime-preview切换只靠 URL 里的?model参数代码不动。配好了能连上吗先别急下一节直接开麦。接上麦克风开聊Nova Sonic 实时转写 Demo仓库里现成的 cookbook/nova_sonic_realtime.py 就是完整客户端PyAudio 抓麦 → 每 1024 帧推一个input_audio_buffer.append事件 → 服务端 VAD 判停 → 文本和音频两种 delta 流式回来。跑起来前装两个依赖脚本头部注释里也写了pip install pyaudio websockets python cookbook/nova_sonic_realtime.py关键参数都在文件顶部几行值得看一眼INPUT_SAMPLE_RATE 16000Nova Sonic 要求 16kHz 输入OUTPUT_SAMPLE_RATE 24000输出音频是 24kHz会话用pcm16裸 PCM双向都这样会话里还配了服务端 VADserver_vadthreshold: 0.5是能量判停阈值prefix_padding_ms: 300表示在你开口前多垫 300ms 防止吞字silence_duration_ms: 500表示停 500ms 就认定你说完了。终端里看到✓ Connected to LiteLLM proxy和✓ Session created就说明链路通了对着麦克风说话回复文本和语音会同时流出来。✅换个嗓子LiveKit 示例一行代码换模型想换 xAI 或 OpenAI 的实时接口cookbook/livekit_agent_sdk/main.py 演示了这件事。它连上代理后发两条消息# 第一条投递用户消息 await ws.send(json.dumps({ type: conversation.item.create, item: {type: message, role: user, content: [{type: input_text, text: user_message}]} })) # 第二条要文本音频两种模态的回复 await ws.send(json.dumps({ type: response.create, response: {modalities: [text, audio]} }))换模型不用改代码改环境变量就行export LITELLM_MODELopenai-voice-agent # 原来可能是 grok-voice-agent python cookbook/livekit_agent_sdk/main.py输入一句话回复的文本和语音转写会流式打印response.done事件到达即结束。这就是统一网关的实际收益语音转写、语音合成、模态选择全部收敛到一个协议里。看清整条语音链路追踪与花费语音交互最头疼的是哪一步慢了——是转写、VAD 还是 TTS把litellm_settings.success_callback配上 Langfuse 之类的手段后每轮对话的转写文本、token 用量、耗时都能在面板里看到cookbook/logging_observability/ 里有现成的 Notebook管理端还有审计日志视图能按用户、团队查每次交互的调用记录和成本方便定位谁把预算烧了避坑备忘语音容易坏的三处播出来变调、语速发飘九成是采样率不匹配。输入必须 16kHz输出必须 24kHz两个 PyAudio stream 各开各的 rate别图省事用一个值。总是抢话或听不见你说话调 VAD 三个数——threshold调高减少误触发silence_duration_ms调大给说完话留余量prefix_padding_ms调小减少开头吞音。从 0.5 / 500 / 300 这组默认值开始试。音频越攒越多、内存上涨播放队列有上限保护默认LITELLM_ASYNCIO_QUEUE_MAXSIZE为 10000 块播放卡顿时可以先调小它逼出问题而不是无限堆积。脚本里已经带了ConnectionClosed和 JSON 解析失败的处理分支照抄 cookbook/nova_sonic_realtime.py 的receive_messages结构出问题时你能看清是断连还是脏包。写在最后你现在手里有一套能跑的实时语音链路一个 4000 端口的代理、一个麦克风客户端、一份两行就够的 realtime 配置。下一步可以玩的把turn_detection换成语义判停试试打断效果或者给不同团队下发不同的master_key在审计日志里核对各条语音会话的成本。仓库里 litellm/llms/bedrock/realtime/ 和 litellm/proxy/ 的源码都值得翻协议怎么转发、事件怎么改写看一遍心里就有底了。【免费下载链接】litellmThe fastest, litest AI Gateway. Rust core with Python SDK. Call 100 LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]项目地址: https://gitcode.com/GitHub_Trending/li/litellm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表