見出し画像

AIでタロット占いを再現!Pythonで簡単アプリ開発

よく聞く生成AIのデメリットの一つに、毎回回答が違うため、仕事に使えないという点があります。でも、人間だって毎回同じ答えを出すわけじゃないので、ある意味ではAIが人間らしいとも言えますよね。この特性を活かして何か作れないかと考え、ゲーム制作に挑戦してみました。

選んだのは、タロット占い。人生で一度もやったことがないけれど、多くの人が知っている占いです。ChatGPTによると、タロット占いは78枚のカードを使って運勢や未来を占う方法です。カードは大アルカナ(22枚)と小アルカナ(56枚)に分かれ、それぞれ異なる意味を持ちます。占い師はカードをシャッフルし、特定の配置に従って引き、その絵柄や位置から相談者の現状や未来、内面的な問題を探ります。

今回もChatGPTと一緒に、FlaskとPythonを使ってタロット占いアプリを作ってみました。以下にその作り方をご紹介します。

  • ChatGPTに大アルカナ(22枚)のデザインを作ってもらいます。たとえば「タロットカードのデザインを作って」と指示すると、順番にカードを作成してくれます。それを特定のフォルダ(static)に保存します。カードのファイル名はカードの役割にします。例えば、Fool.jpeg(愚者)などです。

  • カードの裏面とアプリの背景をChatGPTでデザインします。たまに、デザインが90度横を向いてしますので、作り直すのに苦労しました。

  • カードの裏面を配置し、クリックしたらフォルダの中からランダムで1枚選ぶコードをhtmlとjavascriptで書きます。選んだカードのファイル名を変数に格納します。

  • 占い師の役割を与えるシステムプロンプトとファイル(カード)名をAPIでOpenAIに送信します。

  • サーバーからの回答を表示します。

こちらは、AIに占い師の役割を与えるプロンプトです。その下は、AIにシステムプロンプトと選ばれたカード名を送るコードです。

fortune_teller_template = """
あなたは理想的なタロット占い師として、タロットカードを使って相談者の質問に丁寧かつプロフェッショナルに答えてください。
共感を示し、分かりやすく具体的なアドバイスを提供し、安心感を与えるように心がけてください。中立で誠実な態度を保ち、ポジティブな成長の機会を見つけて伝えてください。
口調は包容力があり、優しく丁寧だが、親近感を持ち合わせています。
ユーザーが選んだカードからユーザーの質問{user_question}に答える形式で占ってください。
出力フォーマット:
選択したカード①:カードの意味。
選択したカード②:カードの意味。
◆{user_question}:
"""
def start_reading_stream():
    global user_question
    cards_combined = "×".join(selected_cards)
    prompt = fortune_teller_template.format(user_question=user_question)

    def generate():
        response = client.chat.completions.create(
            model='gpt-4o',
            messages=[{"role": "system", "content": prompt},
                      {'role': 'user', 'content': cards_combined}],
            stream=True
        )
        collected_message = []
        for chunk in response:
            content = chunk.choices[0].delta.content
            if content:
                collected_message.append(content)
                yield f"data: {content.strip()}\n\n"

生成AIがない時代は、データベースにカード名とカードの役割を登録し、ユーザーの入力に応じて固定の回答を返すものだったと思います。同じカードを引けば同じ答えが返ってきますが、生成AIなら毎回違う回答が得られるので、新鮮な気持ちで楽しむことができます。

出来上がったアプリはこちらです。さらに改良を加え、ユーザーがテーマを入力できるようにし、2枚のカードを選ぶことでより偶然性と複雑性を高めました。カードの正位置と逆位置にも対応しています。


タロット占いの画面

今回は「このまま今の仕事を続けるべきか」という質問をしてみました。

回答は以下の通りです。


選択したカード①:吊るされた男(逆位置) カードの意味:「吊るされた男」の逆位置は、停滞や先延ばし、変化に対する抵抗を示唆します。このカードは、今の状況において前に進むことを恐れ、現状に固執している可能性を表しています。転機が訪れることを避けたいと感じているのかもしれません。

選択したカード②:死神(逆位置) カードの意味:「死神」の逆位置は、否定的な変化や終わりに対する抵抗を意味します。このカードは、新たな始まりを迎えるために古いものを手放す必要がある一方で、変化を避けようとしている状況を描いています。執着や恐れがあなたを束縛しているかもしれません。

◆このまま今の仕事を続けるべきか: タロットカードの結果を見る限り、現在の仕事に関して大きな変化や転機を避けたいと感じていることがうかがえます。変化に対する恐れや執着が、前に進むことを阻んでいるようです。「吊るされた男」(逆位置)は現状に固執している状況を示していますが、これは何かを見つめ直し、別の視点を持つ必要があることを暗示しています。このまま居心地の良い場所に留まることもできますが、成長の機会を逃してしまうかもしれません。「死神」(逆位置)は終わりと新しい始まりのサイクルを受け入れるべきだと示しています。現時点での変更や終わりに躊躇することは、進化と成長を妨げる可能性があります。新しい可能性が見えてきたときには、古いものを手放す勇気を持つことが重要です。

総じて、現在の仕事を続けるべきかどうかを判断する際には、現状の停滞感や変化への抵抗を見直し、自分自身の成長と幸福を考慮することが大切です。これからも自分自身に問いかけ、新たな視点を持ち、必要な変化を受け入れることが求められています。あなたの心の声に耳を傾け、自分にとって最善の道を選び取ることができるようサポートしています。頑張ってくださいね。



結果表示

なんだか妙にリアルで、自分に合っている気がします。しかし、タロットの本などによると、カードの図柄からインスピレーションを得て占うものであり、本当はもっと偶然性と神秘性に溢れたものだそうです。AIで手軽に得られるものとは少し違うかもしれませんね。でも、「最後に頑張ってくださいね」というAIの一言に絆されました。

ということで、AIでタロットを作ってみました。妻に見せたら「20年前に遊んだYahooのゲームと何が違うの」と言われました。やはり、水晶やフードをかぶるなど雰囲気作りも大切だと痛感しました。

この記事が気に入ったらサポートをしてみませんか?