LINEのスタンプが送りたい
LINE messenger API x GPT には結構可能性を感じていて、過去二つほどリリースしました
学習アプリ
マルチキャラクターchat
LINE BOT とGPTを組み合わせていて、「あ〜ここでGPTスタンプ送ってきたら面白いのなぁ」 と思いました。思ったらすぐTry & BuildできるのがGPT時代の良いところです。
スタンプ送ってみた
一部スタンプの著作権的関係の問題があるかもしれないので、あくまで個人の検証用です。
LINE messenger API では、パッケージIDと、スタンプIDを指定することで、Stiker(スタンプ)をPUSHメッセージとして送信することができます。
MessageにパッケージIDとStickerIDを設定するだけです。
var message = {
type: 'sticker',
packageId: packageId,
stickerId: stickerId
};
問題は、このIDをどこから取ってくるか、です。
ランダムに設定するのが手っ取り早いですが、それでは文脈に沿ったスタンプになりません。
方法は二つ考えました。
- Stamp に、事前的に感情のキーワードを人力で設定する
- スタンプの解析自体をAIに行ってもらう
後者について調査するとGoogle Cloud Vision というサービスが一番良さそうです。
Google Cloud Vision
画像を送ると、その画像を解析して以下のような情報を提供してくれます
- 画像内のテキストを検出する
- ファイル内のテキストを検出する(PDF / TIFF)
- 画像内の手書き文字を検出する
- 顔の検出
- 画像にラベルを付与する
この中の「画像にラベルを付与」するを使ってみました。
以下のGoigleのサイトにある例では、風景を表現するラベルを付与してくれています。なかなか面白いですね。
これをLINEのスタンプで実施しますと、例えば、パッケージID:446 スタンプID:1988の彼は、以下のようなラベルが付与されました
注:どうも日本語では上手くいかなかったので取り急ぎ英語のラベルです。
これをスプレッドシートにパッケージIDとスタンプIDとともに保存します。
GPTとの連携
ここでGPT登場です。モデルは3.5Turboで、以下のようにPrompt打ちます。
"prompt": `ユーザーのメッセージ: "${userMessage}"\nスプレッドシートのデータ:
\n${spreadsheetData}\n\nこの日本語のメッセージを英語で解釈してください。
そしてスプレッドシートの中のキーワードを一つだけランダムに利用してユーザーへの返信を生成してください。
その際に利用したキーワードが対応するパッケージIDとスタンプIDを必ず記載してください
この後返ってきたレスポンスから正規表現で、パッケージIDとスタンプIDを取り出し、LINE messanger APに渡すという動きです。
結果こんな感じになります。
プロンプトをもっと上手く書けば、もっともっといい感じで返信してくれる気がします。
課題とまとめ
GPTの使い方によっては、スタンプさえ使いこなすBOTができそうです!
いろいろ課題ありますので、引き続き検証していきます。
課題
- Google Cloud Vision API、LINE PUSHメッセージも一定量からは有償プランになってしまいます。
- スタンプを画像解析する行為が"あり"なのか要調査です。
環境
- GAS
- Google Cloud Vision API
- LINE messenger API