構成
トップ画像にあるような、構成にすることにしました!
まずはLineの公式アカウントを作ります。
Line公式アカウントを作ることでwebhookやAPIが利用できるようになります。
webhookとは
こちらでLineからの通知を受け取るURLを用意して登録するとそのアカウントにLineが来た際にWebサーバーに通知が来るサービスです。
これによってWebサーバーはユーザーからのLineメッセージや画像を受信できます。
webhookで送られる情報の中には本当にLineからのメッセージなのかを検証する仕組みや、メッセージに返信するためのパスワードのような情報も入っています😃
このメッセージをopenAIのAPIに送信するとユーザーが送ったメッセージに対してAIが考えた返信が取得できます。
これをユーザーに返信するだけでユーザーからするとAIとラインしているような状態になります👍
これが最低限の機能です。
今回はここにユーザーとの会話の記憶機能やネット検索機能、画像生成、編集機能をつけていきます。
API
APIはwebhookより一般的ですが、webhookの逆で他で稼働しているシステムに対して問い合わせることのできるサービスになります。
このAPIには色々なものが存在します。今回は下記のAPIを組み合わせて使います。
- openAIの提供しているAIと話せるAPI
- 作って欲しい画像の情報を送ると画像を生成してくれるAPI
- 検索ワードを渡すとネット検索して結果のURLを返してくれるAPI
APIを使うことで他の人の提供している専門的なサービスを簡単に自分のサービスに組み込むことができます😃
ただしAPIには使用するのに費用が必要なものや使用回数に制限があるものもある為、注意が必要です!
Webサーバーの実装
今回のサービスで肝になる部分は、ユーザーのメッセージをどのようにAPIの呼び出しに繋げるかという部分になります。
例えば先述した、ユーザーの問い合わせに対して常にAIにメッセージを投げて回答を返すだけであれば呼び出すAPIは一択で簡単に実装できます。
しかし、今回はAIの知らない情報はWeb検索して回答するようなものにしたいのです。
例えば…
ユーザー『今日の上尾市の天気予報はどんな感じ?』
というようなメッセージに対して、
1.webサーバーはweb検索のAPIを呼び出す
2.帰ってきたURLをスクレイピングし、情報を取得
3.情報とメッセージを一緒にAIに渡して適切な回答をユーザーに返す
という流れになります。
つまり、『今日の上尾市の天気予報はどんな感じ?』に対してそのままAIに投げかけるか、追加の情報を取得して一緒にAIに投げかけるかという場合わけが必要になります。
このようなプログラムでは実装が難しそうな場合わけをAIがやってくれる機能がfunction callingです!
次回は実際のプログラムを簡単にご紹介します😃