Pi + LM Studio でローカルに大規模モデル Agent を動かす:完全設定ガイド
Pi エージェントフレームワークに LM Studio の推論サービスを組み合わせ、ローカル Mac 上で Gemma 4 シリーズのモデルによりコーディング、校正、エージェントタスクを実行。性能は最先端モデルの約75%に到達


Pi + LM Studio でローカルに大規模モデル Agent を動かす:完全設定ガイド
Pi エージェントフレームワークに LM Studio の推論サービスを組み合わせ、ローカル Mac 上で Gemma 4 シリーズのモデルによりコーディング、校正、エージェントタスクを実行。性能は最先端モデルの約75%に到達
ローカルの大規模モデルは「かろうじて使える」という分水嶺を超えました。GoogleがこのたびリリースしたGemma 4シリーズの助けを借りれば、2022年モデルのM2 Mac(メモリ64GB)1台で、エージェントによるコーディング、スクリプトのリファクタリング、ユニットテストの作成などをこなせ、ループの正確性と速度はおよそ最先端モデルの75%に達します。このチュートリアルでは、ローカルAgentワークフロー全体を再現可能なステップに分解します。プライバシー環境やオフラインシーンでAIコーディングアシスタントを走らせたい開発者に向いています。
始める前の準備
- ハードウェア:Apple Silicon Mac(M2以上)を推奨。ユニファイドメモリ16GB以上、64GBならなお良い(KVキャッシュがメモリを食い尽くします)
- ソフトウェア:Docker Desktop、LM Studio(ローカル推論サービス)、Piエージェントフレームワーク
- モデル:Gemma 4シリーズ。
gemma-4-12b-qat(より新しく、より小さく、より速く、正確性の劣化は小さい)かgemma-4-26b-a4bを推奨 - 所要時間:初回設定は約30分
ローカルモデルはいまどんなレベルか
OpenAIが2025年8月にGPT-OSSをリリースする以前は、ローカルモデルはほとんどのプログラミングタスクで精度不足でした。Gemma 4シリーズのリリース後、作者は実際にこれらのタスクをそれでこなしました。
- Pythonノートブックを5-6モジュールのリポジトリへリファクタリング
- モジュールのコード検査を行い、ジェネリック型ヒントを修正
- ブログ記事の校正、ユニットテストの作成
- 双塔モデル(two-tower)ベースの推薦システムのリポジトリ骨格をゼロから構築
いずれも6か月前のローカルモデルにはまったく手に負えなかったタスクです。
ステップ1:LM Studio でローカル推論サービスを起動
- LM Studio をインストールして開きます。
- モデルマーケットで
gemma-4-12b-qatをダウンロードします。 - Local Serverを起動します。デフォルトで
http://localhost:1234/v1をリッスンします(OpenAI互換インターフェース)。
起動すると、LM StudioはOpenAI形式の推論エンドポイントを提供し、Piはこのエンドポイント経由でローカルモデルを呼び出します。
ヒント:LM Studioの代わりにOllama、llama.cpp、Open WebUIを使うこともできます。llama.cppを直接使うほうが速く、あとで試す価値のある最適化方向です。
ステップ2:Pi を LM Studio へ向けて設定
Piは models.json でモデルを設定します。次の設定を ~/.pi/agent/models.json に書き込み、エンドポイントをDockerホスト上のLM Studioへ向けます。
{
"lmstudio": {
"baseUrl": "http://host.docker.internal:1234/v1",
"api": "openai-completions",
"apiKey": "not-needed",
"models": [
{
"id": "google/gemma-4-12b-qat",
"input": ["text", "image"]
}
]
}
}host.docker.internal は、Dockerコンテナからホストマシンへアクセスするためのエイリアスです。本物のOpenAI APIも同時に使っている場合は、衝突を避けるため OPENAI_API_BASE に別のbaseを指定する必要があります。
ステップ3:Docker Compose で Pi を実行(安全サンドボックス)
Piは権限を絞ったDockerコンテナで動かし、bash権限だけを与えて、物理ドライブを直接読み書きさせないことを強くおすすめします。
services:
pi:
build:
context: .
dockerfile: Dockerfile
image: pi-agent:0.74.0
init: true
stdin_open: true
tty: true
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:-}
OPENAI_API_KEY: ${OPENAI_API_KEY:-not-needed}
GEMINI_API_KEY: ${GEMINI_API_KEY:-}
OPENAI_API_BASE: ${OPENAI_API_BASE:-http://host.docker.internal:1234/v1}
volumes:
- ${HOME}/.pi/agent/models.json:/config/models.json
- ${WORKSPACE:-.}:/workspace
- pi-config:/config
- pi-sessions:/sessions
working_dir: /workspace
volumes:
pi-config:
pi-sessions:重要なポイント:現在の作業ディレクトリを /workspace としてマウントすれば、Piはあなたのコードリポジトリ内でファイルを操作でき、コンテナ外のシステムディレクトリには触れません。
ステップ4:起動スクリプトを書く
以下は推奨の pi 起動スクリプトです。作業ディレクトリからコンテナ名を自動生成し、より厳格なサンドボックスを有効にする --sandbox オプションに対応します。
#!/usr/bin/env bash
# Pi — Start the containerized Pi agent.
SCRIPT_DIR="$(cd -- "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE_DIR="${WORKSPACE:-$(pwd)}"
case "$WORKSPACE_DIR" in
/) ;;
*) WORKSPACE_DIR="$(cd -- "$WORKSPACE_DIR" && pwd)" ;;
esac
export WORKSPACE="$WORKSPACE_DIR"
sandbox="${PI_SANDBOX:-0}"
pi_args=()
while (($#)); do
case "$1" in
--sandbox) sandbox=1 ;;
--no-sandbox) sandbox=0 ;;
*) pi_args+=("$1") ;;
esac
shift
done
compose_files=(-f "$SCRIPT_DIR/docker-compose.yml")
if [[ "$sandbox" == "1" ]]; then
compose_files+=(-f "$SCRIPT_DIR/docker-compose.sandbox.yml")
fi
repo_slug="$(basename -- "$WORKSPACE_DIR" | tr -c 'a-zA-Z0-9_.-' '-' | sed 's/^-//')"
[[ -z "$repo_slug" ]] && repo_slug="workspace"
container_name="pi-${repo_slug}-$$"
api_key_args=(-e OPENAI_API_KEY -e DEEPSEEK_API_KEY -e ANTHROPIC_API_KEY -e GEMINI_API_KEY)
cmd=(docker compose --project-directory "$SCRIPT_DIR" "${compose_files[@]}" run --rm --name "$container_name" "${api_key_args[@]}" pi)
if ((${#pi_args[@]})); then cmd+=("${pi_args[@]}"); fi
exec "${cmd[@]}"検証結果
編集中のコードリポジトリのディレクトリで ./pi を実行すると、PiがDockerを起動して /workspace に入ります。検証として、こんなことを頼んでみてください。
- Piに現在のリポジトリのモジュールを1つリファクタリングさせ、ファイルを正しく分割できるか観察する
- 型ヒントが正しいか検査させる
- LM Studioの画面でトークンの推論過程、KVキャッシュの占有、コンテキストウィンドウの変化をリアルタイムで観察する
うまく動けば、PiがDocker内でファイルを修正しbashを呼び出し、ローカルモデルがバックグラウンドでトークンを1つずつ推論している様子が見られます。
よくある質問
- 推論速度が遅い:ローカルモデルはハードウェアの制約を受け、コンテキストウィンドウが小さくなります。より小さい量子化モデル(12B QATなど)に変えるか、コンテキスト長を減らしましょう。
- プロンプトテンプレートが合わない:初期バージョンによくある問題です。LM StudioとHuggingFaceの「このモデルを使用」ボタンでたいていは素早く修復できます。ツールを最新に保ちましょう。
- KVキャッシュがパンパンになる:64GBのメモリも長いコンテキストで埋まることがあります。メモリ使用を監視し、必要ならセッションを再起動しましょう。
- 本番のソフトウェア開発に使えるか? 現時点ではまだ完全に成熟していませんが、高速でパーソナライズされたローカルのドキュメント照会と補助コーディングとしてはすでに十分実用的で、特にプライバシー敏感シーンでは投資する価値があります。
関連記事

Lovartで一人会社のブランドシステムを構築する
LovartのBrand Kit機能でブランド資産を管理し、複数プラットフォームのビジュアルスタイルを統一する方法を手取り足取り解説。月額19ドルから。

Aholo Viewer:10億ガウス点の3Dシーンブラウザ
群核科技が3Dガウスブラウザ「Aholo Viewer」をオープンソース化。メモリは半減、レンダリングは3倍速く、どんなデバイスのブラウザでも10億+パーティクルの超大型3Dシーンをスムーズにロードできるようにします。

Claudeのデュアルメモリシステム:永続的な脳がついに登場
AnthropicがClaude向けに新たなデュアルモード記憶システムをテスト中。Memory Filesによるファイル記憶とDreamsによる記憶統合を含み、Conway Agentと組み合わせて7x24時間の永続記憶を実現します。