EDGE · REALTIME VOICE · 12/12

raspberry-pi

对着浏览器说话,派上的 agent 去跑工具,再用语音答回来。

WEBRTC VOICE · LIVEKIT · TOOL-EXECUTING AGENT ON THE PI

lang Python + TSver 无license 未声明
SCROLL
WEBRTCLIVEKITPI-ACPPORT 8445 ONLYWEBRTCLIVEKITPI-ACPPORT 8445 ONLY
SEC.01

$做什么

个人树莓派与家庭服务器实验仓,活跃开发在 voicekit/:浏览器和语音助手开一场实时语音通话,你说中文,助手听懂、回答、用语音说回来。LLM 后端是跑在派上的 pi / sol-pi CLI agent,经 ssh 走 ACP 协议,所以助手能真的在派上执行工具。语音链路基于 LiveKit,信令走 HTTPS/WSS,媒体走 WebRTC UDP。

SEC.02

$快速开始

~/voicekit
SEC.03

$架构

浏览器 (iPhone Safari / 桌面 Chrome)
   │ HTTPS + WSS
   ▼
gateway.py :8445 aiohttp + TLS · 唯一对外入口
   /login /logout HMAC cookie · 10 分钟内 5 次失败返回 429 锁 10 分钟
   /tk            铸 LiveKit token · 注册表存 sha256 · TTL 2h
   /livekit/**    wss + http 反向代理
   │ ws://127.0.0.1:7880
   ▼
livekit-server docker --network host
   TCP 7880 信令 · TCP 7881 媒体兜底 · UDP 7882 媒体 ICE 直连
   │
   ▼
worker agent.py
   VAD  livekit 内置本地 silero
   STT  SiliconFlow ASR → XingChenAGI/XingChenGSR-V1.0 非流式
   LLM  GatewayLLM 回退链 solpi → newapi → siliconflow → platform
   TTS  MiMo mimo-v2.5-tts SSE 流式 · pcm16 / 24 kHz 单声道
        │
        ▼
   bridge/index.ts :8790 只绑 127.0.0.1 · POST /utterance 走 SSE
        │ ssh
        ▼
   pi-acp on the Pi ACP · 流式 + 工具 · 降级链 pi-acp → pi -p → error
SEC.04

$要点

F01
🎙️

四段链路可换后端

VAD 用 livekit 内置 silero。STT 走 SiliconFlow ASR。LLM 是 GatewayLLM 回退链,顺序由 VOICEKIT_LLM_BACKENDS 配置。TTS 是 MiMo,SSE 流式返回 pcm16 / 24 kHz。

F02
🔗

工具能力来自派上

GatewayLLM 本身不支持工具调用,tools 参数会被忽略。工具能力来自 pi-acp 那一侧的 agent。

F03
🪜

桥有降级链

pi-acp(ssh ACP 常驻会话,流式加工具)失败时降到 pi -p(ssh 一次性,按句切块),再失败报错。桥只绑 127.0.0.1:8790。

F04
🚪

端口规则明确

8445 TCP 是唯一对外入口,7882 UDP 走媒体。7880 与 7881 未鉴权且因 --network host 绑在所有网卡上,README 要求不对外开。

F05
⏱️

冷启动超时已覆盖

ACP_INIT_TIMEOUT_MS 代码默认 12000,pi-acp 冷启动常超过 12 秒,部署值在 service 文件里覆盖为 30000。

SEC.05

$路线与限制

← PREV · 11
agent-chatroom