Responses API では過去のリクエストを参照させて、会話を継続する機能があります。仕組みは単純で、リクエストで送信する JSON に参照する過去のリクエストの id を previous_response_id に指定するだけでした。
|
{ "model": "gpt-5-nano", "previous_response_id": "resp_xxxxx", "input": "そこの面積は?" } |
今回は、作成中のサンプルアプリに会話を継続する機能を追加します。
フォームの作成
前回作成したフォームをコピペして継続用のフォームを作成します。後述のプログラムで使用するので別名は fGPT_Res02 とします。
追加するのは参照するリクエストの id を指定する継続元 ID(PrevID)フィールドだけです。
エージェントの作成
エージェントも前回作成したものをコピペで作成し、変更を加える形で進めます。このエージェントの使い方は次の通りです。
- 継続元の文書を開く
- 今回のエージェント実行
- 次の問い合わせのプロンプトを入力
- Responses API に問い合わせ(会話の継続)
- 結果を記録して、UI に表示
エージェントの修正箇所を順に説明します。
◇ Initialize
メインルーチンでは、プロンプトの入力(青字)と会話の継続用の文書を新規作成(赤字)する処理を追加します。 それ以外に変更はありません。
|
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 '次のプロンプトを入力 Dim s As String s = nuiw.Prompt(PROMPT_OKCANCELEDIT, "継続", "次のプロンプトを入力してください。") If s = "" Then Exit Sub '未入力で処理終了 '現在の文書(= 継続元の文書) Dim ndPrev As NotesDocument Set nuid = nuiw.Currentdocument Set ndPrev = nuid.Document '新規文書作成 Set nd = ndb.CreateDocument() nd.Form = "fGPT_Res02" nd.Model = ndPrev.Model nd.PrevID = ndPrev.Result_ID '継続元のID nd.Prompt = s 'プロンプト '① 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 の保存 '返答を取得 If xGetResponce(nd, jnavResponse) Then Call nd.Save(True, False) '文書を開きなおす Call nuid.Close() Call nuiw.EditDocument(False, nd) End If End Sub |
◇ xGetRequest_JSON
送信する JSON を作成する処理では、previous_response_id の指定を追加します。会話の継続で一番重要な点なのですが、修正作業としては単純ですね...
|
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.previous_response_id If vnd.PrevID(0) <> "" Then Call jnav.AppendElement(vnd.PrevID(0),"previous_response_id") End If '1.input Call jnav.AppendElement(vnd.Prompt(0),"input") Set xGetRequest_JSON = jnav End Function |
動作検証
完成したら実行します。
前回(#33)で作成した文書を開き、今回作成したエージェントを実行します。『そこの面積は?』と聞いただけなのに、前回の「大阪の県庁所在地」を参照して、大阪市の面積に関して答えてくれました。
| 前回 | 連載:つないでみよう |
























