リクエスト時の送信する JSON の最後のパートは、response_format ノードを作成する部分です。
このシリーズの最初に説明した通り、GPT4o の Structured Outputs を利用します。この機能については、以下のリンクで紹介していますので、必要に応じてご確認ください。
response_format の指定
まず作成するノードの確認です。
図で省略している部分を含め、指定するスキーマ設定をまとめると次の通りです。
スキーマ名 | readnamecard |
◇ 指示する JSON ノードの定義
ノード | 型 | 説明 |
companyname_full | string | 会社名 |
companyname | 会社名(法人格なし) | |
companyname_kn | カナ会社名(法人格なし)。記載がない場合は会社名から類推。 | |
name | 氏名(姓名の間は半角スペース) | |
name_kn | カナ氏名(姓名の間は半角スペース)。記載がない場合は氏名から類推。 | |
name_en | 英字氏名(半角英字で姓名の間は半角スペース)。記載がない場合は氏名から類推。 | |
dept | 所属 | |
role | 役職・肩書 | |
zip | 郵便番号(半角数字、ハイフンなし) | |
address | 住所 | |
tel | 電話番号 | |
mobile | 携帯電話番号 | |
fax | Fax番号 | |
eメールアドレス | ||
url | URL |
response_format ノードの作成
response_format ノードを作成する関数は次の通りです。工夫が足りずだらだら長くなっていますがご容赦ください。
Private Function xMakeRequest_ResponseFormat(vjnav As NotesJSONNavigator) As Boolean Dim jo As NotesJSONObject '1) response_format Dim joResponseFormat As NotesJSONObject Set joResponseFormat = vjnav.AppendObject("response_format") Call joResponseFormat.AppendElement("json_schema", "type") '2) json_schema Dim joJsonSchema As NotesJSONObject Set joJsonSchema = joResponseFormat.AppendObject("json_schema") Call joJsonSchema.AppendElement("readnamecard", "name") Call joJsonSchema.AppendElement(True, "strict") '3) schema Dim joSchema As NotesJSONObject Set joSchema = joJsonSchema.AppendObject("schema") Call joSchema.AppendElement("object", "type") '4) properties Dim joProp As NotesJSONObject Set joProp = joSchema.AppendObject("properties") '5) companyname_full Set jo = joProp.AppendObject("companyname_full") Call jo.AppendElement("string", "type") Call jo.AppendElement("会社名", "description") '5) companyname Set jo = joProp.AppendObject("companyname") Call jo.AppendElement("string", "type") Call jo.AppendElement("会社名(法人格なし)", "description") '5) companyname_kn Set jo = joProp.AppendObject("companyname_kn") Call jo.AppendElement("string", "type") Call jo.AppendElement("カナ会社名(法人格なし)。記載がない場合は会社名から類推。", "description") '5) name Set jo = joProp.AppendObject("name") Call jo.AppendElement("string", "type") Call jo.AppendElement("氏名(姓名の間は半角スペース)", "description") '5) name_kn Set jo = joProp.AppendObject("name_kn") Call jo.AppendElement("string", "type") Call jo.AppendElement("カナ氏名(姓名の間は半角スペース)。記載がない場合は氏名から類推。", "description") '5) name_en Set jo = joProp.AppendObject("name_en") Call jo.AppendElement("string", "type") Call jo.AppendElement("英字氏名(半角英字で姓名の間は半角スペース)。記載がない場合は氏名から類推。", "description") '5) dept Set jo = joProp.AppendObject("dept") Call jo.AppendElement("string", "type") Call jo.AppendElement("所属", "description") '5) role Set jo = joProp.AppendObject("role") Call jo.AppendElement("string", "type") Call jo.AppendElement("役職・肩書", "description") '5) zip Set jo = joProp.AppendObject("zip") Call jo.AppendElement("string", "type") Call jo.AppendElement("郵便番号(半角数字、ハイフンなし)", "description") '5) address Set jo = joProp.AppendObject("address") Call jo.AppendElement("string", "type") Call jo.AppendElement("住所", "description") '5) tel Set jo = joProp.AppendObject("tel") Call jo.AppendElement("string", "type") Call jo.AppendElement("電話番号", "description") '5) mobile Set jo = joProp.AppendObject("mobile") Call jo.AppendElement("string", "type") Call jo.AppendElement("携帯電話番号", "description") '5) fax Set jo = joProp.AppendObject("fax") Call jo.AppendElement("string", "type") Call jo.AppendElement("Fax番号", "description") '5) email Set jo = joProp.AppendObject("email") Call jo.AppendElement("string", "type") Call jo.AppendElement("eメールアドレス", "description") '5) url Set jo = joProp.AppendObject("url") Call jo.AppendElement("string", "type") Call jo.AppendElement("URL", "description") '4) required Dim jaRequired As NotesJSONArray Set jaRequired = joSchema.AppendArray("required") Call jaRequired.AppendElement("companyname_full") Call jaRequired.AppendElement("companyname") Call jaRequired.AppendElement("companyname_kn") Call jaRequired.AppendElement("name") Call jaRequired.AppendElement("name_kn") Call jaRequired.AppendElement("name_en") Call jaRequired.AppendElement("dept") Call jaRequired.AppendElement("role") Call jaRequired.AppendElement("zip") Call jaRequired.AppendElement("address") Call jaRequired.AppendElement("tel") Call jaRequired.AppendElement("mobile") Call jaRequired.AppendElement("fax") Call jaRequired.AppendElement("email") Call jaRequired.AppendElement("url") '4) additionalProperties Call joSchema.AppendElement(False, "additionalProperties") End Function |
こういった階層構造が複雑な JSON を操作するプログラムの場合、得てして現在位置(=操作しているノードとレベル)を見失いがちです。開発している時点では理解できていても、しばらくたってコードを見るとつかみにくいです。その対応として、コメントのノード名の前にレベルをつけるようにしてチェックしやすくしています。
次回の予定
これで、リクエスト時の送信する JSON は完成です。次回はテスト実行して、JSON が正しくできるか確認します。
前回 | 作ってみよう | 次回 |
0 件のコメント:
コメントを投稿