AgentEar 基线
阅读快照:https://github.com/idoris-ai/agentear ,main @ 17e911b7675db6fe4cd90a13679457311ef4d943(2026-11-12 02:53 UTC,fix(qwen3): 升级恢复标记在回切落盘后才清)。本地检出在 references/checkouts/agentear,不入库。只做静态阅读,没有编译,没有按键录音。
AgentEar 是 Apple Silicon 上的本地语音进程,版本 0.29.0,Apache-2.0。README 写明 Intel 和 Windows 没有可用的 FunASR macOS 运行时,ASR 子进程起不来。见 README.md 第 46-52 行。
已经有的路径
| 能力 | 现状 | 证据 |
|---|---|---|
| 采集 | cpal 麦克风,16 kHz 单声道 i16。右 Command 开始和停止,对话模式是双击 |
src/audio.rs 第 1-4、60-66 行,src/main.rs 第 1413-1430 行 |
| ASR | 松键之后把整段 wav 交给引擎。默认识别是 SenseVoice,旁边带 fsmn-vad.gguf,VAD 用来切这段录音,不是在播放时监听用户 |
src/asr.rs 第 174-194 行 |
| 输入法 | 按一下录音,转写进剪贴板。空闲常驻 README 写 13 MB | README.md 第 13-25 行 |
| 对话 | 半双工状态机:Listening、Thinking、Speaking。说话时用户听到的是沉默 | src/session.rs 第 18-36 行 |
| 按键打断 | 再按一次先 talk::stop_playback(),再 host::on_barge_in()。这是推键,不是语音检测 |
src/main.rs 第 1415-1427 行,src/session.rs 第 286-305 行 |
| 自动打断 | README 把 AEC / VAD 自动打断标成未做,并写 VPIO 内容级自触发 0/5 | README.md 第 38 行 |
| TTS | 本机 HTTP POST /speak 返回整段 wav。默认后端是 mlx-community/VoxCPM2-4bit。句子级流水线把 LLM 增量切句再逐句合成 |
services/tts/server.py 第 1-12 行,services/tts/backends.py 第 10-19 行,src/talk.rs 第 2767-2774 行 |
| 接 agent24 | Unix socket 上的 A3:initialize、_a24/events/emit、_a24/model/complete。不链接 agent24 的 crate |
src/a3.rs 第 1-15、515-527 行 |
| 附着时的模型调用 | HostLlm 明确写非流式。streams() 默认返回 false,所以边出边合成会退回整句 |
src/host.rs 第 584-618 行,src/talk.rs 第 134-136、2792-2798 行 |
| 取消 | Conn::call 超时才发 $/cancelRequest。这不是用户开口时的取消 |
src/a3.rs 第 451-467 行 |
README 自己写过一句首字延迟:句子级流水线把中位数从 4.86 秒降到 2.80 秒。HostLlm 的注释说附着走整句,所以会比本机流式慢,并引用同一对数字。见 README.md 第 36 行。这次没有重测。
和 E001 的差距
语音输入法和半双工通话已经在这个进程里。缺的是播放期间用语音打断、附着推理的流式、以及开口时取消还在飞的 _a24/model/complete。原生全双工不在这个仓库里。Windows 教室主机也不能直接跑这份二进制。