見出し画像

MacでStackChan物語 #1 Gemma4を頭脳にする環境を構築する

本記事は通常のセットアップではございませんので、
普通にスタックチャンを使いたい人は他の記事をお読みください。

今回は私のLLM勉強を兼ねているので割と細かくやったことを書いています。
備忘録もかねて。

M5Stack版 StackChanとは?

公式サイトより

M5Stack版 StackChan(スタックチャン)は、
M5Stack社の小型マイコン「M5Stack」をベースに開発された、手のひらサイズのオープンソース・コミュニケーションロボットです。

通常はQwenなどを使うみたいです。
デフォルトでも十分に楽しめるのでぜひ遊んでみてください。

んで、

僕の環境はこちら

MacBookPro M1MAX 32GB
macOS Tahoe 26.5.1(2026/7/8時点)
LLM:Gemma4 12B
スタックチャン (スペックなど詳しくはわからない)

目指すは、MacBook Pro + Ollama + Gemma4 + StackChan AI.AGENT です。

                ┌──────────────────────┐
                │      StackChan       │
                │----------------------│
                │ 音声入力             │
                │ 表情                 │
                │ スピーカー           │
                │ AI.AGENT Firmware    │
                └─────────┬────────────┘
                          │ Wi-Fi
                          │
                 WebSocket / HTTP
                          │
                ┌─────────▼────────────┐
                │ MacBook Pro M1 Max   │
                │----------------------│
                │ AI.AGENT Server       │
                │ Ollama                │
                │ Gemma4 12B            │
                └─────────┬────────────┘
                          │
                     Skill / MCP
                          │
                     RAG,,,etc,,,,,,

こんな感じでしょうか。
Ollamaじゃなくてもいいけど、簡単だからそれで押し通す

セットアップ手順


git clone https://github.com/xinnan-tech/xiaozhi-esp32-server.git

git cloneしました。
xiaozhi-esp32-server は AIエージェントの「司令塔」です。
このままだとMacでちゃんと動かないっぽい

satoshi@Satoshi-MacBook-Pro git % git clone https://github.com/xinnan-tech/xiaozhi-esp32-server.git
Cloning into 'xiaozhi-esp32-server'...
remote: Enumerating objects: 34818, done.
remote: Counting objects: 100% (787/787), done.
remote: Compressing objects: 100% (352/352), done.
remote: Total 34818 (delta 562), reused 474 (delta 430), pack-reused 34031 (from 4)
Receiving objects: 100% (34818/34818), 190.01 MiB | 2.96 MiB/s, done.
Resolving deltas: 100% (21738/21738), done.

中身を見てみると、

satoshi@Satoshi-MacBook-Pro xiaozhi-esp32-server % ls
docker-setup.sh		Dockerfile-server-base	docs			main
Dockerfile-server	Dockerfile-web		LICENSE			README.md
StackChan
      ↓
音声受信

↓

音声認識(ASR)

↓

Gemma4へ質問

↓

Gemma4が回答

↓

必要ならTool実行

↓

音声合成(TTS)

↓

StackChanへ返す

って感じを目指します

環境の確認

satoshi@Satoshi-MacBook-Pro git % docker --version                    
docker compose version
Docker version 24.0.2, build cb74dfc
Docker Compose version v2.19.1

satoshi@Satoshi-MacBook-Pro git % ollama list                         
NAME             ID              SIZE      MODIFIED    
gemma4:latest    c6eb396dbd59    9.6 GB    12 days ago    
gemma4:12b       4eb23ef187e2    7.6 GB    4 weeks ago    

satoshi@Satoshi-MacBook-Pro git % curl http://localhost:11434/api/tags
{"models":[{"name":"gemma4:latest","model":"gemma4:latest","modified_at":"2026-06-27T18:50:27.578652437+09:00","size":9608350718,"digest":"c6eb396dbd5992bbe3f5cdb947e8bbc0ee413d7c17e2beaae69f5d569cf982eb","details":{"parent_model":"","format":"gguf","family":"gemma4","families":["gemma4"],"parameter_size":"8.0B","quantization_level":"Q4_K_M"},"capabilities":["completion","tools","thinking"]},{"name":"gemma4:12b","model":"gemma4:12b","modified_at":"2026-06-06T18:25:15.3379332+09:00","size":7556508396,"digest":"4eb23ef187e2c5462566d6a1d3bbbc2f1346d0b4327cbb66d58fffbcc9b2b05c","details":{"parent_model":"","format":"gguf","family":"gemma4","families":["gemma4"],"parameter_size":"11.9B","quantization_level":"Q4_K_M","context_length":262144,"embedding_length":3840},"capabilities":["completion","tools","thinking","vision"]}]}%                                                                                    satoshi@Satoshi-MacBook-Pro git % 

✅ Docker Desktop 使用可能
✅ Docker Compose 使用可能
✅ Ollama 起動中
✅ gemma4:12b 導入済み
✅ Ollama API 応答OK
✅ gemma4:12b は tools / thinking / vision 対応

次に次のファイルを作ります。

cd main/xiaozhi-server
mkdir -p data
nano data/.config.yaml


server:
  websocket: ws://MacのIPアドレス:8000/xiaozhi/v1/
  vision_explain: http://MacのIPアドレス:8003/mcp/vision/explain
  timezone_offset: +9

selected_module:
  LLM: OllamaLLM

LLM:
  OllamaLLM:
    type: ollama
    model_name: gemma4:12b
    base_url: http://host.docker.internal:11434

ここまでで、

✅ MacBook Pro

✅ Ollama

✅ Gemma4:12b

✅ xiaozhi-serverの接続先設定

という「Gemma4を頭脳として使う」設定が完了

satoshi@Satoshi-MacBook-Pro xiaozhi-esp32-server % docker manifest inspect ghcr.nju.edu.cn/xinnan-tech/xiaozhi-esp32-server:server_latest
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.oci.image.index.v1+json",
   "manifests": [
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 2205,
         "digest": "sha256:fd2e8c0ea609f2b95bfea9c486476c84719eadd69cc123389218bbe24629e540",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 2204,
         "digest": "sha256:a9774bff3a803bd27befdc47ce5e9c72434608badc2e4cfe3223704308012bb6",
         "platform": {
            "architecture": "arm64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 565,
         "digest": "sha256:98221290f1f032ecaaf63e7989cb2a075170af22d7cb7af7652dd1a23cd2359a",
         "platform": {
            "architecture": "unknown",
            "os": "unknown"
         }
      },
      {
         "mediaType": "application/vnd.oci.image.manifest.v1+json",
         "size": 565,
         "digest": "sha256:578cde826d156361c530ca7583f10d608a24af89f422fdd55e09a29b7215dabd",
         "platform": {
            "architecture": "unknown",
            "os": "unknown"
         }
      }
   ]
}
satoshi@Satoshi-MacBook-Pro xiaozhi-esp32-server % 

どうやらM1MAXでもこのDockerイメージは動きそうです。
Apple Silicon (M1/M2/M3/M4) 向けイメージが公式に用意されています。

Dockerアプリを起動します

satoshi@Satoshi-MacBook-Pro xiaozhi-server % docker compose pull
[+] Pulling 1/1
 ✔ xiaozhi-esp32-server Pulled                                                                                                    3.7s 
satoshi@Satoshi-MacBook-Pro xiaozhi-server % docker compose up
[+] Running 2/0
 ✔ Network xiaozhi-server_default  Created                                                                                        0.0s 
 ✔ Container xiaozhi-esp32-server  Created                                                                                        0.0s 
Attaching to xiaozhi-esp32-server
xiaozhi-esp32-server  | onnxruntime cpuid_info warning: Unknown CPU vendor. cpuinfo_vendor value: 0
xiaozhi-esp32-server  | 260710 12:42:05[0.9.5_00000000000000][core.utils.gc_manager]-INFO-启动全局GC管理器,间隔300秒
xiaozhi-esp32-server  | 260710 12:42:05[0.9.5_00000000000000][core.utils.modules_initialize]-INFO-初始化组件: llm成功 OllamaLLM
xiaozhi-esp32-server  | 260710 12:42:05[0.9.5_00000000000000][core.utils.modules_initialize]-INFO-初始化组件: intent成功 function_call
xiaozhi-esp32-server  | 260710 12:42:05[0.9.5_00000000000000][core.utils.modules_initialize]-INFO-初始化组件: memory成功 nomem
xiaozhi-esp32-server  | 260710 12:42:05[0.9.5_00000000000000][core.providers.vad.silero]-INFO-SileroVAD
xiaozhi-esp32-server  | 260710 12:42:05[0.9.5_00000000000000][core.utils.modules_initialize]-INFO-初始化组件: vad成功 SileroVAD
xiaozhi-esp32-server  | 260710 12:42:10[0.9.5_00000000000000][core.providers.asr.fun_local]-INFO-funasr version: 1.2.7.
xiaozhi-esp32-server  | 260710 12:42:10[0.9.5_00000000000000][core.utils.gc_manager]-INFO-GC循环任务被取消
xiaozhi-esp32-server  | 260710 12:42:10[0.9.5_00000000000000][core.utils.gc_manager]-INFO-GC循环任务已退出

なんか中国語でてきた

初回起動時、SenseVoiceSmallの model.pt が未配置だったため、
Dockerが同名のディレクトリを自動作成してしまい、
IsADirectoryError が発生した。

誤って作成されたディレクトリを削除し、
公式モデルの model.pt を配置することで解消した。

                ┌──────────────────────┐
                │   StackChan          │
                │ (まだ未設定)       │
                └─────────┬────────────┘
                          │
                    Wi-Fi(WebSocket)
                          │
                ┌─────────▼────────────┐
                │ xiaozhi-server        │  ← 起動済み ✅
                │----------------------│
                │ OllamaLLM            │
                │ gemma4:12b           │
                └─────────┬────────────┘
                          │
                     Ollama API
                          │
                ┌─────────▼────────────┐
                │ Gemma4:12b           │
                └──────────────────────┘


どんどんいこう!

docker compose up

で起動します

次にもう一つ別のターミナルを開いて状態確認を行います。

docker ps

xiaozhi-esp32-server が Up または running ならOK

HTTPサーバーへアクセス。

curl -i http://localhost:8003/xiaozhi/ota/

LAN側のアドレスでも確認

curl -i http://MacのIP:8003/xiaozhi/ota/

Ollamaへの接続経路を確認する

コンテナ内からMacのOllamaを参照できるか確認します。

docker exec xiaozhi-esp32-server \
  python -c "import requests; print(requests.get('http://host.docker.internal:11434/api/tags').text)"

gemma4:12bが結果に含まれていればOK

satoshi@Satoshi-MacBook-Pro ~ % docker exec xiaozhi-esp32-server \
  python -c "import requests; print(requests.get('http://host.docker.internal:11434/api/tags').text)"
{"models":[{"name":"gemma4:latest","model":"gemma4:latest","modified_at":"2026-06-27T18:50:27.578652437+09:00","size":9608350718,"digest":"c6eb396dbd5992bbe3f5cdb947e8bbc0ee413d7c17e2beaae69f5d569cf982eb","details":{"parent_model":"","format":"gguf","family":"gemma4","families":["gemma4"],"parameter_size":"8.0B","quantization_level":"Q4_K_M"},"capabilities":["completion","tools","thinking"]},{"name":"gemma4:12b","model":"gemma4:12b","modified_at":"2026-06-06T18:25:15.3379332+09:00","size":7556508396,"digest":"4eb23ef187e2c5462566d6a1d3bbbc2f1346d0b4327cbb66d58fffbcc9b2b05c","details":{"parent_model":"","format":"gguf","family":"gemma4","families":["gemma4"],"parameter_size":"11.9B","quantization_level":"Q4_K_M","context_length":262144,"embedding_length":3840},"capabilities":["completion","tools","thinking","vision"]}]}
satoshi@Satoshi-MacBook-Pro ~ % 
  • OTA APIが HTTP 200 で応答

  • StackChanへ返すWebSocket先が ws://192.168.0.202:8000/xiaozhi/v1/ になっている

  • DockerコンテナからMac上のOllamaへ接続でき、gemma4:12b を認識できている

問題なさそう!これで、

xiaozhi-server
  ↓
host.docker.internal:11434
  ↓
Mac上のOllama
  ↓
Gemma4 12B

という経路が正しく確立したことが確認できました。

YAMLファイルにベタ書きしたMacのIPがコロコロ変わるのがよくないですねぇ。Wi-Fiルーターで自動になってるからしょうがない。
この辺はまた別途検討しよう。ホスト名でなんとかなるのかしら。

ここからはStackChan本体側です。

1. StackChanを開封して純正状態を確認

まずは改造せずに、

  • 電源ON

  • Wi-Fi接続

  • AI.AGENT画面の起動

  • ファームウェアバージョン確認

  • ボタン、スピーカー、画面の動作確認

を行います。

デフォルトの状態での動作確認はOK
めちゃくちゃ可愛いですねぇ。

ファームウエアはVersion 1.4.3
です。現時点で最新かな。


もうちょいでスタックチャンまでたどり着くねー

進捗

#0 企画      ✅
#1 環境構築    ✅
#2 StackChan接続  ⬜  👈次はココ!
#3 初めての会話  ⬜
#4 Skill     ⬜
#5 Vision    ⬜
#6 MCP     ⬜
#7 Home Assistant⬜
#8 YOLO/OCR   ⬜
#9 完成検査   ⬜


【参考にしていただけましたら、よかったらフォローと、スキ❤️を、そしてX(Twitter)でシェアと感想を頂けると幸いです】

いいなと思ったら応援しよう!

ドイのnote お読みいただきありがとうございました。もし参考になったり面白かったと思っていただけましたらサポートよろしくお願いします。次の執筆のモチベになります。