内藤 裕二/ 2023年 12月 14日/ 技術

こんにちは!内藤です!
札幌はぐっと気温も落ち、ついに雪が降り始めました。
早起きして雪かきをする季節がやってきました・・・

NorthTorch株式会社では、週に一日出社日があります(札幌だけ)
午前中に事務所に集まって軽く事務所を清掃するのですが、冬になり天気が悪くなってくると出社を取りやめています。
前々日から前日に天気予報を見て決めていたのですが、作業に追われて直前の連絡になってしまうことも多い状況でした。

上記を避けるためにSlackのリマインダを設定していたのですが、そもそも出社できるかどうかも ChatGPT にざっくり判断させてしまえ、というのが今回の趣旨です。

TL;DR;

Webページ経由のChatGPTはすごく賢い
API経由だとイマイチ
天気予報情報さえとれてくれば、プロンプトを工夫すると出社日の判断程度はできる

紆余曲折

まずは ChatGPT を Webページから叩いてみる

Webページから ChatGPT に聞いてみると、天気予報を検索して一発で回答してくれます。
(モデルは GPT-4 です)

札幌市西区琴似にある事務所に社員が出社が可能かどうかを検討しています。
下記の条件を満たす回答を提示してください。

---

・対象の日時は2023年11月24日 10:00~13:00とする
・回答は日本語で記述する
・出社が可能かどうかの判断を最初に記載する
・出社が可能かどうかの判断の根拠を提示する
From a quick search, here's what I discovered.

現在の情報に基づき、札幌市西区琴似にある事務所への出社は可能です。

根拠は以下の通りです:

天気情報:2023年11月24日10時から13時の間、札幌市西区の天気は「晴れ」から「曇り」へと変わります。この期間中、気温は5.7℃から3.0℃とやや寒いものの、降雨や降雪の予報はありません​​。
交通情報:交通情報に関する最新の情報は入手できませんでしたが、特別な交通規制や事故の報告がない限り、通常の交通状況を想定することが妥当です。
以上の情報を踏まえ、特別な事情がない限り、社員の出社は問題ないと考えられます。ただし、最新の交通情報や突発的な気象変化には注意が必要です。また、冬期の札幌においては、天候や道路状況が急変する可能性があるため、出社前に最新情報の確認をお勧めします。

なかなか賢い回答です。

API経由で叩くと・・・?

ところが。

ウェブ検索ができるChatGPTの実装方法【Python / LangChain / Google / Bing】を参考に、LangChain 経由して GPT-4 で同じプロンプトを流し込んでみると、あっという間にトークンがあふれてしまいます。

様子を見ていると、
・検索の結果をすべてトークンに追加して問い合わせをしている
・検索の仕方がすごくへたくそ(同じようなキーワードで、引っかかってる結果も同じようなサイトになっている)
という状況のようです。

Googleのカスタムサーチエンジン側を調整してみましたが、あまり状況変わらず。

天気予報を取得する

出社するかどうか、いままで人間が判断していたわけですが、それも天気予報を見ての判断だったわけです。
人間だって気温と天気と降水確率くらいをざっと見て判断している程度なので、最初から天気予報を ChatGPT に渡してしまう方向に切り替えました。

天気予報は使いやすい形でAPI提供してくださっている方もいます。(天気予報 API(livedoor 天気互換)
ただ、せっかく自分で実装するということで、下記の記事を参考に、一次情報である気象庁のAPIからデータをとってくるようにしてみます。

リンク先にもありますが、気象庁の返してくるデータはかなり扱いにくい構造のjsonデータで、汎用的に作るのは大変そうでした。
今回は弊社事務所近辺の天気予報だけわかれば良いので、ざっくりと決め打ちで作成しました。

気象庁の一番詳細な予報は直近3日分程度のようですので、出社日の3日前に処理を実行するようにします。

Googleカレンダーから出社日を取得

弊社の出社日は、Googleカレンダーの社内共有用カレンダーに予定として入っています。
向こう一週間程度の予定を確認し、出社日の予定が入っていたら、天気予報の判断結果を返すようにしてみます。

上記を参考に、Python + Django の社内システムの機能として搭載してしまうことにします。

ChatGPT のプロンプト

出社するかどうかの判断は、最終的には人間が判断します。
なので、プロンプトも特にこだわらず、下記を使用しています。
※波カッコの部分は天気予報データで置換する

札幌市西区琴似にある事務所に社員が出社が可能かどうかを検討しています。
当日の予報が下記の時、出社が可能かどうかを判断してください。

【天気予報】
・天気予報:{weather_str}
・最低気温:{tempsMin}℃
・最高気温:{tempsMax}℃
・降水確率:{pop}%
・風:{wind}

【回答の条件】
・日本語で回答する
・判断結果を最初に記載する
・判断の根拠を提示する

また、叩いてみたらモデルは「gpt-3.5-turbo」で全く問題ない結果が返ってきましたので、GPT-3.5 を使用するようにしました。

最終的に結果をSlackに投稿する

この部分はすでに社内システムで実装済みなので、今回は新規実装なしでした。
結果的に、毎週水曜日の11時頃にチャットが流れてくるようになりました!

Slackへの投稿結果

感想

思い立ってから動作するようになるまで、半日程度でした。
社内ツールなので構成にあまり気をつかわずに作成したとはいえ、このくらいの時間で思い付きが形になるのは楽しいですね。

個人的には、AIと人間の役割分担は「AIが自動で70点程度の回答を用意して、人間が残り10点底上げして最終結果にする」くらいがちょうどよいと感じています。
AIに100点を求めるのは調整に手間がかかって無駄が多いので、ある程度の選択をAIで用意したら、最後の判断は人間が責任を負う形でシステム化していくのが良い落としどころではないかと考えています。

メンバ常時募集中です!

NorthTorch株式会社では一緒に働くメンバを、常時募集しています!
詳しくはこちらをご覧ください!

参照URL