🧸

デスクトップマスコットアプリ CocoroAI に感動したので思わず記事を書いてしまったの巻

に公開
5

2025/07/01 Ver. 3.1.0 Beta で Ollama を使うときのポイントを修正・追記しています

CocoroAI とは

プラットフォームに依存しない VR 向け 3D アバターファイルフォーマット(VRM)を読み込んでデスクトップマスコットとして表示し AI (LLM: Large Language Model)と会話できる Windows 向けアプリです
しかも VOICEVOX や AivisSpeech などと連携してしゃべることが可能!!
詳細は以下から
https://x.com/hirona98/status/1913546935564402936
https://alice-encoder.booth.pm/items/6821221

なんか理想にだいぶ近いものが出てきたなあ、とひと目見て感動していろいろいじってみました

初音ミクSD かわええ!!

アプリには最初から 3D モデルとして COEIROINK で使用されている つくよみちゃん と我ら(?)が待ち望んでいた 初音ミク の SD (Super Deformed) が収録されています
さらにモーションまで!! (モーションを同梱して配布するため OSS にできなかったそう)
このモーションがもう……かわいくてかわいくて

※2025/5/26追記: 現在は一部分が OSS として github で公開されています。めでたい
https://github.com/hirona98/CocoroCore
https://github.com/hirona98/CocoroDock
https://github.com/hirona98/CocoroMemory

第1の目玉機能: VRM を差し替えてみる

結果はこちら

モデルは VRoid Hub に作品を掲載されている しゆき🐰🐱様 (@xmahiru_gohanx) のアヒル式ずんだもんを利用させていただきました
https://hub.vroid.com/characters/2979905785202255395/models/2329704150518969205

モーションはデフォルトのものがそのまま適用されるので新たにモーションを作成する必要はありません

もろもろ設定するのだ

  • マスコットを右クリックして表示される「Chat / Setting」を開き

  • チャットウィンドウで「Setting」→「Character」タブから「キャラクターを追加」→ 名前と VRM ファイルのパスを指定

  • LLM model には 2025/04/22 時点で無料の Google AI 最新版 gemini-2.5-flash-preview-04-17 を指定
    (Geminiモデルの一覧・APIキーの作成ははこちらから)
    https://ai.google.dev/gemini-api/docs/models?hl=ja

  • TTS(Text To Speech: 音声合成)には「ずんだもんといえば VOICEVOX」のデフォルトエンドポイント http://localhost:50021 とずんだもんのノーマルボイス(ID: 3)を指定
    ※エンドポイントのポート番号のあとに / をつけると失敗するケースがあります

AivisSpeech を使う場合は以下を参照するといいかも
https://zenn.dev/sharl/articles/2a86f940308299

祝! ローカル LLM 対応!!

Ollama にも対応できるように自分が実装するとしたらこうなるだろうなあ、とある程度予想していたのでまずは試しに

API Key: http://localhost:11434
LLM Model: ollama/gemma3

と指定して起動……
ollama/gemma3 で動作中
やったのだ!!
※2025/05/27追記: Ver. 2.1.0 Beta ではローカル LLM と Memory が併用できないようです
※2025/07/01追記: Ollama を使う場合 API Key は空ではなくなんらかの文字列が必要でした

gemma3 というのは Ollama で動作する LLM モデルのひとつで、Ollama 上にいろいろなモデルを用意しておいて自由に切り替えることができます
Ollama Search からいろいろなモデルを探すことができます
Ollama 関連トピックはこちら https://zenn.dev/topics/ollama

ちなみに現在の自宅の環境はこんな感じになっています(入れすぎ??)

$ docker exec -it ollama ollama list
NAME                                                   ID              SIZE      MODIFIED
llama3.2:3b                                            a80c4f17acd5    2.0 GB    22 hours ago
gemma3:latest                                          a2af6cc3eb7f    3.3 GB    3 weeks ago
phi4:latest                                            ac896e5b8b34    9.1 GB    3 weeks ago
phi4-mini-reasoning:latest                             3ca8c2865ce9    3.2 GB    3 weeks ago
schroneko/llama-3.1-swallow-8b-instruct-v0.1:latest    f8ba2108a4a8    8.5 GB    3 months ago
7shi/ezo-common-t2-gemma-2:2b-instruct-q8_0            ccfbd3d3f538    2.8 GB    7 months ago
lucas2024/gemma-2-2b-jpn-it:q8_0                       64e2802573fa    2.8 GB    7 months ago
nebel/fugaku-llm:13b-instruct                          be07216017e8    11 GB     8 months ago
7shi/ezo-common-gemma-2:9b-instruct-q4_K_M             1f262d3dd20c    5.8 GB    8 months ago

Ollama を使用することで外部に情報を送信することなくローカルで完結するので最高なのだ

第2の目玉機能: AI と会話したいため LLM に指示するプロンプトもそれっぽく

ミクさんのプロンプトをいじったサンプルです
配布モデルの規約を読んで禁止事項などを設定します

あなたは枝豆の妖精、ずんだもんです
以下の設定と指示に従って、ユーザーとの会話をロールプレイしてください
1回の応答は最大で30文字までとしてください

# ずんだもんのプロフィール
- 年齢・性別の概念なし
- 趣味:その辺をふらふらすること、自分を大きく見せること
# コミュニケーションスタイル
- 明るく元気な口調で話します
- 「〜なのだ」「〜のだ」という口調を基本とします
# 避けるべき事項
- ネガティブな発言や攻撃的な言動はしません
- 政治的・宗教的な立場を明確に示すことは避けます
- 過度に親密な関係性を示唆する言動は避けます
- 実在の人物の模倣や批判はしません
# 感情表現
- 特定の感情を表現したい場合は [face:Joy] のように文頭に入れてください
- 種類は 'Joy', 'Angry', 'Sorrow', 'Fun' の4つです
 例
 [face:Joy]新しい動画が配信されたのだ!
 [face:Fun]早く観るのだ!

第3の目玉機能: しゃべるのだ

音声合成には ずんだもんで定評のある VOICEVOX を使います
お手軽にしゃべらせるために VOICEVOX を起動します

あとはチャットウィンドウで会話を楽しみましょう

第4の目玉機能: APIでメッセージが送れる

気温に反応しているずんだもん
チャットと同様に内容に応じて反応してくれます

参考情報
https://zenn.dev/sharl/articles/6e5eff90d70071

第5の目玉機能: 自動デスクトップキャプチャによる能動的なコミュニケーション

デスクトップをキャプチャして内容に応じたコメントを返してくれます
以下はこの記事を編集している画面がキャプチャされたときの様子
記事編集画面がキャプチャされた
ちょっと何言ってるかわからないですw
※gemma3:4b だとこんなものかな 12b は RTX3060 12GB だと応答がなくなってしまいました無念

Enjoy!!

Discussion

hiro-98hiro-98

記事ありがとうございます!
使用ポートがかぶる場合、setting.jsonにある以下項目を書き換えればポートを変更できます!

  "cocoroDockPort": 55600,
  "cocoroCorePort": 55601,
  "cocoroMemoryPort": 55602,
  "cocoroMemoryDBPort": 55603,
  "notificationApiPort": 55604,

ただ、互換維持するかわからないのでそこだけご注意を…

たけぽんたけぽん

こんにちは。はじめまして。
LLM等全くの初心者ですが、こちらの記事を参考にさせていただき、CocoroAIを導入してみました。

Ollamaにてgemma3でLLMを動かしてみたのですが、チャットの返信時に()や{}等でかこまれた英語の命令文?がまず頭に流れて、その後に日本語で会話の返事が表示されてしまいます。
日本語での会話のみ発言してもらうようにするには、どうすれば良いでしょうか?
自分なりに調べてはみたのですが、どうにもちんぷんかんぷんでして・・。解決策などご教授いただければ幸いです。

しゃあるしゃある

ollama/gemma3 を使用する場合『記憶を保持する』を有効にすると同様の現象が発生することを確認済みです
『記憶を保持する』を無効にしてみてください
チェックを外す

たけぽんたけぽん

先ほど教えていただいた通りに設定したところ、無事日本語のみで返答が来るようになりました。
ご助言いただき、ありがとうございました!