GoogleのオープンモデルGemmaをOllamaのAPIを使って試してみた!
2026/03/21
生成AIを少しずつ試している中で、ちょっとしたことだったらローカルLLMで事足りたりしないかな?と気になったので、とりあえず触ってみることにしました。
今回のAI情報
ローカルLLMフレームワーク
はてブで見かけたことがあったというくらいの知識量でOllamaを選んでみました。
Ollama (https://ollama.com/)
$ ollama -v
ollama version is 0.15.4
言語モデル
Ollamaで簡単に導入できるのと、普段はGeminiと話すことが多いからGoogleのオープンモデルであるGemmaにしてみました。
Gemma (https://ai.google.dev/gemma/docs?hl=ja )
Gemma3:4b
OllamaのAPIを実行してみた!
OllmaはパッケージをダウンロードしてMacへ導入したため、言語モデルの gemma:4b をダウンロードするだけで、すぐに使い始められました。
ドキュメントを調べてみたら、 localhost に 11434 ポートを指定するとアクセスできることがわかりました。
OllamaのローカルAPIのエンドポイント
今回はプロンプトを送信して結果を受け取るために generate エンドポイントを使っていきます。
エンドポイント
http://localhost:11434/api/generate
OllamaのローカルAPIを実行
model パラメータに gemma:4b を設定し、 prompt は 君の名は。 にしました。
言語モデルは自分のことを認知しているのか?と素朴な疑問から、このプロンプトにしたのですが…
よくよく考える映画について返ってくる可能性もありました。
APIの実行結果
curl コマンドを使ってAPIを実行。
読みづらいですが言語モデルの説明が返ってきました。
% curl -X POST http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{"model": "gemma3:4b", "prompt": "君の名は。"}'
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.619052Z","response":"私は","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.650579Z","response":"、","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.683047Z","response":"Google","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.716373Z","response":" によって","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.745221Z","response":"トレーニング","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.774747Z","response":"された","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.803791Z","response":"、","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.832837Z","response":"大規模","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.862004Z","response":"言語","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.890982Z","response":"モデル","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.919677Z","response":"です","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.948585Z","response":"。","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:50.977007Z","response":"\n\n","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.005647Z","response":"より","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.034495Z","response":"簡単に","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.063793Z","response":"言う","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.092716Z","response":"と","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.121969Z","response":"、","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.150564Z","response":"私は","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.178712Z","response":"Google","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.207443Z","response":"が","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.236034Z","response":"開発","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.26497Z","response":"した","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.29341Z","response":"AI","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.322245Z","response":"です","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.351216Z","response":"。","done":false}
{"model":"gemma3:4b","created_at":"2026-03-20T08:48:51.379675Z","response":"","done":true,"done_reason":"stop","context":[105,2364,107,239612,149554,237048,236924,106,107,105,4368,107,52119,236951,19540,183064,168684,17011,236951,200498,151816,35128,3652,236924,108,16168,93920,94049,237032,236951,52119,19540,237053,46213,3547,12553,3652,236924],"total_duration":3980508000,"load_duration":2635020625,"prompt_eval_count":13,"prompt_eval_duration":549545750,"eval_count":27,"eval_duration":752999291}
1行ずつバァーッとレスポンスが返ってきて、思っていたのと違う!となりました。
調べたところによると、 stream パラメータのデフォルトが True になっているため、ストリーム形式として応答が生成されるたび、少しずレスポンスが返ってきたということのようです。
ストリーム形式ではない場合、どういうレスポンスになるのか気になったので stream を False にして再実行!
stream パラメータを False に指定してAPIを実行
応答テキストが response パラメータに集約されて返ってきました。
% curl -X POST http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d '{"model": "gemma3:4b", "prompt": "君の名は。", "stream": false}'
{"model":"gemma3:4b","created_at":"2026-03-20T08:50:29.898458Z","response":"私は、Google によってトレーニングされた、大規模言語モデルです。\n","done":true,"done_reason":"stop","context":[105,2364,107,239612,149554,237048,236924,106,107,105,4368,107,52119,236951,19540,183064,168684,17011,236951,200498,151816,35128,3652,236924,107],"total_duration":1015188208,"load_duration":182400208,"prompt_eval_count":13,"prompt_eval_duration":458148750,"eval_count":14,"eval_duration":365639542}
ストリーム形式の時よりも応答が短いですが、内容は同じく言語モデルの説明でした。
まとめ
OllamaのローカルAPIを実行し、プロンプトに対して意図通りの応答が確認できました。
試した「君の名は。」のように簡単なプロンプトでも、意図通りにいくとなんだか期待しちゃいますね!
ちょっとしたことが実は具体的には浮かんでいないので、ちょっとしたことのわかりやすいユースケースを見つけて行きたいです。
あと、もう少し触ってみようと思ったときにシステムプロンプトって設定できる?と気になったので、調べてまた試してまとめたいと思います。