Second Me をローカル LLM で動かすーmacOS で Docker は使わない方法
この記事では Docker を使わずに macOS のローカル環境で「Second Me」を構築し、ローカル LLM で動作させる手順を紹介します。
はじめに
Second Me とは、自分の思考パターンを理解して自己表現する AI を展開できるオープンソースの個人 AI です。
私はこの Second Me を試す過程でいくつかのエラーに遭遇し、その解決に時間を要しました。
なのでこの記事では、似たようなエラーに遭遇した方の助けにもなれば良いなと思っています。
記事の主な内容は以下の通りです。
- macOS での環境構築手順
- ローカル LLM (Ollama)との連携設定
- AI のトレーニングプロセスと、その中で発生したエラーへの対処法
- 実際に動かしてみた感想
マシンスペック
私が構築に使用したマシンのスペックは以下の通りです。
- OS: macOS Sequoia 15.4.1
- チップ: Apple M3 Pro
- メモリ: 36GB
- Python: 3.13.5(python3)
- Node: v23.0.0
環境構築の手順
公式ドキュメントの Deployment | Option 2: Integrated Setup (Non-Docker) を参考に、 Docker を使わない方法で環境を構築しました。
私は、基本的にこのドキュメントに沿って作業をしていけば特にエラーなく環境構築することが出来ましたが、念のため手順を下記に載せます。
1. 必要なツールのインストール
今回セットアップを進める中で、いくつかのツールが追加で必要になることが分かりました。(後述の make
コマンドによる依存関係インストール時に分かりました)
下記をあらかじめ Homebrew でインストールしておくとスムーズです。
brew install cmake poetry
2. プロジェクトのセットアップ
次に、 Second Me のプロジェクトをセットアップします。
cd Second-Me
# uv のインストール
curl -LsSf https://astral.sh/uv/install.sh | sh
# 仮想環境を作成
uv venv --python 3.12
# 仮想環境をアクティベート
source .venv/bin/activate
# 依存関係をインストール
make setup
3. アプリケーションの起動と停止
セットアップが完了したら、以下のコマンドでアプリケーションを起動します。
make restart
初回は結構時間がかかると思います(私はかかりました)。が、下記のような出力が出れば問題ありません。
[2025-08-17 22:28:10] [SUCCESS] Frontend is responding at http://localhost:3000
[2025-08-17 22:28:10] [SUCCESS] Frontend service is ready
[2025-08-17 22:28:10] [SECTION] Services are running
[2025-08-17 22:28:10] [INFO] Frontend URL: http://localhost:3000
[2025-08-17 22:28:10] [INFO] Backend URL: http://localhost:8002
ちなみに停止する際は、次のコマンドを実行します。
make stop
ローカル LLM の設定
Second Me は、公式ドキュメントで案内されている通り、 Ollama 経由でローカル LLM を利用できます。
ここではその設定方法を説明します。
1. Ollama の準備
まず、ローカルで LLM を動作させるために Ollama を準備します。
Ollama がインストールされていない場合は、公式サイトからダウンロードしてください。
※ollama コマンドの詳しい使い方は、この記事では割愛します。
次に、 Second Me で利用したいモデルをあらかじめダウンロードしておきます。
この記事では、 Llama-3.1-Swallow-8B-Instruct-v0.5
を使用しました。
ollama pull hf.co/mmnga/Llama-3.1-Swallow-8B-Instruct-v0.5-gguf:latest
なぜ Llama-3.1-Swallow-8B-Instruct-v0.5 を選んだのか?
上記の記事によると、このモデルは産総研と東京科学大学の合同プロジェクトによって開発され、日本語性能が Qwen-3 とほぼ同水準とのことです。
今回私は日本語で Second Me の AI とやり取りをしたかったので、このモデルを選んでみました。
2. .env ファイルの修正
次に、 Second Me の設定ファイルを修正します。
トレーニング時にエラーが発生するのを防ぐため、.env
ファイル内の EMBEDDING_MAX_TEXT_LENGTH
を、使用するモデルのコンテキスト長に合わせて設定します。
モデルのコンテキスト長は、 ollama show
コマンドで確認できます。
ollama show hf.co/mmnga/Llama-3.1-Swallow-8B-Instruct-v0.5-gguf:latest
このコマンドを実行すると、モデル情報の中に embedding length
という項目が表示されます。
その値を .env
ファイルに設定してください。
# hf.co/mmnga/Llama-3.1-Swallow-8B-Instruct-v0.5-gguf:latest の embedding length
EMBEDDING_MAX_TEXT_LENGTH=4096
3. モデルの設定
最後に、 Second Me の Web UI から、使用するモデルを設定します。
画面左下の「Support Model Config」から設定画面を開き、以下のように入力しました。
Chat:
-
Model Name:
hf.co/mmnga/Llama-3.1-Swallow-8B-Instruct-v0.5-gguf:latest
-
API Key:
ollama
-
API Endpoint:
http://127.0.0.1:11434/v1
Embedding:
-
Model Name:
hf.co/mmnga/Llama-3.1-Swallow-8B-Instruct-v0.5-gguf:latest
-
API Key:
ollama
-
API Endpoint:
http://127.0.0.1:11434/v1
Second Me のトレーニング
環境設定が完了したら、いよいよ自分自身の「Second Me」をトレーニングします。
1. Define Your Identity
まず、 AI のベースとなる自己紹介文を入力します。私は以下のように設定しました。
Has strong intellectual curiosity and enjoys Japanese comedy.
Works as a software engineer.
A man living alone.
2. Upload Your Memory
次に、 AI に学習させるためのメモリ(データ)をアップロードします。私は普段書いている業務日誌をアップロードしました。
※トレーニングを進める過程でエラーになってしまったので、最終的には業務日誌を削除して職務経歴書などをアップロードしました
3. Training Process
最後に、トレーニングの設定を行います。ローカル LLM での実行は負荷が高いと考え、最初は以下のように控えめな設定で試しました。
- Data Synthesis Mode: low
- Choose Base Model for Training Second Me: Qwen2.5-0.5B-Instruct(最も軽量なモデル)
その他の「Configure Advanced Training Parameters」や「Configure Advanced Behavior」はデフォルト値のままトレーニングを開始しました。
トレーニング中のエラーと対処法
トレーニングはすんなりとは完了せず、以下の3つの問題に直面しました。
問題1: トレーニングデータのサイズが大きすぎた
事前に X などで検索したところ、ある程度時間がかかるとは知っていたのですが、それでもいつまで経っても終わらないので公式ドキュメントを確認したところ、
公式の FAQ に「トレーニングデータは100KBまでを推奨」という記載がありました。
どうやら最初にアップロードした業務日誌が全てで約400KBほどあったのが遅い原因のようでした。
そのため、推奨サイズに合わせていくつかピックアップした業務日誌をアップロードしました。(70KB 程度)
問題2: Augment Content Retention で処理が停止
データ量を減らしても、Augment Content Retention
のステップで処理が進まなくなる現象が発生しました。
よって、「Concurrency Threads」のパラメータをデフォルトの倍の4に設定し、学習させるメモリ(データ)も職務経歴書と今回のために作成した自己紹介文などに絞りました。
これでだいたい 15KB 程度までサイズを小さくしました。
また、(これは速度とは無関係かもですが)トレーニング用のベースモデルも大きいものに変更しました
→ Qwen2.5-3B-Instruct
問題3: Ollama の500エラー
Extract Dimensional Topics
のステップで Ollama が500エラーを返し、コンソールに以下のような警告が出力されているのを確認しました。
time=2025-08-16T22:45:02.350+09:00 level=WARN source=runner.go:128 msg="truncating input prompt" limit=4096 prompt=5457 keep=5 new=4096
これは、入力プロンプトがモデルのコンテキスト長(この場合4096)を超えていることを示しています。
このログをヒントに、私は .env
ファイルに設定していた EMBEDDING_MAX_TEXT_LENGTH
の値が誤っているのではないかと気づきました。
公式ドキュメントをちゃんと読まずに、早とちりをして当初 context length
の値である 131072 を設定していたのです。
(「Check your Ollama embedding model context length:」って書いてあった...)
なので、 embedding length
の 4096 に設定を修正したところ、エラーが解消され、トレーニングが無事に完了しました。
実際に使ってみた感想
エラーを乗り越えてトレーニングを完了させた!...ものの、正直なところ、通常のローカル LLM と対話しているのと大きな違いを感じられませんでした💧
アップロードしたメモリの内容がうまく活用されている様子はなく、繰り返しの質問しかしてくれませんでした...悲しい...
これはなぜなのか、まだ分かっていません🤔
自分がアップロードした学習させるためのメモリ(データ)の質や量が適切ではなかったり、トレーニングの設定が良くなかったのかもしれません。
(そもそも自分がローカル LLM 周りとかに疎い)
この点については、時間がある時に引き続き調査していきたいと思います。
まとめ
この記事では、 macOS 上で Docker を使わずに Second Me をセットアップし、ローカル LLM で動かすまでの一連の流れと、その過程で発生した問題の解決策を紹介しました。
振り返ってみるとトレーニングデータのサイズ調整と、 Ollama のエラーログを元にした .env
ファイルの設定が重要なポイントでした。
まだ Second Me の性能を十分に引き出せているとは言えませんが、この記事が Second Me のローカル環境構築に挑戦する方々の参考になれば嬉しいです。
Discussion