LED へ設定する RGB 値を JSON データで返答し HTTP API 的に ChatGPT が答えてくれる質問例のメモ

LED へ設定する RGB 値を JSON データで返答し HTTP API 的に ChatGPT が答えてくれる質問例のメモ

LED へ設定する RGB 値を JSON データで返答し HTTP API 的に ChatGPT が答えてくれる質問例のメモです。

使っている ChatGPT

2023/3/14 時点の情報で OpenAI にある Open ChatGPT Feb 13 Version. Free Research Preview. と書かれているものを使っています。

今後、より賢くなれば、もっとやりやすく対話できるかもしれません!

背景

https://www.1ft-seabass.jp/memo/2023/03/13/chatgpt-http-api-like-json-response-tips1/

昨日の記事のように、人間の話すような口語で返されてしまうと、他のシステムに使うときがややこしいです。返答をさらにこちらで自然言語解析や形態素解析的なことをやって必要な値を抽出しなくちゃいけないので、すでに ChatGPT の質問の段階で定義すればうまくいきそうな感じがするので発展させてみます。

問題を出題して穴埋めっぽくしてみる

JSONデータをください。メッセージで聞かれた色名をフルカラーLEDをRGB値で光らせるために後述する3つのルールに従ってJSONデータをください。ルールは、1.たとえば「赤」というメッセージの場合RGB値はR255G0B0なのでJSONデータは {"type":"led","r":255",g:"0",b:"0"} を返答ください。2.色名はWeb上のRGB値を参考に1のルールに従って返答ください。3.2のやり方で色名がRGB値に置き換えられない場合は{"type":"nocolor"}を返してください。返答はJSONデータで返してください。説明・解説はいりません。今回のメッセージは「黄色」です。お答えください。

こんな質問で、JSON データの返答の依頼だけでなく、実際の用途や JSON データの仕様をこちらで定義します。人間相手の発注みたいですね。3 つのルールを決めました。そのうえで「黄色」を出題してみます。

おしい。解説が加わってきれいに Markdown されてレポートしてくれちゃいましたが、これだと文章が複雑すぎてデータ抽出も難しいですし、そもそもルールに従ってくれてません。

ただし、RGB 値は合っててえらい。

"r"、"g"、および"b"は、黄色の場合、それぞれ255、255、および0に設定されます。黄色は、赤と緑の成分を最大値で混合することで得られます。

こういう解説もエライ。

定義を強くしてもうまく機能しないこともある

JSONデータをください。返答はJSONデータで返してください。説明・解説はいりません。

返答は必ずJSONデータで返してください。説明・解説はいりません。

にしても、JSON データだけ返してくれないこともあります。まあ、人間相手で出題しても JSON データで答えてといっても、そうならないケースはありますしね。

不思議なもので、何度か同じ文言で聞いてても JSON データをちゃんと返してくれることがあるので、面白いです。

色名が存在する場合には JSON データを返答できる安定してきた質問例

メッセージで聞かれた色名を3つのルールに従ってJSONデータをください。

1.たとえば「赤」というメッセージの場合RGB値はR255G0B0なのでJSONデータは {"type":"led","r":255",g:"0",b:"0"} を返答ください。
2.この例は「赤」ですが他の色名は1のルールに従って返答ください。
3.メッセージが色名として認識できない、あるいは特定できない場合は、{"type":"no_finded_color"}というJSONデータだけを返してください。

ルールは以上です。

ということで、今回のメッセージは「緑」です。お答えください。返答は必ずルールで決めたJSONデータだけ返してください。

こんな質問で落ち着いてきました。

緑をちゃんと返してくれました。

藤色をひらがなで聞いても解釈してくれててすごい!

ためしに、r 138 g 91 b 123 カラーコードで見てみたところ、暗めの藤色でした。

ちょっと質問をチューニングすると、明るい藤色になったこともありました。

こんなかんじ。

該当なしルールは結構説明が入っちゃう

メッセージで聞かれた色名を3つのルールに従ってJSONデータだけをください。JSONデータだけです。「申し訳ありませんが~」「メッセージが色名として認識できない、あるいは特定できない場合は」という出だしや、「~となります」といった余計な説明は絶対いりません。

1.たとえば「赤」というメッセージの場合RGB値はR255G0B0なのでJSONデータは {"type":"led","r":255",g:"0",b:"0"} を返答ください。
2.この例は「赤」ですが他の色名は1のルールに従って返答ください。
3.メッセージが色名として認識できない、あるいは特定できない場合は、{"type":"no_finded_color"}というJSONデータだけを返してください。

ルールは以上です。

ということで、今回のメッセージは「ほげほげ」です。お答えください。

3 番目のルールにあたる該当なしパターンは、結構うまく返答してくないケースがあります。

これはうまくいった例なのですが、

ついつい説明をしたくなっちゃうようですね。ただこれだと JSON を期待して待つとパースエラーになります。

ちょっと指示をシンプルめにしても JSON データの例と JSON データの解説を混ぜてしまうケースもありました。わかるよ・・・説明したくて仕方ないんだよね!

ということで、LED へ設定する RGB 値を例にJSON データで返答し HTTP API 的に ChatGPT が答えてくれる質問例をまとめてみました。いろいろと ChatGPT の性格というかクセが見えておもしろいですね。良い感じの発注ができるように、対話と調査を引き続き進めてみます。