公開サイト
開発環境
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})
アプリ画面
感想
思った通りの動きにはなったが、討論している者同士が別人格ではなく、独り言っぽくなっているようにも見える。
APIキーを分けるか、別のモデルに問いかけるか、した方がよかったかもしれない。
分ごとのトークン超過をすぐにしてしまうので、細かい調整まではできなかった。まだまだ改善の余地は残っているが、やろうとした目的は達成できたので、今日はこれでよしとする。