ChatGPT APIで二十の質問ゲームをやってみよう~

ゲームシナリオ

  1. プレイヤーは、答えられるキーワードがあるオブジェクトを思い浮かべます。
  2. ChatGPT APIを使用して、プレイヤーが思い浮かべたオブジェクトに関するヒントを20回取得します。
  3. プレイヤーは、各ヒントに基づいて回答を考え、答えを入力します。
  4. ゲームが終了するまで、プレイヤーは答えを入力し続けます。
  5. プレイヤーが正解するか、20回目のヒントを取得するとゲームが終了します。

コード作成

OpenAI APIキーを取得して、必要なライブラリをインストールします。

import openai_secret_manager

assert "openai" in openai_secret_manager.get_services()
secrets = openai_secret_manager.get_secret("openai")

# インストールされていることを確認
!pip install openai

次に、OpenAI APIキーを使用してAPIクライアントを設定します。

import openai
openai.api_key = secrets["api_key"]

次に、ChatGPT APIを使用してヒントを取得する関数を作成します。

def generate_hint(prompt):
    model_engine = "text-davinci-002"
    response = openai.Completion.create(
        engine=model_engine,
        prompt=prompt,
        max_tokens=50,
        n=1,
        stop=None,
        temperature=0.7,
    )

    hint = response.choices[0].text.strip()
    return hint

この関数では、指定されたプロンプトを使用して、モデルから返された最初のヒントを返します。

次に、メインのゲーム関数を作成します。

def twenty_questions_game():
    # ゲームの開始
    print("20 Questions Game")
    print("-----------------\n")

    # ゲーム用オブジェクトの設定
    object_name = input("思い浮かべたオブジェクトの名前は何ですか?\n")
    print(f"\n{object_name} に関する20の質問に答えてください。")

    # ヒントの取得と回答の評価
    for i in range(1, 21):
        prompt = f"Q{i}. {generate_prompt(object_name)}"
        hint = generate_hint(prompt)

        print(f"\nヒント {i}: {hint}")
        answer = input("答えは何ですか?\n")

        if answer.lower() == object_name.lower():
            print("正解!おめでとうございます。")
            return

    # 20回目のヒントを表示する前にゲームを終
    print("\n20回目のヒントを取得しました。最後の回答を入力してください。")
    answer = input("答えは何ですか?\n")

    if answer.lower() == object_name.lower():
        print("正解!おめでとうございます。")
    else:
        print(f"残念!答えは {object_name} でした。")