Gemini APIとLINE Bot APIを組み合わせたチャットボット(GeminOwl)の構築

API連携

はじめに

Gemini APIとLINE Bot APIを組み合わせて、ユーザーと対話するLINE Botを作成していきます。


こちらの記事もおすすめ

【Gemini API】網羅的に学ぶ Python Quickstart 日本語版
はじめにこのコードは、GoogleのGemini APIを使用したPythonクイックスタートガイドです。Gemini APIは、Googleの大規模言語モデルにアクセスするためのPython SDKを提供します。このガイドでは、APIのセ...
huggingfaceでStreamlitを立ち上げてLineBotを作る
はじめにこの記事では、Hugging FaceのStreamlitを使用してLINE Botを構築する方法を解説します。まず、必要なライブラリをインポートし、設定ファイルを作成して、その後にメインのBotプログラムを実行する流れになります。...
Messaging APIを用いたPython Line bot
はじめにMessaging APIの使い方はこちら設定ファイルローダー下記のコードは設定ファイルローダーのクラスです。このクラスは、JSON形式の設定ファイルを読み込み、その内容をオブジェクトとして保持します。# config_loader...

全体の構成図

image

  • ユーザー : LINEアプリのユーザーがメッセージを送信します。
  • LINE Platform : LINEのメッセージングプラットフォームがユーザーのメッセージを受け取り、Webhookを通じてシステムに転送します。
  • Ngrok Tunnel : ローカルで稼働しているDockerコンテナへのリクエストを外部から可能にするためのトンネルを提供します。
  • Docker コンテナ : LINE Botのアプリケーションが稼働している環境です。
  • GeminiLineBot アプリ : ユーザーからのメッセージを処理し、応答を生成するアプリケーションです。
  • Gemini API : GoogleのGemini APIにメッセージを送信し、応答を受け取ります。

環境変数の設定

最初のステップは、Gemini APIキー、LINEのアクセストークン、LINEチャンネルシークレット、NgrokのAuthtokenを.envファイルに設定することです。これにより、機密情報の安全な管理が可能になります。


GEMINI_API_KEY=あなたのGeminiAPIキー
LINE_ACCESS_TOKEN=あなたのLineアクセストークン
LINE_CHANNEL_SECRET=あなたのLineチャンネルシークレット
NGROK_AUTHTOKEN=""

Docker環境の構築

次に、docker-compose.ymlファイルを作成して、サービスの設定を行います。ここでは、ビルド設定、環境変数、ボリュームマウント、ポート設定、実行コマンドを定義します。


version: '3.8'
services:
  geminowl:
    build: .
    environment:
      - GEMINI_API_KEY=${GEMINI_API_KEY}
      - LINE_ACCESS_TOKEN=${LINE_ACCESS_TOKEN}
      - LINE_CHANNEL_SECRET=${LINE_CHANNEL_SECRET}
      - NGROK_AUTHTOKEN=${NGROK_AUTHTOKEN}
    volumes:
      - .:/app
    ports:
      - "5000:5000"
    command: python gemini_line_bot.py

Dockerfileの作成

Dockerfileでは、Pythonの公式イメージをベースにして、必要なライブラリをインストールします。


# 基本イメージとしてPythonの公式イメージを使用
FROM python:3.11

# 作業ディレクトリを設定
WORKDIR /app

# 必要なPythonライブラリをインストール
COPY requirements.txt ./
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
RUN pip install -q -U google-generativeai

LINE Botの実装

line_bot_base.pyファイルでは、LINE Botの基本的な機能を実装します。このクラスは、サブクラスによる拡張を想定しています。


# line_bot_base.py
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage

class LineBot:
    def __init__(self, access_token, channel_secret):
        self.line_bot_api = LineBotApi(access_token)
        self.handler = WebhookHandler(channel_secret)

    def create_app(self):
        app = Flask(__name__)

        @app.route("/", methods=['POST'])
        def callback():
            signature = request.headers['X-Line-Signature']
            body = request.get_data(as_text=True)
            app.logger.info("Request body: " + body)

            try:
                self.handler.handle(body, signature)
            except InvalidSignatureError:
                print("Invalid signature.")
                abort(400)

            return 'OK'

        @self.handler.add(MessageEvent, message=TextMessage)
        def handle_message(event):
            self.handle_text_message(event)

        return app

    def handle_text_message(self, event):
        pass  # このメソッドはサブクラスでオーバーライドされることを想定しています

Gemini APIの統合

gemini_line_bot.pyでは、LINE BotにGemini APIを統合し、ユーザーからのメッセージに対して応答を生成します。


# gemini_line_bot.py
from line_bot_base import LineBot
from linebot.models import TextSendMessage
import google.generativeai as genai
import os
from pyngrok import ngrok, conf

# 環境変数から設定を読み込み
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
ACCESS_TOKEN = os.getenv("LINE_ACCESS_TOKEN")
CHANNEL_SECRET = os.getenv("LINE_CHANNEL_SECRET")
NGROK_AUTHTOKEN = os.getenv("NGROK_AUTHTOKEN")

# Ngrok設定
conf.get_default().auth_token = NGROK_AUTHTOKEN
ngrok_tunnel = ngrok.connect(5000)
print("Ngrok Tunnel URL:", ngrok_tunnel.public_url)

# Gemini APIの設定
genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel('gemini-pro')

class GeminiLineBot(LineBot):
    def handle_text_message(self, event):
        user_message = event.message.text
        response = model.start_chat().send_message(user_message)
        reply_text = response.text

        self.line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=reply_text),
        )

if __name__ == "__main__":
    bot = GeminiLineBot(ACCESS_TOKEN, CHANNEL_SECRET)
    app = bot.create_app()
    app.run(port=5000)

ライブラリの依存関係

最後に、requirements.txtファイルに必要なライブラリを記述します。


flask
line-bot-sdk
google-generativeai
pyngrok

Botの起動


docker-compose up --build

image

おわりに

これらの手順に従うことで、Gemini APIを利用した対話型LINE Botを効率的に構築できます。DockerとNgrokの利用は開発プロセスを容易にし、.envファイルによる機密情報の安全な管理を実現します。

リポジトリ

GitHub - Sunwood-ai-labs/GeminiLineBot
Contribute to Sunwood-ai-labs/GeminiLineBot development by creating an account on GitHub.

参考URL

Messaging APIの概要
Messaging APIを使って、ユーザー個人に合わせた体験をLINE上で提供するボットを作成できます。
It’s time for developers and enterprises to build with Gemini Pro
Gemini Pro is now available for developers and enterprises to build AI applications.
Gemini API quickstart  |  Google AI for Developers
Get started with the Gemini API for Developers

コメント

タイトルとURLをコピーしました