今回からは Responses API で会話を行うサンプルアプリを作成します。
前回紹介したように Responses API と Chat Completion API は、エンドポイントと送受信する JSON が違うだけで、サンプルアプリの構造に特別なことはありません。以前作成した Chat Completion API のサンプルを改造して進めることも可能なのですが、記事が独立するよう、今回は初めから順に作成したいと思います。
フォームの作成
Responses API に送信する情報と結果を記録するためのフォームを作成します。
各フィールドの説明は詳細にはしませんが、『リクエスト設定』が Responses API に送信する内容の入力欄、『リクエスト』が送信した情報、『レスポンス』が Responses API の応答を記録するエリアです。
JSON を保存するリッチテキストフィールドはセクション内に配置し、展開/省略を次のように設定します。
画像の生成や解析を行う場合など JSON が大きくなると、文書を開くのが遅くなります。ただ、閉じたセクション内にフィールドが存在する場合は、文書を開くタイミングではなく、セクションを開くタイミングで遅くなります。
上記のように最初は閉じるようにしておくと、見たいときだけ待たされる構造にできます。フィールドサイズを表示しているので、待たされるかどうかもわかりますね。
エージェントの作成
上記フォームで作成された文書を使って、Responses API に問い合わせを行うエージェントを作成します。
まずは、メインルーチンです。① API に送信する JSON を作成、② API をコール、最後に、結果を保存して UI に再表示しています。
|
Option Declare Private xns As NotesSession Private Const xcsBearer = "sk-xxxxx" 'API キーをここにセット Sub Initialize Dim nuiw As New NotesUIWorkspace Dim nuid As NotesUIDocument Dim ndb As NotesDatabase Dim nd As NotesDocument Dim jnavRequest As NotesJSONNavigator Dim jnavResponse As NotesJSONNavigator '初期化 Set xns = New NotesSession Set ndb = xns.CurrentDatabase Set nuid = nuiw.Currentdocument Set nd = nuid.Document '① Request Body(JSON) の作成 Set jnavRequest = xGetRequest_JSON(nd) Call xSetJSON(nd, "Request", jnavRequest) 'Request Body の保存 '② 問い合わせ実行 Set jnavResponse = xAskResponses(jnavRequest) Call xSetJSON(nd, "Response", jnavResponse) 'Response の保存 '保存して開きなおす Call nd.Save(True, False) Call nuid.Close() Call nuiw.EditDocument(False, nd) End Sub |
作成する JSON は単純なものでした。
|
{ "model": "gpt-5-nano", "input": "大阪府の県庁所在地は?" } |
なので、この JSON を作成する関数はいたってシンプルです。
|
Function xGetRequest_JSON(vnd As NotesDocument) As NotesJSONNavigator Dim jnav As NotesJSONNavigator 'RequestBody(JSON) の準備 Set jnav = xns.CreateJSONNavigator("") '1.model Call jnav.AppendElement(vnd.Model(0),"model") '1.input Call jnav.AppendElement(vnd.Prompt(0),"input") Set xGetRequest_JSON = jnav End Function |
続いて、Responses API に問い合わせを行う関数です。
|
Function xAskResponses(vjnavRequest As NotesJSONNavigator) As NotesJSONNavigator Dim sURL As String Dim http As NotesHTTPRequest Dim jnav As NotesJSONNavigator 'HTTP リクエストの準備 Set http = xns.CreateHTTPRequest() 'HTTP ヘッダーの設定 Call http.SetHeaderField("Content-Type", "application/json") Call http.SetHeaderField("Authorization", "Bearer " & xcsBearer) 'API 実行 http.PreferJSONNavigator = True sURL = "https://api.openai.com/v1/responses" 'エンドポイント Set jnav = http.Post(sURL, vjnavRequest.Stringify()) 'Response をセット Set xAskResponses = jnav End Function |
戻り値はレスポンスの JSON で、NotesJSONNavigator のオブジェクトを返します。
最後は送受信した JSON を文書に記録する関数です。引数の NotesJSONNavigator から JSON を抽出し、指定したフィールドにセットします。その際、JSON のサイズと時刻も記録しています。
|
Private Function xSetJSON(vnd As NotesDocument, ByVal vsFld As String, vjnav As NotesJSONNavigator) Dim nrti As NotesRichTextItem Dim sText As String On Error Resume Next 'JSON(文字列)を取得 と サイズの記録 If vjnav Is Nothing Then sText = "(Nothing)" Call vnd.ReplaceItemValue(vsFld & "_Size", "") Else sText = vjnav.Stringify() Call vnd.ReplaceItemValue(vsFld & "_Size", Len(sText)) End If '日時の記録 Call vnd.ReplaceItemValue(vsFld & "_DT", Now) 'JSON の記録 Call vnd.RemoveItem(vsFld & "_JSON") 'いったん削除してからセット Set nrti = vnd.CreateRichTextItem(vsFld & "_JSON") Call nrti.AppendText(sText) End Function |
動作検証
ここまで出来上がったらテスト実行します。
AI model に gpt-5-nano を指定し、プロンプトを記述します。文書を保存して、エージェントを実行します。
うまくいくと、次のように送受信の結果が記録されます。
まとめと今後の予定
今回は Responses API に問い合わせを行う基本的な部分を作成しました。ここまでは、以前の Chat Completion API のサンプルと大差がなく、あまり目新しさがありませんでしたが、今後はこれを拡張しながら、Responses API のさまざまな機能を確認していきます。
まず、次回は、レスポンスの JSON から必要な情報を抽出する部分を作成します。
| 前回 | 連載:つないでみよう | 次回 |





























