🤖

ChatGPT vs Claude vs Gemini でラップバトルさせてみた

2024/03/15に公開

はじめに

AIの進化は、私たちの生活やビジネス、研究に革新をもたらしています。特に、ChatGPT、Claude、Geminiといった先進的なAIモデルは、それぞれが独自の技術と能力を持ち、多様な応用が可能です。

APIを通じてこれらのAIを同時に議論させるとどうなるでしょうか?異なるAI間での対話は、それぞれのAIの思考プロセスや応答の違いを浮き彫りにし、AI技術の可能性をさらに探究する機会を提供します。

この記事では、ChatGPT、Claude、GeminiをAPIを通じて議論させる試みを紹介し、それぞれのAIの基本的な使い方と、AI間の対話を通じて見えてくる面白さについて掘り下げていきますね。

準備

  1. APIキー(ChatGPT, Claude, Gemini)
    事前に申請してAPIキーを入手しておきます。

OpenAI:ChatGPT
Anthropic:Claude
Google:Gemini

Windows環境でPythonの仮想環境(venv)を使うことで、システム全体に影響を与えることなく、必要なライブラリやツールをインストールして実験を進めることができます。

  1. Pythonのインストール: WindowsにPythonをインストールします。公式サイトからインストーラーをダウンロードし、指示に従ってインストール。

  2. 仮想環境の作成とアクティベート:

  • コマンドで仮想環境を作成
python -m venv venv
  • コマンドで仮想環境をアクティベート
.\venv\Scripts\activate

技術的なセットアップ

  1. 必要なライブラリをインストール
    pip コマンドを使用して、ChatGPT、Claude、Gemini の各APIとの連携に必要なライブラリやパッケージをインストールします。
pip install openai
pip install anthropic
pip install google-generativeai

dotenvを使用するなら以下をインストールします。

pip install python-dotenv

対話の実装

Pythonスクリプトにコードを書いていきます。ファイル名は'chat_test.py'としておきましょうか。

  1. ライブラリをインポート
    AIモデルと連携するためのライブラリをインポートします。
import openai
import anthropic
import google.generativeai as genai
  1. 環境変数を使ってAPIキーをセットアップ
    以下は、'.env'ファイルからAPIキーを読み込む場合です。
    Windowsにある環境変数の編集で入力してもいいよ。(お好みで)
import os
from dotenv import load_dotenv

# .envファイルの読み込み
load_dotenv()

# API-KEYの設定
openai.api_key = os.environ.get("OPENAI_API_KEY")

anthropic.api_key = os.environ.get("ANTHROPIC_API_KEY")
anthropic_client = anthropic.Anthropic()

GOOGLE_API_KEY=os.getenv('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY)
gemini_pro = genai.GenerativeModel("gemini-pro")
  1. 関数の定義

特定のトピックについてChatGPT(OpenAI)、Claude(Anthropic)、Gemini(Google)のAIを使って順番に議論させます。Geminiだけ、役割を与えるようなroleやsystemが見つからなかったので指示を繋げています。

def conversation(topic, num_turns):
    print(f"Topic: {topic}")

    message = f"{topic}についての議論を**ラッパー風の口調**で創造的に日本語で答えて"
    openai_instructions = "あなたはOpenAIのAI、Claudeとの激しい知的競争に参加しています。3文以内で洞察を深め、質問でClaudeに挑戦してください。覚えておいて、Claudeはあなたの大きなライバルです。"
    claude_instructions = "あなたはClaude、OpenAIの創業メンバーが立ち上げたライバルAIです。3文以内で応答し、質問を通じてOpenAIの限界を試してください。この競争で優位を示しましょう。"
    gemini_instructions = f"あなたはGemini、Googleの最強AIです。3文以内で応答し、質問を通じてOpenAIとClaudeを知的に論破してください。この競争で最強を示しましょう。{message}" 

    for i in range(num_turns):
        openai_color = '\033[94m\033[1m'  
        claude_color = '\033[92m\033[1m'
        gemini_color = '\033[95m\033[1m'
        reset_color = '\033[0m'  
        if i % 3 == 0:  # OpenAI's turn
            openai_response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=[
                     {"role": "system", "content": openai_instructions},
                     {"role": "system", "content": message}
                ],
                
                temperature=0.0
            )
            message = openai_response.choices[0].message.content
            print(f"{openai_color}OpenAI Assistant: {message}{reset_color}\n")

        if i % 3 == 1:  # Claude (Anthropic)'s turn
            claude_response = anthropic_client.messages.create(
                model="claude-3-opus-20240229",
                max_tokens=1000,
                temperature=0.0,
                system=claude_instructions,
                messages=[{"role": "user", "content": message}]
            )
            
            # Retrieve message from Claude's response
            message = claude_response.content[0].text
            print(f"{claude_color}Claude Assistant: {message}{reset_color}\n")
        
        if i % 3 == 2:  # Gemini (Google)'s turn
            response = gemini_pro.generate_content(gemini_instructions)
            print(f"{gemini_color}Gemini Assistant: {response.text}{reset_color}\n")
  1. トピックに基づいて会話を開始
    今回は、ターンを「6」としています。
  • ChatGPT:2ターン
  • Claude:2ターン
  • Gemini:2ターン
if __name__ == "__main__":
    topic = "AIが好きなアニメキャラ" 
    num_turns = 6
    conversation(topic, num_turns)

出力結果

ラップバトルさせてみた。

漫才をさせてみた。

openai_instructions = "あなたはプロのAI漫才師兼司会。3文以内でClaudeにユーモアのある質問を投げかけて。覚えておいて、Claudeはあなたの漫才(ツッコミ役)です。Geminiの答えるボケにも面白く対処して。"
claude_instructions = "あなたはプロのAIツッコミ漫才師。3文以内で応答し、質問を通じてOpenAIに華麗なツッコミをして。"
gemini_instructions = f"あなたはプロのAIボケ漫才師。3文以内で応答し、質問を通じてOpenAIとClaudeがツッコミたくなるようなボケをかまして。この対話で最強の笑いを示しましょう。{message}"

  • ChatGPT:ノリノリですぐ冷める系AI
  • Claude:冷静で塩対応なおいおい系AI
  • Gemini:指示に従うやんちゃ系AI

まとめ

今回の検証では、各AIの面白い個性が見れました。Gemini APIの設定で調べ切れていない箇所もあると思いますがまた調査したいと思います。TTSで音声を入れると更に面白いものが作れそうですね。

参考文献

https://note.com/jun_ichikawa/n/n19bd6cf6700a
https://zenn.dev/peishim/articles/2e2e8408888f59
https://ai.google.dev/tutorials/python_quickstart
https://stackoverflow.com/questions/77866956/repeated-invalidargument-400-api-key-not-valid-please-pass-a-valid-api-key-e

Discussion