Python(オセロ02_生成AIでの対戦相手)
■生成AIで対戦相手を作る(その02)。
前回は、Google AI StudioのGemini-2.5-flashを使ってオセロの対戦相手を作ったが、上限が20回までで最後まで実施できなかった。
今回、他のモデルを使ったりして何とか1ゲームが実施できないかいろいろやってみた。
結論としてはまだ1ゲームを終わりまでできてない。要件を考えると、オセロの1ゲームを実施するため、30回以上のリクエストが連続でできる、成立する手を打てる、が必要。
まず、Google AI Studioの他のモデルから見た。
サイトで他のモデルを表示させるといろいろと出てくる。前に見たときはGemini 2 Flashなど以前のバージョンで20より多くの回数が実行できると思ったけど、今見ると上限は0となっていた。0/0以外は下のモデル(使っているGemini 2.5 Flashは22/20となっており上限を超えている)。

Geminiの古いバージョンとかでより試行回数が多いものがあればよかったけど、使えそうなものはない。Gemma 3 の14.4Kぐらいあれば十分。そのため、これが使えないか調べた。
Gemma 3 は、ダウンロードして自分のPC等で動かせる公開モデルで、上の1B、4B、12B、27BはBillionでいわゆる頭の良さを示すものらしい。今使っているgoogle-genaiのライブラリは、Gemini-x.xのモデルに対してしか使えないよう。他の手としては、Ollamaというアプリから簡単に使えるよう。PythonのライブラリにもOllama用のものがあった。
これはローカルで動かすので、上のGoogle AI Studioとは別の話になる。
Ollamaはどういうものかと思ったけど、ローカルで生成AIを使うアプリだった。Ollamaの実行画面が下。
生成AIで使う頭の部分もローカルにダウンロードする必要があるらしく、Gemma 3 4bでは3.1GB、1bでは800MBぐらい必要だった。

PythonのOllamaのライブラリを使って、下のようなコードを試した。
def gemini(board):
prompt = f"""
あなたはオセロプレイヤーです。下記の盤面を把握し、ルールに沿った手を打ってください。
現在のオセロの盤面状況は以下の通りです。あなたは「○」です。「●」が相手です。「-」が空白です。
{board[1:9, 1:9]}
以下のステップで考えてください:
1. 現在の盤面から、置ける場所をすべて考慮してください。行列の位置は0からでなく1から数えてください。
2. 回答は「[x,y]」(xは行、yが列)という形式のみとしてください。置く場所が無い場合は「None」としてください。他のコメント、解説は一切不要です。
"""
messages.append({"role": "user", "content": prompt})
response = ollama.chat(
model='gemma3:4b',
messages=messages,
)
model_reply = response['message']['content']
messages.append({"role": "assistant", "content": model_reply})
return model_reply
実行結果としては、Gemma 3: 4bで実行すると、[3, 4]のように指示した内容は返ってくるが初回の1手目ですらゲームが続けられる手は返ってこない。12bとかにすれば、もう少しいい手が返ってくるだろうけど、4bで3GBの容量を必要とする上、そこそこ時間もかかるので自分のPCでは性能的に厳しい。
Google AI Studioのようなクラウド上の機能を使うものでなければ、なかなかオセロのゲームを成立させることは難しいかもしれない。でも、その場合、試行回数の制限で1ゲームの達成ができない(少なくとも現在の無料枠の範囲では)。
もう少し試行回数が何とかならないか有料版を含めて検討したい。あとOllamaはGemma 3以外にも使えるモデルがあるので、これもみてみたい。

