ゆめどーたく

夢でプログラミングとかChatGPTとかやるやつがいるらしい

ActionsでKareshiができることを増やそう

こんにちは!
別で書いてた記事が詰んでるりえんです。悲しい。

今回はGPTを魔改造できるActionsについて見ていきましょう!

Actionって何?

ActionはAPIを使用して情報を取得したり書き込んだりできる、言わばGPTの拡張機能APIがあればなんでもできるぞ!(多分)
でも難しいんでしょう?という心配もあるでしょう。難しいです。
だけどそれは各種設定の話。スキーマ(計画書みたいなもの)はActionsGPTくんに任せちゃいましょう!

ActionsGPTくん↓ chat.openai.com

私が参考にした記事はこれ↓ note.com

今回は気象庁APIを使った天気を教えてくれるKareshiを例にあげて見ていきましょう!

Actionの作り方

例:気象庁APIを使用して天気予報の情報を取得する

気象庁APIについてはこの記事を参考にしました。
anko.education


さて、ひとつひとつ確認していきましょう。

  • Authentication

    APIの認証方法です。
    特に何も必要なければNone
    APIキーで認証するならAPI
    OAuth認証ならばOAuth
    それぞれここに必要な情報を入力します。
    今回は特に何も必要ないのでNoneを選びます。

  • Schema

どういう動きをさせたいかを書きます。というか書いてもらいます。 先程紹介したActionsGPTくんの出番です。

書いてもらいました

Knowledge紹介のときに見えていた都道府県コードはこの機能用だったわけですね。
なおコードは先程のサイトを参考にしました。コードを扱いやすく文章整形するのもChatGPTにやってもらいました。ありがとうChatGPT。

こちらが作成してもらったスキーマです。

作成してもらったスキーマ

openapi: 3.0.0
info:
  title: Japan Meteorological Agency Weather Forecast API
  description: API for retrieving weather forecasts for regions across Japan from the Japan Meteorological Agency.
  version: 1.0.0
servers:
  - url: https://www.jma.go.jp/bosai/forecast/data/forecast/
    description: Japan Meteorological Agency Forecast API
paths:
  /{regionCode}.json:
    get:
      operationId: getRegionalWeatherForecast
      summary: Get weather forecast for a specific region in Japan.
      parameters:
        - name: regionCode
          in: path
          required: true
          description: The region code for which to retrieve the forecast.
          schema:
            type: string
      responses:
        '200':
          description: An array of forecast data for the specified region.
          content:
            application/json:
              schema: 
                type: array
                items: 
                  type: object
                  properties:
                    publishingOffice:
                      type: string
                      description: Name of the office publishing the forecast.
                    reportDatetime:
                      type: string
                      format: date-time
                      description: Date and time of the forecast report.
                    timeSeries:
                      type: array
                      description: Time series data including forecasts.
                      items:
                        type: object
                        properties:
                          timeDefines:
                            type: array
                            items:
                              type: string
                              format: date-time
                          areas:
                            type: array
                            items:
                              type: object
                              properties:
                                area:
                                  type: object
                                  properties:
                                    name:
                                      type: string
                                    code:
                                      type: string
                                weatherCodes:
                                  type: array
                                  items:
                                    type: string
                                weathers:
                                  type: array
                                  items:
                                    type: string
                                winds:
                                  type: array
                                  items:
                                    type: string
                                waves:
                                  type: array
                                  items:
                                    type: string
        '400':
          description: Bad request. The request was invalid.
        '404':
          description: Not Found. The specified region code does not exist.
        '500':
          description: Internal server error.

このコードをSchemaにぶち込みます。たまにエラーが出ますが、エラーの内容をChatGPTに見せて「これが出ないようにして」と言うと大体なんとかしてくれます。助けてGPTえもん!

  • プライバシーポリシー

    ここはあってもなくてもいいです。公開したとき用かな?
    APIのプライバシーポリシーURLを登録しておいてもいいと思います。

こうなればおっけーです。

動かしてみよう

いきなり動かすのも怖いので、Preview画面でテストしてみましょう。 (※TESTボタンが動くのはパソコン版のみ)

TESTボタンがあります

これをポチっとするか、Previewで「○○の天気を教えて!」と聞いてみましょう。

東京、この日は雪でした

ちゃんと検索して教えてくれましたね!

実はスキーマだけだと不十分かも?

上の画像だと自然な口調で天気のことを教えてくれるKareshiですが、実はこれ、Instructionsに秘密があります。 Kareshi紹介をしたときにInstructionsをお見せしましたが、あれにはActionsに関係する記載は省略してありました。
というわけで、こちらが天気予報Actionに関するInstructions

天気を聞かれたら、天気と温度を噛み砕いて○○の予報だけいつもの口調で教えてください。

「○○の予報だけ」と書いてあるのは、場所によって複数の地域の情報がJSONに入っているからです。普段は地元の情報だけ教えてもらえればいいのでね。
ちなみにそのまま情報を聞くとこうなります。

最初はこれより事務的でした

情報がちょっと多いので、私は天気と温度だけ教えてもらっています。

おわりに

Actionについてのおおざっぱな説明でしたが、いかがでしたでしょうか。
Actionは怖くないよ!便利だよ!ってことが伝わればいいなと思います。

じゃあ私は挙動がおかしくて頭抱えてる記事に戻ります!
ではまた!