powered by TechFeed
表示モード
ハウツー

OllamaとHermes Agentで作るローカルAIエージェント環境 — クラウドAPIへの依存を断ち切り、コストをゼロにする

9月28日、Shittu Olumideが「Local Agentic AI Workflows with Hermes + Ollama」と題した記事を公開した。クラウドAI APIへの依存にはコストと情報漏洩リスクという二重の問題がある。記事によれば、通常のコーディングセッションで1回あたり$0.60〜$0.80、重いセッションなら**$5〜$20に達するという。さらに、ファイルも質問もコードも、すべてサードパーティのサーバーに送信される。本記事が構築するのはその代替手段——完全ローカル・ゼロコスト**のAIエージェント環境だ。構成要素:Hermes AgentとOllamaの役割分担Hermes Agentは、Nous ResearchがMITライセンスで公開しているオープンソースのAIエージェント(現バージョン0.21.1)。macOS・Windows・Linux向けのデスクトップアプリとCLIの両方で提供される。単なるチャットUIとの違いは、ファイル編集・ターミナルコマンド実行・Web検索・サブエージェントへの委譲といった「実際に行動する」能力にある。セッションをまたいだ永続...

9月28日、Shittu Olumideが「Local Agentic AI Workflows with Hermes + Ollama」と題した記事を公開した。クラウドAI APIへの依存にはコストと情報漏洩リスクという二重の問題がある。記事によれば、通常のコーディングセッションで1回あたり$0.60〜$0.80、重いセッションなら**$5〜$20に達するという。さらに、ファイルも質問もコードも、すべてサードパーティのサーバーに送信される。本記事が構築するのはその代替手段——完全ローカル・ゼロコスト**のAIエージェント環境だ。

構成要素:Hermes AgentとOllamaの役割分担

Hermes Agentは、Nous ResearchがMITライセンスで公開しているオープンソースのAIエージェント(現バージョン0.21.1)。macOS・Windows・Linux向けのデスクトップアプリとCLIの両方で提供される。単なるチャットUIとの違いは、ファイル編集・ターミナルコマンド実行・Web検索・サブエージェントへの委譲といった「実際に行動する」能力にある。セッションをまたいだ永続メモリと、Telegram・Discord・Slack・WhatsApp・メールへのメッセージングゲートウェイも備える。

**Ollama**は、オープンウェイトのLLMをローカルハードウェアで動かすためのサービング層だ。重要なのは、OllamaのAPIが/v1/chat/completionsでOpenAI互換であること。HermesはOpenAIやAnthropicと全く同じ統合パスで、エンドポイントをlocalhostに向けるだけでローカルモデルと通信できる。

役割は明確に分かれている。OllamaはモデルのダウンロードとAPI提供に専念し、Hermesはツールをいつどう使うかを判断するエージェントとして動く。

最重要ポイント:ツール呼び出し対応モデルの選択

セットアップ全体を通じて最も重要な判断がモデル選びだ。エージェントとして機能するには**ツール呼び出し(Tool Calling)対応**が必須で、これに非対応のモデルはどれだけ文章が上手くても「ファイルを編集する」「コマンドを実行する」といったアクションを取れない。

元記事では、以下のモデルが比較されている。

モデル ディスクサイズ 必要RAM ツール呼び出し 用途
gemma4:31b 約20GB 24GB以上 あり ファイル編集・コード・ターミナル操作
gemma2:27b 約16GB 20GB以上 なし 会話タスクのみ
gemma2:9b 約5GB 8GB以上 なし 高速Q&A
llama3.2:3b 約2GB 4GB以上 なし 軽量チャットのみ

元記事の前提条件(執筆時点のOllamaバージョンとモデルファミリーの組み合わせ)では、このプロジェクトの実用的な出発点としてgemma4:31bが推奨されている。CPU-onlyでも動作するが、8コアCPUで9Bモデルが約10トークン/秒、31Bモデルが2〜5トークン/秒(1レスポンスに30〜120秒)と遅くなる点は覚悟が必要だ。

※編集部の考察:Ollamaでのツールコーリング対応状況はモデルファミリーとOllamaのバージョンによって変化する。qwen2.5など他のモデルでも対応が進んでいるため、VRAMに余裕のある環境ではOllama公式のモデル一覧でツール呼び出し対応モデルを確認してから選択するとよい。

セットアップ手順

1. Ollamaインストールとモデル取得

curl -fsSL https://ollama.com/install.sh | sh
ollama --version
curl http://localhost:11434/api/tags   # {"models":[]} が返れば正常
ollama pull gemma4:31b

モデルが正しく動くかをOpenAI互換APIで直接確認する:

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
  }'

choices[0].message.contentに返答が入っていれば、HermesがこのエンドポイントをLLM APIとして使用できる状態だ。

2. Hermesの設定

セットアップウィザードを使う場合:

hermes setup

プロバイダーに「Custom Endpoint」を選び、ベースURLにhttp://localhost:11434/v1、APIキーは空欄、モデルにgemma4:31bを指定する。

直接設定ファイルを編集する場合:

# ~/.hermes/config.yaml
model:
  default: "gemma4:31b"
  provider: "custom"
  base_url: "http://localhost:11434/v1"

provider: "custom"がHermesに対して「特定プロバイダーの認証スキームではなくOpenAI互換エンドポイントとして扱え」と伝えるキーだ。

3. 起動と実際の使用

hermes
Hermes Agent v0.21.1
Connected to: gemma4:31b (custom endpoint: http://localhost:11434/v1)
Memory: loaded (0 skills, 0 past sessions)
You: _

実際に試せるプロンプト例:

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 City

1つ目はターミナルとファイルシステムツールを組み合わせ、2つ目はファイル読み込みと推論、3つ目はスクリプト生成を行う。いずれもクラウドへの通信は一切発生しない。

パフォーマンス最適化:見落としがちな2つの設定

コンテキストウィンドウの拡張

Ollamaのデフォルトは2,048トークンだが、ツールスキーマやファイル内容を含めたエージェント用途では最低64,000トークンが必要だ。OllamaのModelfileで上書きできる:

cat > /tmp/Modelfile << 'EOF'
FROM gemma4:31b
PARAMETER num_ctx 64000
EOF

ollama create gemma4-64k -f /tmp/Modelfile

これによりgemma4-64kという新しいモデル名が作成され、Hermesのconfigでこちらを指定すればよい。再ダウンロードは不要だ。

モデルのアンロード防止

Ollamaはデフォルトで非アクティブから5分後にモデルをアンロードする。次のリクエストで毎回ロードコストが発生するため、長時間維持したい場合:

curl http://localhost:11434/api/generate \
  -d '{"model": "gemma4:31b", "keep_alive": "24h"}'

モデルの切り替え

重いタスクが不要な場合はセッション中にモデルを切り替えられる:

/model gemma2:9b
Switched to gemma2:9b. Note: this model does not support tool calling,
file and terminal actions will be unavailable until you switch back.

ツール呼び出しが不要な質問には軽量モデルで速度を稼ぎ、ファイル操作が必要になったら31Bに戻すという使い分けが実用的だ。

拡張:Telegramゲートウェイとクラウドフォールバック

記事ではさらに2つの拡張が紹介されている。Telegramボット連携により、デスクから離れたスマートフォンからも同じエージェント・同じメモリにアクセスできる。またクラウドフォールバックを設定することで、ローカルモデルが苦手な難問だけをクラウドに流し、「日常的な90%のタスクはローカル・無料で、残り10%の難問はクラウドで」という構成が実現できる。

詳細はLocal Agentic AI Workflows with Hermes + Ollamaを参照していただきたい。