# myassist **Repository Path**: null_500_7265/myassist ## Basic Information - **Project Name**: myassist - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-27 - **Last Updated**: 2026-10-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # myassist · 离线语音助手组装层 把局域网内四个独立的语音 WebSocket 服务组装成一套完整的离线语音助手:**唤醒 → 聆听 → 对话 → 播报**。 当前状态:**P1 已完成**。最小链路(唤醒→ASR→agent→TTS→播放)+ 本地命令词(说「停止」立即打断播报,FSM 直接处理不走 LLM)+ 播报中唤醒词打断 + 30s 免唤醒续聊窗口 + 逐句流水线播报(首响 ~1-2s,句间响度归一化)+ 数字转中文读法 + 状态服务(`:9300` 状态页,实时看 FSM 状态/转写/回复/上游健康)。设计文档见 `docs/myassist-design.md`。 ## 四个上游服务(跑在 192.168.1.13) | 服务 | 端口 | 职责 | 协议要点 | |---|---|---|---| | [mywakeword](https://gitee.com/null_500_7265/mywakeword) | :9100 | 离线唤醒词「**小米小米**」(sherpa-onnx KWS,免训练换词) | binary 16k PCM → `hit` 事件 | | [myasr](https://gitee.com/null_500_7265/myasr) | :9000 | 实时语音转写(SenseVoice / whisper 双引擎) | PCM + `start/stop` → `partial` / `final` | | [myagent](https://gitee.com/null_500_7265/myagent) | :8080 | LLM 对话代理(Go,Anthropic Messages API) | `message`(token 鉴权)→ `reply` | | [mytts](https://gitee.com/null_500_7265/mytts) | :9200 | 离线文本转语音(sherpa-onnx VITS) | `syn` → PCM 分块 + `end` | ## myassist 是什么 跑在**设备端**(树莓派 / Linux PC,带麦克风和音箱)的 Go 编排器: - **核心状态机**:待机 → 聆听 → 思考 → 播报,播报完 30s 内免唤醒续说 - **音频归 core,UI 零音频**:采集/播放只在守护进程内(v1 用 `arecord`/`aplay` 管道),UI 纯展示 - **音频单源扇出**:一路采集,唤醒词检测常开、ASR 按状态门控(防回声) - **本地命令词不走 LLM**:「停止 / 闭嘴 / 再见」FSM 直接处理 - **UI 两个壳一个协议**:`web/index.html` 单文件状态页(双击即用)订阅 `:9300` 状态流;MagicMirror 模块已砍(2026-09-30) - **myagent 专用工作空间**:仓库内 `ws/` 目录,由 `conf/settings.json` 指定,工具白名单收紧到只读 ## 部署与运维(scripts/,参照 myagent 同套约定) ```bash ./scripts/install-service.sh # 一键部署 systemd 服务(自动从 myagent 读 token 填配置) ./scripts/status.sh # 服务状态 + 四上游端口 + 最近日志 ./scripts/logs.sh # 实时日志(-t 只看 FSM/唤醒/错误关键行) ./scripts/restart.sh | stop.sh ./scripts/test.sh smoke # 冒烟:WAV 走完整链路(唤醒→ASR→agent→TTS 落盘) ./scripts/update.sh # 拉代码→编译→测试→重启 一条龙 ``` 注意:服务端 ALSA `default` 设备走 PulseAudio,systemd 单元已注入 `XDG_RUNTIME_DIR=/run/user/`;音频依赖桌面会话存在,开机未登录时 会失败重启直至登录(麦克风/音箱本来就依赖本地会话)。 ## 目录规划 ``` cmd/myassist/ Go 入口 internal/ orchestrator(FSM) / audio / upstream×4 / session / ui web/index.html 单文件状态页 conf/ myassist.json(端点/参数,含 token,不入 git; 模板见 myassist.json.example,token 也可用 环境变量 MYASSIST_AGENT_TOKEN 或 -agent-token 覆盖) + settings.json(myagent workspace) ws/ myagent 专用工作空间(不入 git) scripts/ deploy/ 构建、交叉编译、systemd docs/ 设计文档 ``` ## 里程碑 | 期 | 内容 | 验收 | |---|---|---| | P0 | 最小链路:唤醒→ASR→agent→TTS→播放 | 「小米小米,今天天气如何」能出声回答 | | P1 | 连续对话窗口、本地命令词、断线重连、状态页 | 服务重启不挂,MagicMirror 能看到状态 | | P2 | 语音打断、audio 换 malgo | 说话能把它打断 | 详细设计(拓扑、协议、延迟预算、风险)见 [docs/myassist-design.md](docs/myassist-design.md)。