見出し画像

【GenAI作成】郵便番号から住所検索する機能をGPTsに追加する

GPTsに住所検索機能を追加したいと考えている人必見の内容です。ChatGPTの有料版「ChatGPT Plus」の機能である自分だけのGPTsを作っている人も多いでしょう。その際に住所検索機能を追加したいと思っている人もいるのではないでしょうか?

そのように考えている人に向けて、「郵便番号API」を使ってGPTsに追加する方法があります。

本記事では、GPT BuilderのActions機能を使って郵便番号APIを実装する方法を解説します。


日本の郵便番号APIとは?

郵便番号APIは、日本の郵便番号から住所のデータを取得できるWeb APIです。オープンソースであり、個人利用だけでなく商用利用もできます。

また、下記のサイトで郵便番号を入力して住所を検索することも可能です。

郵便番号APIを追加したGPTsの使い所

GPTsに郵便番号APIを追加すると、郵便番号から住所を検索して確認したいと時に役立ちます。

例えば、「〒100-0001はどこですか?」と聞くと次のように答えてくれます。

郵便番号100-0001に対応する住所は以下の通りです:
都道府県: 東京都
市区町村: 千代田区
地域: 千代田
何か他にお手伝いできることがありましたらお知らせください。

住所検索くんGPT

郵便番号APIを使っているため、実際に存在しない郵便番号を入力してもエラーとなり、ハルシネーションの心配はありません。ただし、住所を入力して郵便番号を確認する場合には、APIを通じて確認しているように見えても、ハルシネーションが発生することがあります。そのため、あくまでも郵便番号を入力して住所を確認する方法のみに留めた方が間違いありません。

郵便番号APIの機能をGPTsに追加するには

GPTsに郵便番号APIを実装する方法について解説します。

<h4>GPT BuilderのActions機能とは</h4>
Actions機能とは、GPTとAPIを繋ぎ、そのAPIの機能を追加するための機能です。公開されているAPIや自分で作ったAPIなどをActionsで追加すれば、特定の機能を持ったGPTを作ることができます。

実装するためには、OpenAPIと呼ばれるAPIの仕様書をYAML形式などで記述します。これにより、APIがどのような引数を受け取り、どこにリクエストを送信するかなどの設定を行い、ChatGPTにその情報を提供します。

そしてActionsの実行は、GPTとのやり取りの中で必要に応じて呼び出されます。これは、OpenAI APIのFunction Callingの仕組みと同じです。

OpenAPIの作り方

OpenAIのGPTsにActionsGPTというものがあります。これはGPT BuilderのActions機能を設定する画面において、「ActionsGPTからヘルプを取得する」のリンクがあります。

リンクに進むと下記のActionsGPTに移動します。

このActionsGPTを使って、OpenAPIを作成してもらいます。作成する際に必要なのが郵便番号APIの仕様書です。
これは下記の画像のように「日本の郵便番号API」から最後の部分までコピペし、ActionsGPTの入力欄にペーストします。

そうすると、ActionsGPTがYAML形式に直して作成してくれます。
作成してもらったものが下記のコードです。

openapi: 3.1.0
info:
  title: Japanese Postal Code API
  description: This API provides address data based on Japanese postal codes.
  version: 1.0.0
servers:
  - url: https://jp-postal-code-api.ttskch.com/api/v1
    description: Main server
paths:
  /{postalCode}.json:
    get:
      operationId: getAddressByPostalCode
      summary: Get address data by postal code
      description: Retrieve address data based on the provided Japanese postal code.
      parameters:
        - name: postalCode
          in: path
          required: true
          description: The postal code for which the address data is requested.
          schema:
            type: string
            example: "1000014"
      responses:
        '200':
          description: A JSON object containing address data for the given postal code.
          content:
            application/json:
              schema:
                type: object
                properties:
                  postalCode:
                    type: string
                    example: "1000014"
                  addresses:
                    type: array
                    items:
                      type: object
                      properties:
                        prefectureCode:
                          type: string
                          example: "13"
                        ja:
                          type: object
                          properties:
                            prefecture:
                              type: string
                              example: "東京都"
                            address1:
                              type: string
                              example: "千代田区"
                            address2:
                              type: string
                              example: "永田町"
                            address3:
                              type: string
                              example: ""
                            address4:
                              type: string
                              example: ""
                        kana:
                          type: object
                          properties:
                            prefecture:
                              type: string
                              example: "トウキョウト"
                            address1:
                              type: string
                              example: "チヨダク"
                            address2:
                              type: string
                              example: "ナガタチョウ"
                            address3:
                              type: string
                              example: ""
                            address4:
                              type: string
                              example: ""
                        en:
                          type: object
                          properties:
                            prefecture:
                              type: string
                              example: "Tokyo"
                            address1:
                              type: string
                              example: "Chiyoda-ku"
                            address2:
                              type: string
                              example: "Nagatacho"
                            address3:
                              type: string
                              example: ""
                            address4:
                              type: string
                              example: ""
        '404':
          description: Postal code not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: "Postal code not found"
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: "Internal server error"

このコードをGPT BuilderのActions機能を設定する画面のスキーマにコピペします。

「利用可能なアクション」部分に名前などが表示されており、「テストする」をクリックすると、プレビュー画面において許可が求められるため、「許可する」をクリックし、正しく表示されれば成功です。

ここまでできればほぼ完成です。

あとは、GPT Builderの作成画面で、「郵便番号から住所を検索する「住所検索くん」のプロンプトを作成してください。」と入力すれば、Instructions(指示)だけではなく、プロフィール画像、Description(説明)、Conversation starters(会話の開始者)まで作成してくれます。もちろん自分自身の使い方に併せて、自分でプロンプトを作成することも可能です。

私の場合、下記のような感じでできました。

完成したら、実際に試してみましょう。
「住所検索くん」に質問してみます。

大阪にあるユニバーサルスタジオジャパンの郵便番号「554-0031」

郵便番号「554-0031」に対応する住所は以下の通りです:
県名:大阪府
市区町村:大阪市此花区
町名:桜島
何か他にお手伝いできることがありましたらお知らせください。

「住所検索くん」GPT

東京ディズニーシー・ファンタジースプリングスホテルの郵便番号「279-8526」

郵便番号「279-8526」に対応する住所は以下の通りです:
県名:千葉県
市区町村:浦安市
町名・番地:舞浜1番地2
施設名:東京ディズニーシー・ファンタジースプリングスホテル
何か他にお手伝いできることがありましたらお知らせください。

「住所検索くん」GPT

東京ディズニーランドホテルの郵便番号「279-8505」

郵便番号「279-8505」に対応する住所は以下の通りです:
県名:千葉県
市区町村:浦安市
町名・番地:舞浜29−1
施設名:東京ディズニーランドホテル
何か他にお手伝いできることがありましたらお知らせください。

「住所検索くん」GPT

でたらめな郵便番号「123-4567」

郵便番号「123-4567」に対する住所情報を取得できませんでした。お手数ですが、もう一度郵便番号を入力してください。

「住所検索くん」GPT

存在しない郵便番号を入力すると、エラーが発生するため、上記のような回答になります。

最後に

いかがだったでしょうか。

GPTsに住所検索機能を追加したいと考えている方は、郵便番号APIをActions機能で使えるようにすれば、簡単に検索ができるようになります。

また作り方は解説してきたとおりで、OpenAPIはActionsGPTにAPIの仕様書をコピペすれば作成できます。もしエラーが発生した場合は、エラー部分をActionsGPTに確認すれば、修正したものを提供してくれます。

今回の記事を参考にして、ぜひ試してみてください。

読んでいる方へのお願い

この内容が役に立ったという方は、「♡(スキ)」や「フォロー」をお願いします。「X」「facebook」「LINE」でシェアいただけるとさらに嬉しいです。

また日考塾Mediaでは、サポートをお受けしています。活動を継続させていくために、どうかお願い申し上げます。

日考塾Sapientiaでは、読んでいただいた方々に良質な記事をお届けするために日々励んでおります。しかし、良質な記事をお届けするためには、出ていくものも多いのが現状です。どうか、活動を継続させていくために、サポートををお願い申し上げます。