🫠

Googleの「Gemini」をLINEBotにしてみました。

2023/12/23に公開

出来たもの

使ったもの

  • Python
    • Flask (ウェブアプリ用)
    • line-bot-sdk (LINEBot用)
    • google-generativeai (Gemini用)
  • ngrok (公開用)

コード

色々学ぶ編

まずGeminiの基本的なコードに関しては次のページを御覧ください。
https://ai.google.dev/tutorials/python_quickstart
そしてLINEBotに関して、今回参考にした記事・ページは次のとおりです。
https://www.tomotaku.com/line-repeat-bot/
https://qiita.com/yuta-2001/items/914fcaee61e80a5ee1ce
ありがとうございます。

動いているコード

config.py
LINE_CHANNEL_SECRET = "LINEチャンネルのシークレット"
LINE_CHANNEL_ACCESS_TOKEN = "LINEのAPIのアクセストークン"
GEMINI_API_KEY = 'GEMINIのAPIキー'

↑これは動かすために必要な情報を書いておくところです。

main.py
# ライブラリのインポート
import config
from flask import Flask,request,abort
import google.generativeai as genai

from linebot import (
    LineBotApi,WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent,TextMessage,TextSendMessage,
)

app = Flask(__name__)

# geminiを使うための用意
gemini = genai.configure(api_key=config.GEMINI_API_KEY)

# テキストを受け取って返答を生成する関数
def get_response(question):
    model = genai.GenerativeModel('gemini-pro')
    response = model.generate_content(question)
    return response.text

# LINEBotの用意
line_bot_api = LineBotApi(config.LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(config.LINE_CHANNEL_SECRET)

@app.route("/callback",methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']

    body = request.get_data(as_text=True)
    app.logger.info(f"Request body: {body}")

    try:
        handler.handle(body,signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'

# メッセージを受け取ったときに実行されるやつ
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    if event.reply_token == "00000000000000000000000000000000":
        return
    line_bot_api.reply_message (
        event.reply_token,
        TextMessage(text=get_response(event.message.text))
    )

if __name__ == '__main__':
    app.run(host='localhost',port=8000)

こんなもんですかね。

公開

python main.py

でボット本体を実行、

ngrok http 8000

でngrokを使って公開、表示されたURL+/callbackをwebhooksのURLに設定してください。

以上

以上になります。分かりにくくても文句言わないでください。ChatGPTにでも聞いてくださいよ。

Discussion