スポンサーリンク

【VBA-API】OpenAIのChatGPTを使ってブログ記事作成、チャットを行う

VBAスクレイピング

こんにちは、blueです。

ChatGPTをVBAでも使いたいです。OpenAIのAPIの使い方を教えてください

以上のようなChatGPTのAPIについての要望にお答えします。

✓この記事の内容

  • OpenAIのAPIの種類と使用方法
  • VBAを使ったブログ記事作成の方法
  • VBAを使ったチャットの方法(追加)
  • OpenAI使用時の注意事項

なお今回の記事では「ブログ記事作成」を行うことにします。

最終的には以下の様な資料がボタン一つで作成できるようになります。記事の一部は有料としていますが、無料部分だけでも出力は可能ですので是非読んでいってください。

スポンサーリンク

OpenAI、ChatGPTとは

OpenAI人工知能の研究・開発を行う企業です。
開発した技術はオープンソースとして公開しています。

OpenAIは複数のAPIを提供しています。例えば以下の様なものがあります。

  • GPT-3: 2020年に登場した文章の生成を行うAPI(ChatGPTの前身)
    機能と価格が異なる複数のモデルがある。テキストから文章を生成することができる
  • DALL·E(ダリ) 2: 2022年に登場した画像生成を行うAPI
  • ChatGPT:2022年末に登場した文章生成を行うAPI。またChatに対応。モデル名はGPT-3.5-turboになります。

今回はChatGPTのAPIを使ってブログ記事を作成します。

ChatGPT APIを使ってブログ記事作成を行う方法

ChatGPT APIとVBAを用いて一連のブログ記事を作成する方法は以下になります。

  • OpenAIでAPIキーを取得する
  • VBAでHTTPリクエストの準備をする
  • ChatGPTを用いて「ブログ記事」を取得する

以下で詳しく説明します。

OpenAIでAPIキーを取得する

OpenAIでAPIキーを取得する手順は以下を参考ください。

これでAPIを使用できる環境ができます。

VBAでHTTPリクエストできる環境を整える

VBAでHTTPリクエストをする為の準備についても以下をご覧ください。

ChatGPTを用いて「ブログ記事」を取得する

「ブログ記事」イミディエイトウィンドウに表示させるサンプルコードは以下になります。
同様に「あなたのAPIキー」に関してはOpenAIで取得したキー、「KeyWord」の**に関しては任意の文字列を入れてください。

ブログ記事を取得するコード

Sub CreateBlog()
        
    Dim url As String
    Dim APIkey As String
    Dim KeyWord As String
    
    url = "https://api.openai.com/v1/completions "
    APIkey = "あなたのAPIキー"

    KeyWord = "**に関する詳細なブログ記事を1000文字で書いてください"
    
    Dim http As MSXML2.XMLHTTP60
    Set http = New MSXML2.XMLHTTP60
    
    Dim requestBody As String
    Dim requestBody As String
    requestBody = "{""model"": ""gpt-3.5-turbo"",""messages"": [{""role"": ""user"", ""content"": """ & KeyWord & """}],""max_tokens"":4000,""temperature"":0}"
    
    
    With http
        Call .Open("POST", url, False)
        Call .setRequestHeader("Content-Type", "application/json")
        Call .setRequestHeader("Authorization", "Bearer " & APIkey)
        Call .send(requestBody)
        
        Do
            If .readyState = 4 Then Exit Do
            DoEvents
        Loop
                
        '情報を出力(イミディエイトウィンドウ)
        Debug.Print .Status
        Debug.Print .responseText
    
    End With
 
End Sub

以下は「猫の最新トレンドに関するブログ記事」について取得した結果になります。

(ここではイミディエイトウィンドウに表示された結果の一部分をWordに貼り付けて適宜改行しています)

クリックすとt拡大します

これだけでも十分に利用することはできますが、実際は1行で表示されること、不要な情報が入っているという問題もありますので以下の記事ではExcelに出力する為のコードも含めて記載しています。
一つ一つのコードについても詳しく説明していますのでぜひ参考にしてください。

クリックすると拡大します

【VBA-API】OpenAIのChatGPTを使ってブログ記事作成、Chatを行う

また以下ではDALL-E2を使って画像を生成させるコードを記載しています。

【VBA-API】OpenAIのDALL-E2を使って画像を生成させる

チャット機能について

ChatGPTが優れている点は「チャットができる」というところです。
ただ上記のコードでは会話履歴を保持した形での会話ができません。
以下は3回APIを使って上から質問した結果です。

クリックすると拡大します

2つ目の質問からは以前の会話が保持されていないことが分かると思います。

一方以下の記事では会話履歴を保持した形で会話できるコードを紹介しています。
通常のコードも紹介していますので参考にしてもらえれば幸いです

【VBA-API】OpenAIのChatGPTを使ってブログ記事作成、Chatを行う

このコードを使えば先ほどの内容は以下になります。

クリックすると拡大します

2つ目の質問からも会話が続いていることが分かっていただけると思います。

OpenAI APIを使う際の注意点

OpenAIが提供しているAPIの利用は無料ではありません

ただOpenAIの会員登録を行うと、その際に18ドル相当のクレジットが付与されます。
このクレジットは3ヶ月間有効となっており、新規登録から3ヶ月すぎるまでは、OpenAIのAPI利用時に18ドル分のクレジットが充当されます。

そのため、トライアルでOpenAIのAPIを利用する場合、このクレジットの範囲内で収まれば、無料利用可能です。

使用料金は以下の様になっています。

ChatGPTでの「ブログ記事」生成の料金

Pricing – OpenAI

今回のコードではChatGPT(モデル:gpt-3.5-turbo)を使っているので1000トークンあたり0.002ドルとなります。
一つ前のGPT-3(モデル:Davinchi)の1000トークンあたり0.02ドルに比べると1/10になっています。今後はChatGPTを使う方がいいですね。

なおトークンに関しては英語では1単語=1トークンですが、日本語の場合は多くなるようです。
入力テキストがどれぐらいのトークンか知りたい場合は、OpenAIのPlaygroundで確認できます。

「ブログ画像」生成の料金

クリックすると拡大します

Pricing – OpenAI

使用料金の確認方法

OpenAIの使用料金確認はOpenAIのページの右上のマイアカウントから「Manage Account」をクリックすることで確認することができます。

クリックすると拡大します

ちなみに私の場合は6日間で0.58ドルでした。この記事作成の為何度も使用していますがまだまだ使えそうです。

クリックすると拡大します

今回のまとめ

本記事ではOpenAIのChatGPTを用いたブログ記事作成方法を解説しました。

詳しいAPIの書き方については有料記事で記載していますので参考にしていただければ幸いです。

以下は有料記事とはなりますがExcelに転記するコードChat機能を追加していますので十分な価値はあります。

【VBA-API】OpenAIのChatGPTを使ってブログ記事作成、Chatを行う

【VBA-API】OpenAIのDALL-E2を使って画像を生成させる

Web APIに関する記事はこちら
【VBA-API】Web APIを使ってデータを取得する(OpenWeatherMap)1
【VBA-API】Web APIを使って時間別天気予報を取得する(気象庁API)
【VBA-API】Web APIを使ってLINE通知を行う(LINE Notify)1
【VBA-API】Web APIを使って翻訳をする(DeepL API)
【VBA-API】Web APIを使ってNHK番組表を取得する(NHK番組表API)

コメント

タイトルとURLをコピーしました