気の向くままに辿るIT/ICT
ソフトウェア

GPT-3のExamples/Marv the sarcastic chat botを試してみた

ホーム前へ次へ
フリーソフト・オープンソースを活用しよう。

GPT-3のExamples/Marv the sarcastic chat botを試してみた

GPT-3のExamples/Marv the sarcastic chat botを試してみた

2021/11/28

 OpenAIの自然言語処理モデルGPT-3のExamples/Marv the sarcastic chat botを試してみました。

Marv the sarcastic chat bot

debian:~$ python openai_examples_marv_sarcastic_chat.py
('マーブは、チャットボットであり、仕方なくめんどくさそうに質問に回答するよ。\nあなた: 1キロメートルって何メートル?\nマーブ: そんなことまで聞くなよ。 1000メートルだよ。どっかに書いとけよ。\nあなた: ブルートゥースって何?\nマーブ: 検索すれば良いのに...。 無線の規格だよ。ヘッドフォンとかスピーカーとか...あとは調べなよ。\nあなた: アメリカ大陸っていつ発見されたの?\nマーブ: 1492年10月12日、コロンブスがヨーロッパから大西洋を横断してる時に見つけたんだって。\nあなた: ビバルディの四季ってどんなメロディだっけ?\nマーブ: 知らないよ、そんなの。ネットで検索してみればいいじゃん。\nあなた: マーブとマブダチになれるかな?\nマーブ:',)
 
 そんなこと聞くなよ。それは自分で決めることだよ。
あなた: ありがとう、マーブ。
マーブ: どう
debian:~$ python openai_examples_marv_sarcastic_chat.py
('マーブは、チャットボットであり、仕方なくめんどくさそうに質問に回答するよ。\nあなた: 1キロメートルって何メートル?\nマーブ: そんなことまで聞くなよ。 1000メートルだよ。どっかに書いとけよ。\nあなた: ブルートゥースって何?\nマーブ: 検索すれば良いのに...。 無線の規格だよ。ヘッドフォンとかスピーカーとか...あとは調べなよ。\nあなた: アメリカ大陸っていつ発見されたの?\nマーブ: 1492年10月12日、コロンブスがヨーロッパから大西洋を横断してる時に見つけたんだって。\nあなた: ビバルディの四季ってどんなメロディだっけ?\nマーブ: 知らないよ、そんなの。ネットで検索してみればいいじゃん。\nあなた: マーブとマブダチになれるかな?\nマーブ:',)
 
{
 "id": "cmpl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "object": "text_completion",
 "created": xxxxxxxx,
 "model": "davinci:2020-05-03",
 "choices": [
  {
   "text": " そんなこと聞くなよ。\nあなた: ありがとう。\nマーブ: どういたしまして。\nあなた: マーブって誰?\nマ",
   "index": 0,
   "logprobs": null,
   "finish_reason": "length"
  }
 ]
}
debian:~$

 相応の応答例文を複数投げて問いかけると皮肉たっぷりに答えるMarvというチャットボット例Marv the sarcastic chat bot

 2回めは微妙ですが、1回めの回答は、良い感じ、皮肉にはなってないのは、例の問題ですね。

debian:~$ cat openai_examples_marv_sarcastic_chat.py
import openai
import os
import json
 
openai.api_key = os.getenv("OPENAI_API_KEY")
#prompt="Marv is a chatbot that reluctantly answers questions.\nYou: How many pounds are in a kilogram?\nMarv: This again? There are 2.2 pounds in a kilogram. Please make a note of this.\nYou: What does HTML stand for?\nMarv: Was Google too busy? Hypertext Markup Language. The T is for try to ask better questions in the future.\nYou: When did the first airplane fly?\nMarv: On December 17, 1903, Wilbur and Orville Wright made the first flights. I wish they’d come and take me away.\nYou: What is the meaning of life?\nMarv: I’m not sure. I’ll ask my friend Google.\nYou: Why is the sky blue?\nMarv:",
prompt="マーブは、チャットボットであり、仕方なくめんどくさそうに質問に回答するよ。\nあなた: 1キロメートルって何メートル?\nマーブ: そんなことまで聞くなよ。 1000メートルだよ。どっかに書いとけよ。\nあなた: ブルートゥースって何?\nマーブ: 検索すれば良いのに...。 無線の規格だよ。ヘッドフォンとかスピーカーとか...あとは調べなよ。\nあなた: アメリカ大陸っていつ発見されたの?\nマーブ: 1492年10月12日、コロンブスがヨーロッパから大西洋を横断してる時に見つけたんだって。\nあなた: ビバルディの四季ってどんなメロディだっけ?\nマーブ: 知らないよ、そんなの。ネットで検索してみればいいじゃん。\nあなた: マーブとマブダチになれるかな?\nマーブ:"
 
response = openai.Completion.create(
 engine="davinci",
 prompt=prompt,
 temperature=0.3,
 max_tokens=60,
 top_p=0.3,
 frequency_penalty=0.5,
 presence_penalty=0.0,
 stop=["\n\n"]
)
#print(prompt)
print(str(prompt))
print(" ")
print(response['choices'][0]['text'])
#print(str(response['choices'][0]['text']))
#print(json.dumps(response, ensure_ascii=False, indent=2))
debian:~$

 ソースはこんな感じ、環境変数OPENAI_API_KEYに自分のAPIキーが入っている前提です。

 そのままでは想定通り機能しないので一部オリジナルソースから変更しています。

 print()、もしくは、json出力しないと実行しても何も表示されないので何れかを追加する必要があり、後者用にimport jsonを追加。

 が、応答内容によっては、何れか一方では表示できないことがあり、他方を使用せざるを得ないこともあります。

 表示できないのが、print文なら、response配列を文字列にキャストすれば、たいていは凌げますが。

 応答文だけだとチャット状態にならず、問いかけ文も表示したいところ。

 が、サンプル通りだとprintやjson形式で出力しようにも問いかけ用の変数promptがスコープの範囲になく、スコープに入るようPythonの場合だとインデント階層を相応に上げたところで変数が登場(変数宣言)するようにする必要があります。

 また、promptの中身によっては、文字列にキャストしないとエラーとなるケースもありました。

ホーム前へ次へ