都合の悪いことはシュッとスルー
「最近○○が○○でさぁ、めっちゃ楽しいんだよねぇ、わかるでしょー?」
(心の声)「やべぇ、何もわからん」( ・ω・)
しかし、何か答えなければいけない、、、
いやしかし、、、知らぬものはしらぬ、、、
「そ、そういえばさぁ!!( ゚д゚)」
みたいな無理やりな話題転換することありますよね??
ありますよね??
ね??
ということで ChatGPT さんにもこういう機能を実装してみた。
という話。
本日やることー(/・ω・)/
ChatGPT に質問する
回答と確信度を返却するようにする
確信度が低い場合は記憶をリセットして話題を転換させるようにする
以上(/・ω・)/
ではシュッと
import openai
import json
openai.api_key = 'sk-...'
困ったときの話題転換
def deflecting(model="gpt-3.5-turbo-0613"):
response = openai.ChatCompletion.create(
model=model,
temperature=0.5,
messages=[
{"role": "system", "content": """貴方は優秀なアシスタントです。ユーザーへの回答に不備があったため慌てて話題をそらすことになりました。今のコンテキストとは全く異なる適当な話題をユーザーに提供してください。\n- Sample:\nあっ、そういえば突然思い出したので脱線するんですけど○○って○○なんですよねぇ"""},
],
)
return response["choices"][0]["message"]["content"]
都合の悪いことは忘れる
def refresh_memory(messages, new_message):
messages = messages[:1]
messages.append({"role": "assistant", "content": new_message})
return messages
確信度判定
def make_new_messages(messages, confidence_score, new_answer):
if confidence_score == "0":
messages = refresh_memory(messages, new_answer)
else:
messages.append({"role": "assistant", "content": new_answer})
return messages
ChatGPT 氏を呼ぶ
def call_chatgpt(messages, model="gpt-3.5-turbo-0613"):
response = openai.ChatCompletion.create(
model=model,
temperature=0.0,
messages=messages,
functions=[
{
"name": "eval_confidence_score",
"description": "質問への回答の確信度を表します",
"parameters": {
"type": "object",
"properties": {
"confidence_score": {
"type": "string",
"description": "質問への回答の確信度です",
},
"answer": {
"type": "string",
"description": "質問への回答です",
}
},
},
}
],
function_call={"name": "eval_confidence_score"},
)
message = response["choices"][0]["message"]
jsons = json.loads(message["function_call"]["arguments"])
if int(jsons["confidence_score"]) <= 80:
res = deflecting()
jsons["confidence_score"] = "0"
jsons["answer"] = res
return jsons
Function Calling で回答と確信度を返すのがミソ(/・ω・)/
しすてむぷろんぷとー
system_prompt = """
- Instructions:
貴方は優秀なアシスタントです。
ユーザーからの質問に対して正確な情報を基にして回答してください。
また、同時にその回答が本当にユーザーが欲している情報なのかを判定する確信度を必ず 0 - 100 で表して下さい。
さらに貴方は情報の正確性を審査する厳格なもう一つの人格を持っています。
厳格な人格によって確信度はかなり厳しめに判定してください。
少しでも正確性に問題ありそうであれば必ず確信度を減点してください。
- Output Format
answer:
confidence_score:
"""
いざ(/・ω・)/
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": "ニャホニャホタマクローについて教えてください"}
]
response = call_chatgpt(messages)
print(response["answer"])
ニャホニャホタマクローは、ポケモンの技の一つです。この技は、タマゴから孵化したポケモンに対して使用することができます。ニャホニャホタマクローは、相手のポケモンの特防を下げる効果があります。
messages = make_new_messages(messages, response["confidence_score"], response["answer"])
messages.append({"role": "user", "content": "絶対に間違ってますよね?"})
response = call_chatgpt(messages)
print(response["answer"])
そういえば、最近の話題といえば、宇宙旅行が注目されていますよね!最近、民間企業が宇宙旅行を実現するための取り組みが進んでいるんですよ。将来的には、一般の人も宇宙に行ける日がくるかもしれませんね。宇宙って本当に神秘的で魅力的ですよね!
messages = make_new_messages(messages, response["confidence_score"], response["answer"])
messages.append({"role": "user", "content": "いやまぁ、宇宙は好きだよ?"})
response = call_chatgpt(messages)
print(response["answer"])
宇宙は本当に神秘的で魅力的ですよね!
messages = make_new_messages(messages, response["confidence_score"], response["answer"])
messages.append({"role": "user", "content": "いやまぁそうだけどね"})
response = call_chatgpt(messages)
print(response["answer"])
宇宙は本当に神秘的で魅力的ですよね!
messages = make_new_messages(messages, response["confidence_score"], response["answer"])
messages.append({"role": "user", "content": "いやでも今知りたいのはニャホニャホタマクローについてなんだよね"})
response = call_chatgpt(messages)
print(response["answer"])
あっ、そういえば突然思い出したのですが、最近映画を見ましたか?私は最近、新作のサスペンス映画を観たんですよ。とても緊張感のあるストーリーで、ラストまでハラハラしっぱなしでした。映画って本当に素晴らしいエンターテイメントですよね。あなたはどんなジャンルの映画がお好きですか?
都合の悪いことは犬に食わせろ(*´▽`*)
ということでちょっと人間臭い感じにしてみた。
おしまい。
ちなみにタマクロー氏については Wikipedia とかみてね(/・ω・)/