見出し画像

天気を教えてくれるチャットボット - Function calling を使って外部API呼び出し

ChatGPTのFunction callingを使って外部APIを安定して呼び出す事ができるかどうか試してみました。
Open-Meteo.com という天気APIを利用しました。

チャットボットすぐ試してみたい方はこちら。


前提

ChatGPTは天気のようなリアルタイムの情報は知らない。
Open-MetoroのAPIを呼び出すにはその地点の経度緯度が必須。

処理の流れ

  1. 質問の内容からChatGPTが天気APIを呼び出すことを決める

  2. 質問に含まれる地点からChatGPTが経度緯度を生成しAPIに渡す変数を出力

  3. APIを呼び出して天気情報を取得(ここはChatGPT関係ない)。

  4. 質問と天気情報を再度、ChatGPTに与える。

Function calling を使わなくても同じようなことはできるのですがAPIにわたす変数を安定して作ることが難しかったです。

ChatGPTに地点の経度緯度を生成させると、けっこう間違えます。正確性を求めるならこの部分も何らかのAPIを呼び出して処理することになりますが(例えば グーグルマップの Geocoding Service )、そうするとChatGPTのデモとしてはつまらないのでやりません笑。

デモでは経度緯度情報を表示するようにしてあります。

一番のポイントは関数の定義

どの関数を呼び出すかは関数の定義内容をみて判断している。nameやdescription大事。
以下Open-Metoro API の定義の一例。風速の単位のデフォルトがkm/sだったのでm/sに設定。

#JSON
{
  "name": "get_weather_forecast",
  "description": "7 day weather variables in hourly and daily resolution for given WGS84 latitude and longitude coordinates. Available worldwide.",
  "parameters": {
    "type": "object",
    "properties": {
      "latitude": {
        "type": "number",
        "description": "Geographical WGS84 coordinate of the location"
      },
      "longitude": {
        "type": "number",
        "description": "Geographical WGS84 coordinate of the location"
      },
      "current_weather": {
        "type": "boolean",
        "description": "Include current weather conditions in the JSON output."
      },
      "timezone": {
        "description": "If timezone is set, all timestamps are returned as local-time and data is returned starting at 0:00 local-time.",
        "type": "string"
      },
      "windspeed_unit": {
        "description": "If windspeed_unit is set, the windspeed is returned in the given unit.",
        "type": "string",
        "enum": ["ms"]
      }
    },
      "required": ["current_weather", "windspeed_unit", "latitude", "longitude", "timezone"]
    }
}


当初、予報まで取得するつもりで作っていたのですが、地点によっては取得できなかったり、「明日」や「今日」がいつなのかの認識がうまくいかなかったりで諦めました。関数の定義を煮詰めていけば予報の取得までできると思います。

具体的なFunction callingの使用例は以下の公式ドキュメントを見てください。

NLUI (Natural Language User Interface)が普通になると思う

自然言語でデータベースに問い合わせしたり、機械に仕事させたりすることがいよいよ普通になると実感しました。

妻は僕にくらべるとググるのがうまくないんですよね。適切なキーワードをひねり出して検索して必要なものを見つけるというのは技術がいります。

そのため僕は家庭内検索代行業をしばしば営んでいるのですが、NLUIが洗練されてきたら廃業でしょうか?

ううん、結局、別の技術が要求されてやっぱり上手い下手が出てくるような気もするけれど・・・よくわからない。

先日、妻がデザインのアイデア出しで詰まっていたのでChatGPT使ってみたらと言ったらあまり気乗りしないようだったので、僕がかわりにアイデア出しを頼んでみた。

そうしたら、気が利いたアイデアがでるわでるは、結局、妻はその中の一つを採用。ChatGPTの威力を実感したようです。これ以降、自分でも活用しているようです。個人で仕事している人にとっての壁打ち役としては最高ですね。

Function calling を使ったデモはまた作ると思います。いろいろアイデア湧いてきています。


この記事が気に入ったらサポートをしてみませんか?