From cd990a0f4d8ede7d38a5146e56c5edf1d5fd74ad Mon Sep 17 00:00:00 2001 From: Takuya Ono Date: Fri, 30 Jun 2023 19:39:50 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20=E4=BF=AE=E6=AD=A3(chatgpt=5Fela?= =?UTF-8?q?borate.rb):=20=E6=9C=AC=E5=AE=B6OpenAI=20API=E3=81=A7=E3=81=AE?= =?UTF-8?q?=E3=83=86=E3=82=B9=E3=83=88=E3=82=92=E5=AE=8C=E4=BA=86=E3=81=97?= =?UTF-8?q?=E3=81=A6=E5=8B=95=E3=81=8F=E3=82=88=E3=81=86=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=82=8A=E3=81=BE=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Azure OpenAI APIと本家OpenAI APIの両方で使えるようになりました。 また、本家OpenAI API用にモデル名を変えられるようにオプションを追加しました。 --- plugin/chatgpt_elaborate.rb | 51 ++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/plugin/chatgpt_elaborate.rb b/plugin/chatgpt_elaborate.rb index 927dffc..07d7928 100644 --- a/plugin/chatgpt_elaborate.rb +++ b/plugin/chatgpt_elaborate.rb @@ -4,7 +4,7 @@ # tDiary用のプラグインです。OpenAI APIでChatGPTを利用して、 # 日本語文の遂行作業を支援します。文字の入力ミスや言葉の誤用がないか、 # わかりにくい表記や不適切な表現が使われていないかなどをチェックします。 -# Arure OpenAI ServiceのOpenAI APIでテストています。 +# 本家OpenAI APIとArure OpenAI ServiceのOpenAI APIでテストています。 # https://azure.microsoft.com/products/cognitive-services/openai-service # # Copyright (c) 2010, hb @@ -14,9 +14,12 @@ # 設定: # # 本家OpenAIか、Azure OpenAIかによってどちらかが必須 -# @options['chatgpt_elaborate.OPENAI_API_KEY'] : API_KEY(未テスト:どちらか必須) +# @options['chatgpt_elaborate.OPENAI_API_KEY'] : API_KEY(どちらか必須) # @options['chatgpt_elaborate.AZURE_OPENAI_API_KEY'] : API_KEY(どちらか必須) # +# 本家OpenAIのオプション +# @options['chatgpt_elaborate.OPENAI_API_MODEL'] : モデル名 "gpt-3.5-turbo" +# # 以下はAzure OpenAI APIを利用する時に必須 # @options['chatgpt_elaborate.AZURE_OPENAI_API_INSTANCE_NAME'] : インスタンス名 # @options['chatgpt_elaborate.AZURE_OPENAI_API_DEPLOYMENT_NAME'] : モデル・デプロイ名 @@ -31,11 +34,13 @@ #Net::HTTP.version_1_2 def elaborate_api( sentence ) + #@logger.debug( "ChatGPT elaborate") apiKey = @conf['chatgpt_elaborate.OPENAI_API_KEY'] + model = @conf['chatgpt_elaborate.OPENAI_API_MODEL']||'gpt-3.5-turbo' azureKey = @conf['chatgpt_elaborate.AZURE_OPENAI_API_KEY'] instanceName = @conf['chatgpt_elaborate.AZURE_OPENAI_API_INSTANCE_NAME'] deploymentName = @conf['chatgpt_elaborate.AZURE_OPENAI_API_DEPLOYMENT_NAME'] - version = @conf['chatgpt_elaborate.AZURE_OPENAI_API_VERSION'] + version = @conf['chatgpt_elaborate.AZURE_OPENAI_API_VERSION']||'2023-05-15' messages = [ {"role" => "system", @@ -44,6 +49,7 @@ def elaborate_api( sentence ) "content" => "#{sentence}" }] if ( azureKey ) + #@logger.debug( "ChatGPT elaborate by Azure OpenAI API") url = URI.parse("https://"\ + instanceName + ".openai.azure.com"\ + "/openai/deployments/" + deploymentName\ @@ -59,9 +65,10 @@ def elaborate_api( sentence ) headers = {'Content-Type' => 'application/json', 'api-key' => azureKey } else - url = URI.parse("https://api.openai.com/v1/completions") + #@logger.debug( "ChatGPT elaborate by Original OpenAI API") + url = URI.parse("https://api.openai.com/v1/chat/completions") params = { - "model" => "gpt-3.5-turbo", + "model" => model, 'messages' => messages, "temperature" => 0.7, "max_tokens" => 2000, @@ -89,25 +96,33 @@ def elaborate_result( json ) HTML doc = JSON.parse( json ) - result = doc["choices"][0]["message"]["content"] - if result.empty? - html << "

見つかりませんでした。

" - else - html << '

' - html << CGI::escapeHTML(result).gsub( /\n/, '
' ) - html << '

' - end + if doc["error"] + html << "

Error: #{doc["error"]["message"]}
" + html << "Type: #{doc["error"]["type"]}
" + html << "Code: #{doc["error"]["code"]}

" + else + result = doc["choices"][0]["message"]["content"] + if result.empty? + html << "

見つかりませんでした。

" + else + html << '

' + html << CGI::escapeHTML(result).gsub( /\n/, '
' ) + html << '

' + end + end html end add_edit_proc do - if @mode == 'preview' && @conf['chatgpt_elaborate.AZURE_OPENAI_API_KEY'] then - json = elaborate_api( @cgi.params['body'][0] ) - <<-HTML + if @mode == 'preview' && + ( @conf['chatgpt_elaborate.AZURE_OPENAI_API_KEY'] || + @conf['chatgpt_elaborate.OPENAI_API_KEY'] )then + json = elaborate_api( @cgi.params['body'][0] ) + <<-HTML
#{elaborate_result( json )}
- HTML - end +HTML + end end