経緯
ふとゲームを作ろうと思い立った。
AIによる自然な会話をゲームに組み込めるととても楽しいのではと思い、Microsoft Copilot と相談しながらやってみる。
前提条件
| バージョン情報 | |
|---|---|
| OS | Windows11 |
| CPU | Intel Core i7-13620H |
| GPU | RTX 4060 |
| VRAM | 8GB |
ツールの選定
用途:ゲームのキャラクターとの会話を作りたい
- Ollama (ローカルLLM)
- 完全無料
- APIキー不要
- オフラインだけで も 動く
モデルの選定
- Phi-3 mini
- サイズ:3.8B
- メモリ:4~6GB
- 質:小型モデルの中ではかなり自然 (Copilot 曰く)
- 結論だけ書くと、日本語のやりとりはちょっと微妙だった。。。
- 追記:モデルを比較した記事を追加しました
やってみる
1. Ollama をインストールする (Windows)
- 公式サイトへ https://ollama.com
- Download をクリック
- インストーラを実行
- インストール後、Ollama が自動で起動
この時点でアプリは利用可能
2. Phi-3 mini モデルをダウンロード
PowerShell
ollama pull phi3:mini
これでモデルがダウンロードできたので、ターミナル上で使ってみる
PowerShell
ollama run phi3:mini
>>> あなたは村人です。「こんにちは」に対する返事を考えてください。
こんにちは、私は村の一員です。こんばんは。どうしてもいらっしゃいませ!村全体が明日の楽しい時間を過ごせるよう、一つの
約束だけです。それは、皆様がこの素晴lideな村に愛されられる時間を今やりと告げるものです。
ゲーム上で使えるかはちょっと不安になってきた。。。
3. API サーバとして使う
Ollama はインストールした時点でローカル API サーバとして動いているようなので、さっそくアクセスしてみる。
PowerShell
curl.exe http://localhost:11434/api/generate -d '{
\"model\": \"phi3:mini\",
\"prompt\": \"こんにちは\"
}'
実行してみると、以下のような応答が返る。
{"model":"phi3:mini","created_at":"20XX-XX-XXT03:56:54.8444002Z","response":"こ","done":false}
{"model":"phi3:mini","created_at":"20XX-XX-XXT03:56:54.8895288Z","response":"の","done":false}
...
{"model":"phi3:mini","created_at":"20XX-XX-XXT03:56:55.7867162Z","response":"","done":true,"done_reason":"stop","context":[32010,29871,13,30589,30389,30353,30644,30449,32007,29871,13,32001,29871,13,30589,30199,31084,30858,30449,30325,30346,30968,30499,30481,30589,30389,30353,30644,30449,30482,30364,30298,30465,31359,30346,30210,30371,233,143,171,233,142,185,30499,30427,30267,234,176,151,30914,30449,30980,31115,30787,30465,30371,236,158,166,233,155,150,30898,30290,31305,30607,30290,30899,30566,30199,30723,30199,30364,30326,30466,30330,30651,30557,30199,30768,30453,30499,30427,30267,13,13,13,30481,30589,30389,30353,30644,30449,30482],"total_duration":1293348000,"load_duration":20530900,"prompt_eval_count":14,"prompt_eval_duration":325990900,"eval_count":81,"eval_duration":648998700}
あとはゲームエンジン上でリクエストを送って返事を受け取る機能を実装すれば、ゲーム上からいつでも呼び出せる。
感想
- Ollama はローカルでサクサク動くのでよさそう
- ただし、Phi3-mini の日本語の応答はあまり質がよくなかった。。。
今後やるかもしれないこと
- もっといいモデルを探す (以下の記事で実施済)
- ゲームエンジン側の実装 (以下の記事で実施済)