<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>语音交互 on Zesean 的博客</title><link>https://zeseanblog.top/tags/%E8%AF%AD%E9%9F%B3%E4%BA%A4%E4%BA%92/</link><description>Recent content in 语音交互 on Zesean 的博客</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Sat, 05 Sep 2026 14:53:14 +0800</lastBuildDate><atom:link href="https://zeseanblog.top/tags/%E8%AF%AD%E9%9F%B3%E4%BA%A4%E4%BA%92/index.xml" rel="self" type="application/rss+xml"/><item><title>车载 AI 语音助手（Jetson Orin Nano）</title><link>https://zeseanblog.top/projects/vehicle-voice-agent/</link><pubDate>Tue, 01 Sep 2026 14:00:00 +0800</pubDate><guid>https://zeseanblog.top/projects/vehicle-voice-agent/</guid><description>&lt;h2 id="项目概述"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e6%a6%82%e8%bf%b0" class="header-anchor"&gt;&lt;/a&gt;项目概述&#13;&#10;&lt;/h2&gt;&lt;p&gt;基于 NVIDIA Jetson Orin Nano 的&lt;strong&gt;端侧车辆 AI 语音助手&lt;/strong&gt;：说话→听懂→思考→执行→回答全链路在车端本地完成，不依赖云端。集成 ASR-TTS 语音交互、意图路由、RAG 车辆知识库、LLM/Tool 调用与 QT 数字座舱界面，实现车辆知识问答、车控工具调用与 GUI 展示。&lt;/p&gt;&#10;&lt;p&gt;各服务模块采用 &lt;strong&gt;ZeroMQ&lt;/strong&gt; 轻量级通信框架，实现松耦合的分布式多服务架构。&lt;/p&gt;&#10;&lt;h2 id="系统架构"&gt;&lt;a href="#%e7%b3%bb%e7%bb%9f%e6%9e%b6%e6%9e%84" class="header-anchor"&gt;&lt;/a&gt;系统架构&#13;&#10;&lt;/h2&gt;&lt;p&gt;系统拆分为 ASR、Intent Router、RAG、LLM、Tool Bus、TTS、QT UI 七个模块，模块间通过 ZMQ 的 REQ/REP + PUB/SUB 组合，实现&lt;strong&gt;请求应答、状态广播、状态同步&lt;/strong&gt;三种通信模式。&lt;/p&gt;&#10;&lt;p&gt;以一句「帮我把空调调到 24 度」为例的完整链路：&lt;/p&gt;&#10;&lt;pre class="mermaid" style="visibility:hidden"&gt;flowchart LR&#10; MIC["麦克风"] --&gt; VAD["VAD / 关键词唤醒"]&#10; VAD --&gt; ASR["ASR 语音识别&lt;br/&gt;sherpa-onnx zipformer"]&#10; ASR --&gt; IR["意图路由&lt;br/&gt;语义分类 + 规则分类"]&#10; IR --&gt;|"车控意图"| LLM["LLM&lt;br/&gt;Qwen2.5-3B Q4_K_M"]&#10; IR --&gt;|"知识问答"| RAG["RAG 检索&lt;br/&gt;车辆手册向量库"]&#10; RAG --&gt; LLM&#10; LLM --&gt;|"tool_call JSON"| TOOL["Tool Bus&lt;br/&gt;车控工具执行"]&#10; LLM --&gt;|"respond JSON"| TTS["TTS 播报&lt;br/&gt;SummerTTS"]&#10; TOOL --&gt;|"状态同步"| UI["QT 座舱 UI"]&#10; TTS --&gt; OUT["扬声器"]&lt;/pre&gt;&lt;h2 id="关键技术点"&gt;&lt;a href="#%e5%85%b3%e9%94%ae%e6%8a%80%e6%9c%af%e7%82%b9" class="header-anchor"&gt;&lt;/a&gt;关键技术点&#13;&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;AI 语音交互&lt;/strong&gt;：ASR 使用 sherpa-onnx 部署 zipformer 模型，TTS 基于 SummerTTS；设计了 ASR 与 TTS 的同步机制，避免 TTS 播放期间语音回灌误识别；构建 VAD 与关键词唤醒&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;意图路由&lt;/strong&gt;：语义分类 + 规则分类双通路融合的意图识别，编排 5 类服务调用，按意图选择 RAG 检索、LLM 调用、直接语音回复或 Tool 调用的组合&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;RAG 车辆知识库&lt;/strong&gt;：基于 sentence-transformers 将车辆手册向量化，余弦相似度 + Top-K 检索，端侧全离线完成知识问答&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;LLM 部署与 Tool 调用&lt;/strong&gt;：llama.cpp 部署 Qwen2.5-3B 的 GGUF Q4_K_M 量化模型；通过 prompt 强约束让模型只输出两类 JSON——&lt;code&gt;respond&lt;/code&gt; 交给 TTS 播放，&lt;code&gt;tool_call&lt;/code&gt; 驱动车控工具执行&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;QT 车载座舱 GUI&lt;/strong&gt;：数字座舱界面，实时展示空调、车窗、天窗、摄像头与传感器等车辆状态&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="核心-api-与接口设计"&gt;&lt;a href="#%e6%a0%b8%e5%bf%83-api-%e4%b8%8e%e6%8e%a5%e5%8f%a3%e8%ae%be%e8%ae%a1" class="header-anchor"&gt;&lt;/a&gt;核心 API 与接口设计&#13;&#10;&lt;/h2&gt;&lt;h3 id="服务端口与通信原语"&gt;&lt;a href="#%e6%9c%8d%e5%8a%a1%e7%ab%af%e5%8f%a3%e4%b8%8e%e9%80%9a%e4%bf%a1%e5%8e%9f%e8%af%ad" class="header-anchor"&gt;&lt;/a&gt;服务端口与通信原语&#13;&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;服务&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;端口&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;协议&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Intent Router&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;:6666&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ZMQ REQ/REP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RAG Service&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;:6667&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ZMQ REQ/REP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LLM Service&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;:6668&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ZMQ REQ/REP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tool Bus&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;:6669&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ZMQ REQ/REP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;状态广播&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;:6670 / :6671&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ZMQ PUB/SUB&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;TTS Server&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;:7777&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;音频流&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;llama-server（GGUF 推理后端）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;:8080&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;HTTP&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;C++ 侧封装了 &lt;code&gt;ZmqServer / ZmqClient&lt;/code&gt;（REQ/REP 请求应答）与 &lt;code&gt;ZmqPub / ZmqSub&lt;/code&gt;（状态广播）两组通用组件，各服务只依赖消息契约、不依赖彼此实现。&lt;/p&gt;&#10;&lt;h3 id="意图路由五分类多分支"&gt;&lt;a href="#%e6%84%8f%e5%9b%be%e8%b7%af%e7%94%b1%e4%ba%94%e5%88%86%e7%b1%bb%e5%a4%9a%e5%88%86%e6%94%af" class="header-anchor"&gt;&lt;/a&gt;意图路由：五分类多分支&#13;&#10;&lt;/h3&gt;&lt;p&gt;Router 对每句输入做&lt;strong&gt;语义分类 + 规则分类&lt;/strong&gt;双通路融合，输出五类意图并按类型路由到不同服务链：&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;意图&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;链路&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;典型时延&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;EMERGENCY（紧急事项）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RAG → TTS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;~0.5s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;FACTUAL（手册事实问答）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RAG → TTS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;~0.5s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;EXPLICIT_CMD（明确车控指令）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tool Bus → TTS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;~0.5s&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;COMPLEX（复杂查询）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RAG → LLM → TTS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;秒级&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CREATIVE（闲聊/生成）&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LLM → TTS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;秒级&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LLM + Tool 闭环&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;LLM ↔ Tool → LLM → TTS&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;秒级&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="llm-双模式-json-契约"&gt;&lt;a href="#llm-%e5%8f%8c%e6%a8%a1%e5%bc%8f-json-%e5%a5%91%e7%ba%a6" class="header-anchor"&gt;&lt;/a&gt;LLM 双模式 JSON 契约&#13;&#10;&lt;/h3&gt;&lt;p&gt;通过 Prompt 强约束 LLM 只输出两类 JSON，这是「语音语义 → 车辆动作」的核心契约：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;&#10;&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1&#10;&lt;/span&gt;&lt;span class="lnt"&gt;2&#10;&lt;/span&gt;&lt;span class="lnt"&gt;3&#10;&lt;/span&gt;&lt;span class="lnt"&gt;4&#10;&lt;/span&gt;&lt;span class="lnt"&gt;5&#10;&lt;/span&gt;&lt;span class="lnt"&gt;6&#10;&lt;/span&gt;&lt;span class="lnt"&gt;7&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td class="lntd"&gt;&#10;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;action&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;respond&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;好的，已为您将空调调到 24 度&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;action&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tool_call&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tool&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;ac&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tool_action&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;set_temperature&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;params&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nt"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;reason&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;用户要求把空调调到 24 度&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;respond&lt;/code&gt; → 直接送 TTS 播报&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;tool_call&lt;/code&gt; → Tool Bus 侧做参数归一化与校验（例如从口语化文本中提取「24 度」的数值），执行后通过 PUB 通道把车辆状态同步给 QT 座舱，并把执行结果回灌 LLM 生成自然语言回复&lt;/li&gt;&#10;&lt;li&gt;无法归一化的输出会降级为 &lt;code&gt;respond&lt;/code&gt; 兜底，保证任何情况下用户都能得到语音反馈&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="rag-检索接口"&gt;&lt;a href="#rag-%e6%a3%80%e7%b4%a2%e6%8e%a5%e5%8f%a3" class="header-anchor"&gt;&lt;/a&gt;RAG 检索接口&#13;&#10;&lt;/h3&gt;&lt;p&gt;车辆手册切片后经 sentence-transformers 编码为 &lt;strong&gt;768 维向量&lt;/strong&gt;入库；查询时同模型编码 query → 余弦相似度 Top-K 检索 → 命中文档拼接进 LLM 上下文，全部在端侧离线完成。&lt;/p&gt;&#10;&lt;h2 id="项目状态"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e7%8a%b6%e6%80%81" class="header-anchor"&gt;&lt;/a&gt;项目状态&#13;&#10;&lt;/h2&gt;&lt;p&gt;全链路已在 Jetson Orin Nano 上跑通，端侧离线完成语音到车控的闭环。&lt;/p&gt;&#10;</description></item></channel></rss>