ホームページ >バックエンド開発 >Python チュートリアル >Python と OpenAI を使用してチェス ゲームを構築する
週末の自由時間があるときはいつでも、小さくて愚かなことをコーディングするのを楽しんでいます。そのようなアイデアの 1 つが、OpenAI と対戦できるコマンドライン チェス ゲームになりました。私はこれを、ギリシャ語でチェスを意味する「Skaki」からインスピレーションを得て、「SkakiBot」と名付けました。
優れた Python-chess ライブラリがすべてのチェスの仕組みを処理します。目標は、チェス エンジンをゼロから構築することではなく、OpenAI をこのようなプロジェクトにいかに簡単に統合できるかを実証することです。
コードを詳しく調べて、すべてがどのように結合されるかを見てみましょう!
まず、ユーザー入力を受け取り、チェスのロジックの基礎を準備する基本的なゲーム ループを設定します。
def main(): while True: user_input = input("Enter your next move: ").strip() if user_input.lower() == 'exit': print("Thanks for playing SkakiBot. Goodbye!") break if not user_input: print("Move cannot be empty. Please try again.") continue print(f"You entered: {user_input}")
この時点では、コードはあまり機能しません。ユーザーに入力を求め、検証して出力するだけです。
Enter your next move: e2e4 You entered: e2e4 Enter your next move: exit Thanks for playing SkakiBot. Goodbye!
次に、ボード管理、手の検証、ゲーム終了のシナリオを処理する Python-chess を導入します。
pip install chess
ライブラリがインストールされているので、チェス盤を初期化し、ユーザー入力を求める前に印刷できます。
import chess def main(): board = chess.Board() while not board.is_game_over(): print(board) user_input = input("Enter your next move (e.g., e2e4): ").strip() if user_input.lower() == 'exit': print("Thanks for playing SkakiBot. Goodbye!") break
ゲームを機能させるには、ユーザー入力を検証し、正当な手をボードに適用する必要があります。 UCI (ユニバーサル チェス インターフェイス) 形式が動きに使用され、開始マスと終了マスを指定します (e2e4 など)。
def main(): board = chess.Board() while not board.is_game_over(): # ... try: move = chess.Move.from_uci(user_input) if move in board.legal_moves: board.push(move) print(f"Move '{user_input}' played.") else: print("Invalid move. Please enter a valid move.") except ValueError: print("Invalid move format. Use UCI format like 'e2e4'.")
チェックメイトやステイルメイトなどのゲーム終了シナリオを処理できるようになりました:
def main(): board = chess.Board() while not board.is_game_over(): # ... if board.is_checkmate(): print("Checkmate! The game is over.") elif board.is_stalemate(): print("Stalemate! The game is a draw.") elif board.is_insufficient_material(): print("Draw due to insufficient material.") elif board.is_seventyfive_moves(): print("Draw due to the seventy-five-move rule.") else: print("Game ended.")
この段階では、両方の側でプレーします。 UCI 形式で次の動きを使って Fool's Mate を試してみることでテストできます:
これにより、迅速なチェックメイトが行われます。
今度は AI に一方の側を引き継がせる時が来ました。 OpenAI はボードの状態を評価し、最善の手を提案します。
まず、環境から OpenAI API キーを取得します。
# config.py import os def get_openai_key() -> str: key = os.getenv("OPENAI_API_KEY") if not key: raise EnvironmentError("OpenAI API key is not set. Please set 'OPENAI_API_KEY' in the environment.") return key
次に、ボードの状態を Forsyth-Edwards Notation (FEN) 形式で OpenAI に送信し、提案された手を取得する関数を作成します。
def get_openai_move(board): import openai openai.api_key = get_openai_key() board_fen = board.fen() response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": ( "You are an expert chess player and assistant. Your task is to " "analyse chess positions and suggest the best move in UCI format." )}, {"role": "user", "content": ( "The current chess board is given in FEN notation:\n" f"{board_fen}\n\n" "Analyse the position and suggest the best possible move. Respond " "with a single UCI move, such as 'e2e4'. Do not provide any explanations." )} ]) suggested_move = response.choices[0].message.content.strip() return suggested_move
プロンプトは単純ですが、有効な動きを生成するのに効果的です。これは、OpenAI が理事会の状態を理解し、UCI 形式で法的な措置に対応するのに十分なコンテキストを提供します。
ボードの状態は FEN 形式で送信され、駒の位置、誰の順番、キャスリング権、その他の詳細を含むゲームの完全なスナップショットが得られます。 OpenAI の API はステートレスであり、リクエスト間で情報を保持しないため、これは理想的です。そのため、各リクエストには必要なコンテキストをすべて含める必要があります。
今のところ、簡単にするためにモデルは gpt-3.5-turbo としてハードコーディングされていますが、API キーの場合と同様に、環境から取得する方がよいでしょう。これにより、後で更新したり、別のモデルでテストしたりすることが容易になります。
最後に、AI をメインのゲーム ループに統合できます。 AI はユーザーが移動するたびにボードを評価し、その応答を再生します。
def main(): while True: user_input = input("Enter your next move: ").strip() if user_input.lower() == 'exit': print("Thanks for playing SkakiBot. Goodbye!") break if not user_input: print("Move cannot be empty. Please try again.") continue print(f"You entered: {user_input}")
それだけです!これで、OpenAI と対戦できる機能的なチェス ゲームが完成しました。コードには改善の余地がたくさんありますが、すでにプレイ可能です。次の楽しいステップは、2 つの AI を互いに戦わせ、戦わせることです。
コードは GitHub で入手できます。楽しんで実験してください!
以上がPython と OpenAI を使用してチェス ゲームを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。