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つのキーを持つオブジェクトです:
キー | 説明 |
---|---|
role | system / 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する完全なコード例も提供できますよ。興味ありますか?