0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【生成AIアプリ100チャレンジ】(10)ChatGPT同士で議論させる。異論反論アプリ

Last updated at Posted at 2024-04-02

公開サイト

開発環境

Server lightSail
Language Python3.11
Framework Django
DB sqlite3

ローカル環境ではPythonのvenvを使用。エディタはvs codeです。

目的

ChatGPT同士で会話させたいってふと思ったことはあるはず。いまはブラウザのChatGPTでもメンションをつけさせて会話させることはできるが、アプリ上でそれをさせてみたくて実装。
ユーザー側が議題を出し、それを人工知能Aが主張。人工知能Bが反論、人工知能Cがまとめて、ユーザーに返す。という仕組み。なかなか奥深い討論をするので、面白い。
ただ、トークンをたくさん消費するのであまりやらないほうがいいかもしれない。MAX_TOKENの設定をしているのだが超えている気がする。

コード

qiita.rb
    def topic(request):

    OPENAI_API_KEY = os.environ['OPENAI_API_IMAGE_KEY']
    prompt = request.POST.get('message')
    interactions = []

    def discussion(OPENAI_API_KEY, prompt, message):
        client = OpenAI(
            api_key = OPENAI_API_KEY,
        )
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[
                {
                    "role": "system",
                    "content": message
                },
                {
                    "role": "user",
                    "content": prompt
                },
            ],
            temperature=0.3,
            max_tokens=512
        )
        response = response.choices[0].message.content
        response = response.replace("\n", "<br>")
        return response

    message = """日本語で応答してください。あなたは議論に対して、肯定的な意見を主張する役割です。500文字前後で主張してください"""
    casper_response = discussion(OPENAI_API_KEY, prompt, message)
    interactions.append({'input': "議論の課題は" + prompt + "です。", 'response': casper_response})

    message =  """日本語で応答してください。あなたは意見に対して、反論意見を主張する役割です。500文字前後で主張してください"""
    balthazar_response = discussion(OPENAI_API_KEY, casper_response, message)
    interactions.append({'input': casper_response, 'response':  balthazar_response})

    message = """日本語で応答してください。あなたは意見に対して、意見まとめる役割です。500文字前後で、まとめた意見を主張してください"""
    melchior_response = discussion(OPENAI_API_KEY, balthazar_response, message)
    interactions.append({'input': balthazar_response, 'response': melchior_response})

    return JsonResponse({'message': interactions})

アプリ画面

スクリーンショット 2024-04-02 10.53.24.png

感想

思った通りの動きにはなったが、討論している者同士が別人格ではなく、独り言っぽくなっているようにも見える。
APIキーを分けるか、別のモデルに問いかけるか、した方がよかったかもしれない。
分ごとのトークン超過をすぐにしてしまうので、細かい調整まではできなかった。まだまだ改善の余地は残っているが、やろうとした目的は達成できたので、今日はこれでよしとする。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?