【LINEBot制作シリーズ2】GeminiとGASで作るAI LINE Bot編

📄
本記事についての注意書き
  • 応答を作成させるAIには「Gemini Pro」を使用します。
  • Gemini Proは無料で利用可能ですが、規約上、18歳未満は使用できません。
  • 章立ての構成です。各章の中身は▶︎をクリックで展開できます
  • 極力専門用語は避けていますが、よくわからない言葉に出くわした際は都度調べること

Chap.0 成果物について


今回は無料枠を超過するリスクがあるため、QRコードの公開は控えます。
こんな感じに動きます
notion image

Google謹製の大規模言語モデル 「Gemini」

notion image
OpenAI謹製の言語モデルであるGPTに対抗する形でGoogleリリースされたのが、「Gemini」です。
Geminiのモデルサイズとその役割は次のようになっています。
⚠️
Geminiのモデルサイズ
  • Gemini Ultra - GPT4を上回る高性能な大型モデル
  • Gemini Pro - ULtraとNanoの中間的な立ち位置
  • Gemini Nano - スマホに搭載できる軽量モデル
今回はGemini Proが搭載されたLINE Botを制作します。

Gemini Proの特徴

性能面はGPT-4を上回るとされています(諸説あり)。その他にGemini Pro特徴としては以下の通りです。
  • 2024年1月現在、一般公開はされておらず、開発者向けにAPIとして提供
  • (無料枠を超過しない限り)無料で使用可能
  • 英語版のGoogle Bardで利用可能
Gemini Proが搭載されたLINE Botを制作します。

Chap.1 前提知識


notion image
この図は日常的に利用されるスマホアプリに代表されるClientAPIサーバーの関係を表したものです。そして両者はこのような関係です。
ClientAPIサーバーの関係
1️⃣ClientAPIサーバーに対し、リクエストを送ります
2️⃣リクエストを受け取ったAPIサーバーClientに対してレスポンスを返します。

リクエストとレスポンス

ここで突如出てきた、リクエストとレスポンスについて説明します。これを日本語に直すと「要求と応答」となります。
方向
含まれる情報
リクエスト
Client→APIサーバー
特定のデータの要求 何らかの処理の要求
レスポンス
APIサーバー→Client
要求されたデータそのもの 要求された処理の実行結果(うまくいったorいかなかった)
もう少しわかりやすくするため、具体例で説明します。

具体例1. Twitterアプリの例

🐦
Twitterでタイムラインを見るときのClient(スマホ)APIサーバーの働き
1️⃣ユーザーがツイッターアプリを開く
2️⃣タイムラインフィードを取得するリクエストがスマホからAPIサーバーに送られる
3️⃣リクエストを受けたAPIサーバーからタイムラインフィードのデータがスマホに送られる
4️⃣タイムラインフィードがスマホに表示される

今回作成するGASスクリプトの例

では今回作成するアプリケーションではどうでしょうか?
作成するGASアプリケーションの働き
1️⃣ メッセージの受取: doPost()でユーザーからのLINEメッセージイベントを受け取る
2️⃣応答の生成: API(Gemini Pro)にリクエストを送る
3️⃣生成された応答の受け取り: Gemini Proからのレスポンスを受け取けとる
4️⃣メッセージの送信: LineMessagingAPIにユーザーへのメッセージ送信を要求するリクエストを送る
GASアプリケーションは、前回と同様にClientの役割を果たします。part.1にない点としてLine Messaging APIに加えて、Gemini ProのAPIの両方にアクセスしています。
一般的に馴染みがないAPIサーバーの働きについて解説してます。

Chap.2 Gemini Proのセットアップ


Google AI Studioにアクセス。利用規約に同意し、進みます。
notion image

API Keyの作成

Create API key in new projectを選択します。 キーが発行されるので、これをクリップボードにコピーしておきます。
キーが追加されていることを確認してください。
notion image
これでGemini Proが使えるようになりました。
Google AI Studioというツールで簡単にセットアップできます。

Chap.3 Gemini ProのAPIを叩く

手始めに手軽なブラウザで、Gemini ProのAPIを叩いてみましょう

Chap.4 GASでGemini ProのAPIを叩く

今度はGASでGemini ProのAPIを叩いてみましょう

Chap.4 GeminiにLINE応答させる

完成版のコードを見る


1/ ユーザーからのメッセージをGeminiに渡す

Chap.3と同じ容量でユーザーからのメッセージをそのままGeminiにプロンプトとして与えると応答が得れます

メッセージを取得する

メッセージをGeminiに渡す

ユーザーからのメッセージをGeminiにプロンプトとして与えます。

2/ Geminiからの応答をユーザーに返信する

各種プロパティの定義

LineMessagingAPIからメッセージを送るために必要な各種プロパティを定義します。
  • lineAccessToken
  • lineEndpoint
具体的なやり方はpart.1の説明を参照してください

メッセージを送信するメソッドの定義

part1で定義したメソッドsendLineMessage()をそのまま流用します。
いよいよGeminiに応答してもらいます。

Chap.5 Geminiをチューニングする

より望ましい対応をさせるようにGeminiの応答をカスタマイズします。
 

© Yusuke Sugino 2024 - 2025