openaAI-JSON-requestbody

VBAからOpenAI APIにアクセスするには、HTTPリクエストを手動で構築する必要があります。その中心になるのが JSON形式のリクエストボディ です。ここでは、主に chat/completions エンドポイントを使う場合のJSONの構造について詳しく解説します。

目次

VBA openaAI のJSON形式のリクエストボディの詳細を解説。


🔸 基本のリクエスト構造(chat/completions)

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "こんにちは!"}
  ],
  "temperature": 0.7
}

🔍 各項目の詳細

🧠 "model"

  • 使用するAIモデルを指定します。
  • 例: "gpt-3.5-turbo", "gpt-4" など。
  • 必須項目

💬 "messages"

  • 会話の履歴を含む配列です。
  • 各要素は以下の3つのキーを持つオブジェクトです:
キー説明
rolesystem / user / assistant のいずれか
content発言内容
name任意。ユーザー名など(使わないことが多い)

例:

[
  {"role": "system", "content": "You are a translator."},
  {"role": "user", "content": "Translate this into French: Hello."}
]

🔥 "temperature"(省略可)

  • 応答のランダム性を制御(0~2)
  • 低い値(例:0.2)→ 確定的・論理的
  • 高い値(例:1.0)→ 創造的・自由な応答

VBAで使う場合の構造(サンプル)

以下はVBAでJSONを組み立てる例:

Dim json As String
json = "{""model"":""gpt-3.5-turbo""," & _
       """messages"":[ " & _
       "{""role"":""user"",""content"":""こんにちは!""} " & _
       "],""temperature"":0.7}"

" を JSON 内で使うには "" のように2重にする必要があります(VBAの仕様)。


🧰 ヘッダー例(VBAで使う時)

httpReq.setRequestHeader "Content-Type", "application/json"
httpReq.setRequestHeader "Authorization", "Bearer YOUR_API_KEY"

✅ まとめ

項目必須説明
model使用するGPTのバージョン
messages会話履歴(JSON配列)
temperature応答の多様性を調整

実行サンプル

実行するプロシジャー

Sub getOpenAI()
    Dim res As String, prompt As String, sMassage As String
    
    'リクエストの関数呼び出し
    sMessage = "あなたはVBAプログラマです,"
    sPrompt = "VBA OpenAIの検索結果をファイルに保存するコードを書いて下さい"
    res = GetChatGPTResponse(sMessage, sPrompt)
    'テスト用出力
    Debug.Print res
    
    'ファイルに保存
    Call saveToFile(res)
    
    'シートに出力
    Call toSheet(res)
End Sub

OpenAIのリクエスト関数

Function GetChatGPTResponse(sMessage As String, sPrompt As String) As String
    Dim http As Object
    Dim json As Object
    Dim apiKey As String
    Dim url As String
    Dim data As String
    Dim response As String

    ' API キーを設定(取得したキーを入れてください)
    apiKey = "you-key"

    ' OpenAIのエンドポイント
    url = "https://api.openai.com/v1/chat/completions"
  
    ' JSON データの作成
    data = "{""model"":""gpt-3.5-turbo""," & _
        """messages"":[ " & _
        "{""role"":""system"",""content"":""" & Replace(sMessage, """", "\""") & """}," & _
        "{""role"":""user"",""content"":""" & Replace(sPrompt, """", "\""") & """}" & _
        "],""temperature"":0.7}"
        
    ' HTTPリクエストを作成
    Set http = CreateObject("MSXML2.XMLHTTP")
    With http
        .Open "POST", url, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Authorization", "Bearer " & apiKey
        .Send data
        response = .responseText
    End With

    ' JSON を解析して応答を取得
    Set json = JsonConverter.ParseJson(response)
    GetChatGPTResponse = json("choices")(1)("message")("content")
    ' クリーンアップ
    Set http = Nothing
    Set json = Nothing
End Function

ファイルに出力

Sub saveToFile(s As String)
    Dim filePath As String
    Dim fileNo As Integer
    
    ' ファイルパスの指定
    filePath = CurDir & "\output_write.txt"
    
    ' ファイルナンバーの取得
    fileNo = FreeFile

    ' ファイルを開く(または新しく作成)
    Open filePath For Output As #fileNo

    ' ファイルにデータを書き込む
    Write #fileNo, s

    ' ファイルを閉じる
    Close #fileNo

End Sub

シートに出力

Sub toSheet(s As String)
  Dim ws As Worksheet
  Set ws = Worksheets("sheet1")
    ' 改行で分割
  Lines = Split(s, vbCrLf)

    ' シートに1行ずつ書き込む(A列に)
    For i = 0 To UBound(Lines)
        ws.Cells(i + 1, 1).Value = Lines(i)
    Next i

End Sub

必要であれば、VBAで実際にOpenAI APIにPOSTする完全なコード例も提供できますよ。興味ありますか?

よかったらシェアしてね!
目次