🤯

Cloudflare Workersでコピペだけで作れるLINE Bot(手軽にAIを入れる編)

2024/08/17に公開

前回はCloudflare WorkersでLINE Botを作成しました。

https://zenn.dev/line_dc/articles/cloudflare-workers-line-echo-bot

Cloudflare Workersであれば、LINE Botがコピペで作れることがお分かりいただけたと思います。

実はCloudflare Workersには機械学習モデルをCloudflareのネットワーク上で動かすことができるWorkers AIという機能があります。

https://developers.cloudflare.com/workers-ai/

Cloudflare Workers AIについては、エバンジェリストの亀田さんが書かれた以下の記事で詳細に解説されています。

https://zenn.dev/kameoncloud/articles/707b3b623bdb87

このWorkers AIは追加のライブラリをインストールすることなく、Workers上で無料でAIと連携したアプリケーションを作成することができます。

というわけで、今回は前回作成したオウム返しのLINE BotにWorkers AIのLLMを使ってAIと会話するLINE Botを作成してみます。

なお、前回作成したソースコードを作成している前提で進めます。

https://zenn.dev/line_dc/articles/cloudflare-workers-line-echo-bot

Workers AIのバインディングを追加

Workers AIにアクセスするために、Workersの設定ファイルでAIのバインディングを追加する必要があります。

wrangler.toml ファイルに以下の設定を追加します。

wrangler.toml
[ai]
binding = "AI" #available in your worker via env.AI

AIを呼び出す関数を追加

まずは、LINEから送られてきたメッセージにAIを呼び出すための処理を追加します。

前回作成した replyMessage 関数の上に以下の関数を追加します。

    /**
     * answerAi: AIに質問を投げる
     * @param {string} question the question to ask the AI
     * @returns {string} the answer from the AI
     */
    async function answerAi(question) {
      const answer = await env.AI.run(
        '@cf/meta/llama-3-8b-instruct',
        {
          messages: [
            {
              role: 'user',
              content: question
            }
          ]
        }
      );
      return answer.response;
    }
    // ==========ここまで新規追加==========

    /**
     * replyMessage: LINEにメッセージを返信する 
     * @param {string} replyToken the reply token to send back to LINE
     * @param {string} message the message to send back to LINE
     */
    async function replyMessage(replyToken, message) {
      ...
    }

メッセージハンドリングの変更

次に先程作成したAIにメッセージを返答する関数をメッセージハンドリングの処理に追加します。

fetch 関数内にあるWebhookのメッセージハンドリング処理(80行目あたり)を以下の用に書き換えます。(-の行を削除、+の行を追加)

    async function fetch(request, env) {
      ...
      if (reqBody.events) {
        for (const event of reqBody.events) {
          if (event.type === "message" && event.message.type === "text") {
-            await replyMessage(event.replyToken, event.message.text);
+            const aiReply = await answerAi(event.message.text);
+            await replyMessage(event.replyToken, aiReply);
          }
        }
      }
      ...
    }

動かしてみる

ここまでできたら、実際にLINEアプリからメッセージを送信してみます。

メッセージを送信して以下の通りAIが返答できことが確認できれば成功です。

メッセージの返信に使用する replyTokenは1分以内に使用する必要がありますので、それ以上にモデルの結果が遅い場合は返信されないことがあります。

まとめ

今回はCloudflare Workers AIを使ってLINE BotにAIを組み込む方法を紹介しました。

Workers AIではビルトインのモデルを使用して手軽に推論を行うことができますが、入力によっては返答が遅くなり、返答が返ってこないこともあります。

ただ、Workers AIは無料で利用することができるので、手軽にAIを使ったLINE Botを簡単に作りたい方におすすめです!

LINE Developer Community

Discussion