<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>小爱音箱 on </title>
    <link>/tags/%E5%B0%8F%E7%88%B1%E9%9F%B3%E7%AE%B1/</link>
    <description>Recent content in 小爱音箱 on </description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <lastBuildDate>Sat, 03 Oct 2026 01:40:44 +0800</lastBuildDate><atom:link href="/tags/%E5%B0%8F%E7%88%B1%E9%9F%B3%E7%AE%B1/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>xiaogpt 怎么接管小爱音箱：轮询原理与 homelab 部署</title>
      <link>/posts/xiaogpt-xiaoai-speaker-homelab/</link>
      <pubDate>Sat, 03 Oct 2026 01:40:44 +0800</pubDate>
      
      <guid>/posts/xiaogpt-xiaoai-speaker-homelab/</guid>
      <description>背景 家里那台小米 AI 音箱是第一代，小米云里的 hardware 代号是 S12A，大陆版设备，绑的是大陆区账号；我在新加坡。homelab 里有一个 OpenAI 兼容的 LiteLLM 网关，后面是两台 DGX Spark 以 TP=2 跑的 Qwen3.8-Flash-Next（vLLM）。想做的事是让小爱回答问题时换成这个模型来答。
用的是 xiaogpt。这次有三条限制：不刷机、不拆音箱；人在海外，账号和设备都在大陆区；最终要跑在 homelab 的 K3s 里，配置进 git，由 ArgoCD 同步。我先在 Mac 上用 docker 跑通，再把它搬进集群。
xiaogpt 的工作方式：轮询小米云的对话记录 xiaogpt 不跑在音箱上，也不跟音箱直接通信。它用 MiService（PyPI 上的包名是 miservice_fork）以小米账号登录，换到小爱音箱服务 micoapi 的 serviceToken，再去调小米云的 mina 接口。音箱照常把语音传给小米云，小爱照常回答，xiaogpt 在云的另一头看着：
sequenceDiagram participant U as 说话的人 participant S as 小爱音箱 participant C as 小米云 participant X as xiaogpt participant L as LiteLLM 与 vLLM U-&gt;&gt;S: 小爱同学，请问…… S-&gt;&gt;C: 上传语音 C-&gt;&gt;S: 小爱自己的回答开始播放 loop 约每秒一次 X-&gt;&gt;C: 拉取最近 2 条对话记录 end C--&gt;&gt;X: 新记录的 query 以关键词开头 X-&gt;&gt;C: player_get_status，在播就 player_pause C-&gt;&gt;S: 暂停播放 X-&gt;&gt;L: chat completions L--&gt;&gt;X: 回答文本 X-&gt;&gt;C: text_to_speech C-&gt;&gt;S: 念出回答 主循环每轮请求一次对话记录接口，请求返回后处理不满 1 秒就补睡到 1 秒，所以周期是 1 秒加一次请求的耗时：</description>
    </item>
    
  </channel>
</rss>
