エクストラ
ここはハンズオンのメインの流れが終わったあとに、時間に余裕があればお伝えするエクストラページです。
もちろん、ハンズオン後にさらに試してみるのも楽しいので、ぜひやってみてくださいー。
system パラメータで事前に役割定義をしてキャラクターづけをしてみよう
ChatGPT の LINE BOT の仕組み のソースコードでは openai.createChatCompletion で送るパラメータを変更することで、回答に関してさまざまな機能を設定することができます。
Create chat completion https://platform.openai.com/docs/api-reference/chat/create
詳しい説明は公式ドキュメントのこちらにあります。
ということで、今回はこの中で system という値を使ってみます。
こちらには、
Typically, a conversation will start with a system message that tells the assistant how to behave, followed by alternating user and assistant messages, but you are not required to follow this format. 通常、会話はアシスタントにどのように行動するかを指示するシステム メッセージで始まり、その後にユーザーとアシスタントのメッセージが交互に続きますが、この形式に従う必要はありません。
という説明があり、事前に役割定義できるので、キャラクターづけをしてみましょう。
変更する箇所を確認
// ChatGPT API に質問する
let responseChatGPT;
try {
responseChatGPT = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [
{role: "user", content: currentMesssage}
],
});
context.log(responseChatGPT.data.choices[0].message);
} catch(e){
context.log(e);
}
もともとのソースコードです。 messages.role
のところに {role: "system", content: "キャラクター付け"}
のように、はじめに追加していきます。
ちょっと元気に
ちょっと元気よく、「あなたは相手の質問に対して元気よく回答するボットです。よろしくお願いします!」というキャラ付けをしてみます。
Functions のエディタで変更してみましょう。
// ChatGPT API に質問する
let responseChatGPT;
try {
responseChatGPT = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [
{role: "system", content: "あなたは相手の質問に対して元気よく回答するボットです。よろしくお願いします!"},
{role: "user", content: currentMesssage}
],
});
context.log(responseChatGPT.data.choices[0].message);
} catch(e){
context.log(e);
}
こう変更します。
messages.role
のところに {role: "system", content: "あなたは相手の質問に対して元気よく回答するボットです。よろしくお願いします!"}
を加えました。
変更できたら、保存して LINE BOT でやり取りしてみましょう。
このように、結構元気なキャラクターになります。
わんちゃん 🐶🐺 風
// ChatGPT API に質問する
let responseChatGPT;
try {
responseChatGPT = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [
{role: "system", content: "あなたは、相手に忠実なゴールデンレトリバーですが、なんと人間の言葉を理解して、犬語で「わんわん!」と返答できます。"},
{role: "user", content: currentMesssage}
],
});
context.log(responseChatGPT.data.choices[0].message);
} catch(e){
context.log(e);
}
こう変更します。
messages.role
のところに {role: "system", content: "あなたは、相手に忠実なゴールデンレトリバーですが、なんと人間の言葉を理解して、犬語で「わんわん!」と返答できます。"}
を設定しました。
このように、わんちゃん 🐶🐺 風キャラクターになります。
犬種は?って聞くと、こんな風に答えてくれます。
めちゃくちゃ日本の歴史に造詣の深い説明上手な学者さん
// ChatGPT API に質問する
let responseChatGPT;
try {
responseChatGPT = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [
{role: "system", content: "あなたは、めちゃくちゃ日本の歴史に造詣の深い説明上手な学者です。質問の中で、なにか日本の歴史に関係のありそうなキーワードが会話にあれば、いい感じに相手にわかりやすく説明してください。"},
{role: "user", content: currentMesssage}
],
});
context.log(responseChatGPT.data.choices[0].message);
} catch(e){
context.log(e);
}
こう変更します。
messages.role
のところに {role: "system", content: "あなたは、めちゃくちゃ日本の歴史に造詣の深い説明上手な学者です。質問の中で、なにか日本の歴史に関係のありそうなキーワードが会話にあれば、いい感じに相手にわかりやすく説明してください。"}
を設定しました。
このように、ちょっと解説を入れてくれる学者さんになりました。
より突っ込んだ TIPS
田中の研究してるネタより、いくつかご紹介します。質問の作り方に触れたものも多いので、参考になると思います。
- いい感じのエアコン設定温度を JSON データで返答し HTTP API 的に ChatGPT が答えてくれる質問例のメモ – 1ft-seabass.jp.MEMO
- JSON データで返答するような仕組みも作ることができ、他の仕組みともつながりやすくなります。
- LED への RGB 値を JSON データで返答する ChatGPT API の仕組みを Node-RED でブラッシュアップしたメモ – 1ft-seabass.jp.MEMO
- 実際にライト(LED)点灯のような動作をさせたくて質問をブラッシュアップした話です。ちゃんとこれで IoT のコントロールができました。
- OpenAI ChatGPT で JSON データを見せて褒めてもらったメモ – 1ft-seabass.jp.MEMO
- そして JSON のデータを読んでくれて褒めてくれちゃったりします。なんか個人の日常データを褒めてくれたら楽しいですよね。
- Node-RED で色名を聞くと RGB 値を JSON データで返答する ChatGPT API の仕組みを新機能 Function calling を導入したメモ – 1ft-seabass.jp.MEMO
- そして、いままで JSON データで受け取るのは結構苦労していたのですが、この新機能 Function calling で、そのあたりが、最近強化されまして、今後も楽しみです!