Excelのユーザー定義関数で、役割も含めて質問できるようにしたChatGPT関数。OpenAIのAPIを呼び出しているのですが、パラメータ存在するTemperatureを第三引数として指定できるようにしてみます。
OpenAIのドキュメントによると、Temperatureとは、
Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.
と解説されており、まあ、一貫性、曖昧度、と言ってよいでしょうか、AIが「幻覚」を見て出力しているようなハルシネーション(Hallucination)を発生しにくくすることもできるかもしれません。値は0~2の小数で指定することができ、0が厳格、大きくなるとランダムになると書かれています。0.8は大きな値とされているので、最大の2にするとめちゃめちゃランダムになりそうで興味深いところ、このあたりもExcelのChatGPT関数であれば、並べて比較しやすいので有用な気がします。
念のため、Temperatureについて、ChatGPTに聞いてみました。
「Temperatureは、自然言語処理において生成される文章の多様性(diversity)を調整するために使用されるパラメーターです。Temperatureが低い場合、生成される文章はより堅い文体や正確な表現になり、結果的により一貫性のある文章が生成されます。一方で、Temperatureが高い場合、生成される文章はより多様で創造的なものになりますが、正確性に欠けることがあります。Temperatureの値は0から1の間の浮動小数点数で表され、値が低いほど生成される文章はより堅い文体に、高いほどより多様で創造的な表現になります。ただし、Temperatureが高すぎる場合、意味不明な文章が生成されたり、文法的に不適切な文章が生成されたりすることがあります。そのため、適切なTemperatureの値を選ぶことが重要です。」
あら完璧、最初から聞けばよかったですね。「0から1の間」は「
念のため、Temperatureについて、ChatGPTに聞いてみました。
「Temperatureは、自然言語処理において生成される文章の多様性(diversity)を調整するために使用されるパラメーターです。Temperatureが低い場合、生成される文章はより堅い文体や正確な表現になり、結果的により一貫性のある文章が生成されます。一方で、Temperatureが高い場合、生成される文章はより多様で創造的なものになりますが、正確性に欠けることがあります。Temperatureの値は0から1の間の浮動小数点数で表され、値が低いほど生成される文章はより堅い文体に、高いほどより多様で創造的な表現になります。ただし、Temperatureが高すぎる場合、意味不明な文章が生成されたり、文法的に不適切な文章が生成されたりすることがあります。そのため、適切なTemperatureの値を選ぶことが重要です。」
あら完璧、最初から聞けばよかったですね。(「0から1の間」は「0から2の間」の誤りのようです。)
さて、改修したChatGPTコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Option Explicit '------------------------------------------------------------- '指定した質問文字列をChatGPTにリクエストし回答文字列を取得する ' 第一引数:質問文字列 ' 第二引数:会話全体の指示(省略可能) ' 第三引数:Temperature(省略可能)厳密さ指定(0~2)指定されなかった場合は0.2 ' Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic) '------------------------------------------------------------- Function ChatGPT(strText As String, Optional strSystem As String, Optional Temperature As Double = 0.2) As String Dim objHttp As Object Dim strAPIKey As String, strModel As String, strURL As String, MaxTokens As Long Dim strRequest As String, strRspns As String, strTemp As String Dim p1 As Long, p2 As Long 'ChatGPTの設定 strAPIKey = "ここにAPI-KEY" MaxTokens = 1000 strModel = "gpt-3.5-turbo" strURL = "https://api.openai.com/v1/chat/completions" '文字列内の改行削除 strText = Replace(strText, vbLf, "") strSystem = Replace(strSystem, vbLf, "") Set objHttp = CreateObject("MSXML2.XMLHTTP") With objHttp 'ヘッダー設定 .Open "POST", strURL, False .SetRequestHeader "Content-Type", "application/json" .SetRequestHeader "Authorization", "Bearer " & strAPIKey 'リクエスト strRequest = "{""model"":""" & strModel & """, ""messages"":[{""role"":""system"",""content"":""" & strSystem & """},{""role"":""user"",""content"":""" & strText & """}] , ""max_tokens"":" & MaxTokens & ", ""temperature"":" & Temperature & ", ""top_p"":1}" Debug.Print strRequest 'リクエスト文字列をイミディエイトウインドウに出力 .Send strRequest Debug.Print .ResponseText '返ってきた文字列全文をイミディエイトウインドウに出力 strRspns = .ResponseText End With 'Jsonからテキストを取得 p1 = InStr(strRspns, "content"":") + 10 p2 = InStr(p1, strRspns, "},") - p1 - 1 strTemp = Mid(strRspns, p1, p2) strTemp = Replace(Replace(strTemp, "\n\n", vbLf), "\n", vbLf) ChatGPT = strTemp DoEvents End Function |
さて、さっそく実行してみましょう。ありがたいことに先日、本エントリーを「窓の杜」のニュース記事に取り上げていただきました。
そこでChatGPTに、Temperature最小値と最大値を指定して同サイトの10年後を予想してもらい比較してみます。役割は前回の記事でも登場した関西のおばちゃんとコロ助に担ってもらいましょう。このようにchatGPT関数の引数に(質問文、役割、温度)を指定します。
まずは、関西のおばちゃんの回答がこちら。
なるほど、温度を0にすると役割も消えてしまうのですね。回答内容も、温度0.0の場合は真面目に、温度2.0の場合は伸びやかに自由にコメントされているような気がします。続いてコロ助の場合を見てみましょう。
こちらも、温度0.0の場合は、コロ助の役割が消えています。より役割を強く担わせたい場合は温度の数値を上げて指定するのがよいと言えそうです。最後にオペラ歌手の回答も見てみましょう。
お、こちらは温度0.0でも少し役割を担っているようです。でも、控えめな歌になっていますね。一方、温度2.0の場合はオペラ調全開の回答となっています。
ChatGPT関数における温度Temperature指定、使用するシーンに応じて有効に活用できそうです。それではよいVBAライフを。
コメント