Ollama で Hermes をローカルで動かす — API 料金ゼロ
目次
- 何が問題か
- この手順で解決すること
- 必要なもの
- ステップ 1: Ollama を入れる
- ステップ 2: モデルを取得する
- ステップ 3: Hermes を設定する
- ステップ 4: Hermes を使ってみる
- ステップ 5: 用途に合ったモデルを選ぶ
- ステップ 6: 速度を詰める
- Ollama のコンテキスト長を広げる
- モデルを読み込んだままにする
- GPU に処理を振る(使える場合)
- ステップ 7: ゲートウェイのボットとして動かす(任意)
- Telegram
- Discord
- ステップ 8: フォールバックを用意する(任意)
- 困ったときは
- 起動時に「Connection refused」と出る
- 応答が遅い
- 最初の応答が遅い(プリフィル)
- モデルがツール呼び出しどおりに動かない
- コンテキスト長のエラーが出る
- 費用の比較
- ローカルでもうまくいくこと
- クラウドのモデルのほうが得意なこと
何が問題か
クラウドの LLM API はトークン単位で課金されます。コーディングを集中的に進めれば、1 セッションで 5〜20 ドルかかることもあります。個人のプロジェクト、学習、プライバシーに配慮したい作業では、この金額が積み上がっていきます。しかも会話の内容は毎回、第三者へ送られています。
この手順で解決すること
Hermes Agent を、モデルの実行基盤に Ollama を使って、すべて自分のハードウェア上で動かします。API キーもサブスクリプションも要らず、データが端末の外へ出ることもありません。設定が済めば、OpenRouter や Anthropic を使うときとまったく同じように動きます。ターミナルのコマンド実行、ファイル編集、ウェブの閲覧、作業の委譲まで同じで、違うのはモデルが手元で動いている点だけです。
最後まで進めると、次の状態になります。
- Ollama がオープンウェイトのモデルを 1 つ以上動かしている
- Hermes がカスタムエンドポイントとして Ollama につながっている
- ファイルを編集し、コマンドを実行し、ウェブを閲覧できるローカルのエージェントが動いている
- 必要なら、自分のハードウェアだけで動く Telegram / Discord のボットも用意できる
必要なもの
| 構成要素 | 最低限 | 推奨 |
|---|---|---|
| メモリ | 8 GB(3B 級のモデル向け) | 32 GB 以上(27B 以上のモデル向け) |
| ストレージ | 空き 5 GB | 30 GB 以上(複数のモデルを置く場合) |
| CPU | 4 コア | 8 コア以上(AMD EPYC、Ryzen、Intel Xeon など) |
| GPU | 必須ではありません | VRAM 8 GB 以上の NVIDIA GPU があると大幅に速くなります |
ステップ 1: Ollama を入れる
curl -fsSL https://ollama.com/install.sh | sh動いていることを確認します。
ollama --version
curl http://localhost:11434/api/tags # Should return {"models":[]}ステップ 2: モデルを取得する
お使いのハードウェアに合わせて選んでください。
| モデル | ディスク使用量 | 必要なメモリ | ツール呼び出し | 向いている用途 |
|---|---|---|---|---|
gemma4:31b |
約 20 GB | 24 GB 以上 | 可 | 品質重視。ツール利用と推論に強い |
gemma2:27b |
約 16 GB | 20 GB 以上 | 不可 | 会話向け。ツールは使えません |
gemma2:9b |
約 5 GB | 8 GB 以上 | 不可 | 軽快な会話と質疑応答。ツールは呼べません |
llama3.2:3b |
約 2 GB | 4 GB 以上 | 不可 | 軽い質問に手早く答えるだけの用途 |
選んだモデルを取得します。
ollama pull gemma4:31bモデルが動くことを確認します。
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemma4:31b",
"messages": [{"role": "user", "content": "Say hello"}],
"max_tokens": 50
}'モデルの返答が入った JSON が返ってくるはずです。
ステップ 3: Hermes を設定する
Hermes のセットアップウィザードを実行します。
hermes setupプロバイダーを聞かれたら Custom Endpoint を選び、次のように入力します。
- Base URL:
http://localhost:11434/v1 - API Key: 空のままにするか
no-keyと入力します(Ollama には不要です) - Model:
gemma4:31b(または取得したモデル)
~/.hermes/config.yaml を直接書いてもかまいません。
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"ステップ 4: Hermes を使ってみる
hermesこれで完了です。完全にローカルで動くエージェントができました。さっそく試してみましょう。
You: List all Python files in this directory and count the lines of code in each
You: Read the README.md and summarize what this project does
You: Create a Python script that fetches the weather for Ho Chi Minh CityHermes はターミナルのツールとファイル操作、そして手元のモデルを使って応えます。クラウドへの通信は発生しません。
ステップ 5: 用途に合ったモデルを選ぶ
どんな作業にもいちばん大きなモデルが要るわけではありません。実用的な目安を挙げます。
| 作業 | 推奨モデル | 理由 |
|---|---|---|
| ファイル編集、コード、ターミナルのコマンド | gemma4:31b |
ツール呼び出しが安定して動く唯一のモデル |
| 手早い質疑応答(ツール不要) | gemma2:9b |
会話向けの用途で応答が速い |
| 軽い会話 | llama3.2:3b |
いちばん速いものの、できることはかなり限られます |
セッションの途中でモデルを切り替えるには次のようにします。
/model gemma2:9bステップ 6: 速度を詰める
Ollama のコンテキスト長を広げる
Ollama の既定のコンテキストは 2048 トークンです。ツールを使うエージェントの作業には、Hermes は最低でも 64,000 トークンを必要とします。
# Create a Modelfile that extends context
cat > /tmp/Modelfile << 'EOF'
FROM gemma4:31b
PARAMETER num_ctx 64000
EOF
ollama create gemma4-64k -f /tmp/Modelfileそのうえで、Hermes の設定のモデル名を gemma4-64k に変更します。
モデルを読み込んだままにする
Ollama は既定で、5 分間使われなかったモデルをメモリから解放します。常駐させるゲートウェイのボットでは、読み込んだままにしておきましょう。
# Set keep-alive to 24 hours
curl http://localhost:11434/api/generate \
-d '{"model": "gemma4:31b", "keep_alive": "24h"}'Ollama の環境変数で全体に効かせることもできます。
# /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_KEEP_ALIVE=24h"GPU に処理を振る(使える場合)
NVIDIA の GPU があれば、Ollama は自動でレイヤーを GPU に振り分けます。確認はこちらです。
ollama ps # Shows which model is loaded and how many GPU layers12 GB の GPU で 31B のモデルを動かすと部分的な振り分けになりますが(GPU に約 40 レイヤー、残りは CPU)、それでも十分な速度向上が得られます。
ステップ 7: ゲートウェイのボットとして動かす(任意)
コマンドラインで Hermes がローカルに動くようになったら、Telegram や Discord のボットとして公開できます。処理はすべて自分のハードウェアの中で完結したままです。
Telegram
- @BotFather でボットを作り、トークンを受け取ります
~/.hermes/config.yamlに次を追加します
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"
platforms:
telegram:
enabled: true
token: "YOUR_TELEGRAM_BOT_TOKEN"- ゲートウェイを起動します
hermes gatewayこれで Telegram からボットに話しかけると、手元のモデルが応答します。
Discord
- discord.com/developers で Discord アプリケーションを作ります
- 設定に次を追加します
platforms:
discord:
enabled: true
token: "YOUR_DISCORD_BOT_TOKEN"- 起動します:
hermes gateway
ステップ 8: フォールバックを用意する(任意)
ローカルのモデルは、込み入った作業では力不足になることがあります。ローカルのモデルが失敗したときだけ動くクラウドのフォールバックを設定しておきましょう。
model:
default: "gemma4:31b"
provider: "custom"
base_url: "http://localhost:11434/v1"
fallback_providers:
- provider: openrouter
model: anthropic/claude-sonnet-4こうしておけば利用の 9 割は無料(ローカル)で済み、難しい作業のときだけ有料の API を使うことになります。
困ったときは
起動時に「Connection refused」と出る
Ollama が動いていません。起動してください。
sudo systemctl start ollama
# or
ollama serve応答が遅い
- モデルの大きさとメモリを見比べる: モデルが搭載メモリより多くを必要とすると、ディスクへのスワップが発生します。小さいモデルにするか、メモリを増設してください。
ollama psを確認する: GPU に振り分けられたレイヤーがなければ、処理は CPU 頼みです。CPU だけのサーバーではこれが普通の状態です。- コンテキストを減らす: 会話が長くなるほど推論は遅くなります。こまめに
/compressを使うか、設定で圧縮のしきい値を下げてください。
最初の応答が遅い(プリフィル)
Hermes は API 呼び出しのたびに、会話の内容の前に決まった中身を送ります。システムプロンプトと、有効になっているすべてのツールのスキーマです。CPU だけ、あるいは VRAM の少ない構成では、この入力の処理(*プリフィル* の段階)が最初のターンの大半を占めます。モデルがプロンプトを読み込んでいる数分間は何も出力されず、そのあと通常の速度で生成が始まります。これは想定どおりの挙動で、固まっているわけではありません。Mac でローカル LLM を動かす手順 にも同じ現象の説明があり(大きなコンテキストのプリフィル中、ローカルのモデルは数分間まったく出力しないことがあります)、Hermes はローカルのエンドポイントに対してストリームの読み取りタイムアウトを 120 秒から 1800 秒へ自動で引き上げます(HERMES_STREAM_READ_TIMEOUT)。
効果があるのは次の対処です。
- モデルを読み込んだままにする — Ollama は 5 分間使われなかったモデルを解放するため、次のプリフィルの前に読み込み直しが丸ごと入ります。
OLLAMA_KEEP_ALIVE=24hを設定してください(ステップ 6 を参照)。 - API のタイムアウトを延ばす —
~/.hermes/.envにHERMES_API_TIMEOUT=1800を設定します(必要なもの を参照)。 - 決まった中身を測って削る —
hermes prompt-sizeを実行するとシステムプロンプトとツールのスキーマの内訳がバイト単位で分かります。そのうえでhermes toolsで使っていないツールセットを無効にし、hermes skillsで不要なスキルを削除してください。 - GPU に処理を振る — 部分的な振り分けでも十分な速度向上が得られます(ステップ 6 を参照)。
モデルがツール呼び出しどおりに動かない
ツール呼び出しに対応していないモデルは、構造化された関数呼び出しではなく、ただのテキストを返します。対処は次のとおりです。
- ツール呼び出しに対応したモデルを使う — 上に挙げたモデルの中では、安定してツールを呼べるのは
gemma4:31bだけです。 - Hermes には自動修復があります — 形式の崩れたツール呼び出しを検出し、自動で直そうとします。
- フォールバックを設定する — ローカルのモデルが 3 回失敗すると、Hermes はクラウドのプロバイダーへ切り替えます。
ツールを実際に実行せず、返答の中に {"name": "web_search", ...} のような生の JSON が出てくる場合、原因はたいていモデルではなく*サーバー*側です。ツール呼び出しが有効になっていないか、ツール呼び出しの形式が解釈されていません。ツール呼び出しが実行されずテキストとして出てくる にある、サーバーごとの対処表を確認してください(llama.cpp には --jinja、vLLM には --enable-auto-tool-choice --tool-call-parser hermes が必要、といった具合です)。
コンテキスト長のエラーが出る
Ollama の既定のコンテキスト(2048 トークン)は、エージェントの作業には小さすぎます。広げ方は ステップ 6 を参照してください。
費用の比較
一般的なコーディングのセッション(入力 10 万トークン、出力 2 万トークン程度)を基準に、ローカルで動かすとクラウドの API に比べてどれだけ節約できるかを示します。
| プロバイダー | 1 セッションあたり | 月額(毎日使った場合) |
|---|---|---|
| Anthropic Claude Sonnet | 約 0.80 ドル | 約 24 ドル |
| OpenRouter(GPT-4o) | 約 0.60 ドル | 約 18 ドル |
| Ollama(ローカル) | 0.00 ドル | 0.00 ドル |
かかるのは電気代だけで、ハードウェアにもよりますが 1 セッションあたり 0.01〜0.05 ドル程度です。
ローカルでもうまくいくこと
- ファイル編集とコード生成 — 9B 以上のモデルなら十分にこなせます
- ターミナルのコマンド — Hermes がコマンドを組み立てて実行し、出力を読むので、モデルによらず動きます
- ウェブの閲覧 — 取得はブラウザのツールが行い、モデルは結果を読み解くだけです
- cron や定期実行 — クラウド構成とまったく同じように動きます
- 複数プラットフォームのゲートウェイ — Telegram、Discord、Slack のいずれもローカルのモデルで動きます
クラウドのモデルのほうが得意なこと
- かなり込み入った多段の推論 — 70B 以上のモデルや、Claude Opus のようなクラウドのモデルのほうが目に見えて優れています
- 長いコンテキスト — クラウドのモデルは 10 万〜100 万トークンに対応しますが、ローカルの実行環境は設定しないかぎり Hermes が求める最低 64K を下回る既定値のことがよくあります
- 長い応答の生成速度 — 長文の生成では、CPU だけのローカル環境よりクラウドでの推論のほうが速くなります
いちばん割のいい使い方は、日常の作業はローカルで済ませ、難しいものだけクラウドのフォールバックに任せることです。