huggingfaceでStreamlitを立ち上げてLineBotを作る

Hugging Face

はじめに

この記事では、Hugging FaceのStreamlitを使用してLINE Botを構築する方法を解説します。
まず、必要なライブラリをインポートし、設定ファイルを作成して、その後にメインのBotプログラムを実行する流れになります。


こちらのサイトもおすすめ

Youri-7b-chat-gptqを使ったLinebotの構築
はじめにこちらの記事の続きですMessaging APIの使い方はこちらこのコードは、YouriBot というLINE Botを構築するためのPythonクラスを定義しています。このクラスは、LINE メッセージイベントを処理し、AIモデル...
Youri-7b-chat-gptqをGoogleColabでちょっとだけ遠坂凛ぽく喋らせてみた
はじめに以下は、Google Colabで「youri-7b-chat-gptq」を使用して、「遠坂凛」のように話すAIを設定する手順のステップバイステップの解説です。Google Colabはオンラインで実行できるJupyterノートブッ...
Messaging APIを用いたPython Line bot
はじめにMessaging APIの使い方はこちら設定ファイルローダー下記のコードは設定ファイルローダーのクラスです。このクラスは、JSON形式の設定ファイルを読み込み、その内容をオブジェクトとして保持します。# config_loader...

Streamlitのセットアップ

StreamlitはPythonで書かれたWebアプリケーションを簡単に作ることができるフレームワークです。以下のコードではStreamlitを使用して設定ファイルを作成するUIを提供しています。

Streamlit • A faster way to build and share data apps
Streamlit is an open-source Python framework for data scientists and AI/ML engineers to deliver interactive data apps – in only a few lines of code.

import streamlit as st
import json
import subprocess

# タイトルの設定
st.title("Settings Configuration")

上記のコードはStreamlitをインポートし、アプリケーションのタイトルを設定しています。

設定ファイルのパスの指定

次に、設定ファイルのパスを指定します。


# 設定ファイルのパス
config_file_path = 'settings.json'

ここでは、設定を保存するJSONファイルの名前をsettings.jsonとしています。

設定入力用のフォーム作成

ユーザーが設定情報を入力できるようにフォームを作成します。


# 設定入力用のフォームを作成
with st.form("settings_form"):
    st.write("Please enter the configuration settings:")
    # ここで設定項目を入力するためのテキストボックスを設定しています。
    ...

フォーム内で、ngrokのauthtoken、LINE Botのアクセストークン、チャンネルシークレットを入力するためのテキスト入力フィールドを提供しています。

設定の保存

フォームが送信されたら、入力された設定をsettings.jsonとして保存します。


# フォームが送信された場合、入力された設定をJSONファイルとして保存
    if submitted:
        settings = {
            "NGROK_AUTHTOKEN": ngrok_authtoken,
            "LINE_ACCESS_TOKEN": line_access_token,
            "LINE_CHANNEL_SECRET": line_channel_secret
        }
        with open(config_file_path, 'w') as config_file:
            json.dump(settings, config_file, indent=4)

        st.success("Settings saved successfully!")

メインプログラムの実行

最後に、設定が保存された後にmain.pyをサブプロセスとして起動します。


# `main.py`をサブプロセスとして起動
        subprocess.run(["python", "main.py"])

全体コード


import streamlit as st
import json
import subprocess

# タイトルの設定
st.title("Settings Configuration")

# 設定ファイルのパス
config_file_path = 'settings.json'

# 設定入力用のフォームを作成
with st.form("settings_form"):
    st.write("Please enter the configuration settings:")
    ngrok_authtoken = st.text_input("NGROK_AUTHTOKEN")
    line_access_token = st.text_input("LINE_ACCESS_TOKEN")
    line_channel_secret = st.text_input("LINE_CHANNEL_SECRET")
    submitted = st.form_submit_button("Submit")

    # フォームが送信された場合、入力された設定をJSONファイルとして保存
    if submitted:
        settings = {
            "NGROK_AUTHTOKEN": ngrok_authtoken,
            "LINE_ACCESS_TOKEN": line_access_token,
            "LINE_CHANNEL_SECRET": line_channel_secret
        }
        with open(config_file_path, 'w') as config_file:
            json.dump(settings, config_file, indent=4)

        st.success("Settings saved successfully!")
        # `main.py`をサブプロセスとして起動
        subprocess.run(["python", "main.py"])

main.pyの解説

main.pyでは、Botのメインロジックが記述されています。

main.py部分の解説はこちら。

Messaging APIを用いたPython Line bot
はじめにMessaging APIの使い方はこちら設定ファイルローダー下記のコードは設定ファイルローダーのクラスです。このクラスは、JSON形式の設定ファイルを読み込み、その内容をオブジェクトとして保持します。# config_loader...

# main.py
# 必要なクラスを他のファイルからインポートします。
from config_loader import ConfigLoader
from ngrok_manager import NgrokManager
from line_bot import LineBot
# from youri_bot import YouriBot

# このスクリプトが直接実行された時だけ、以下のコードが実行されます。
if __name__ == '__main__':
    # 設定ファイル 'settings.json' を読み込むために ConfigLoader クラスを使用します。
    config_loader = ConfigLoader('settings.json')

    # 設定ファイルから読み込んだ設定を取得します。
    settings = config_loader.settings

    # Ngrokを管理するためのクラスをインスタンス化し、ngrokのAuthtokenを渡します。
    ngrok_manager = NgrokManager(settings['NGROK_AUTHTOKEN'])

    # ngrokによって生成されたWebhook URLを出力します。
    print(f"Webhook URL: {ngrok_manager.webhook_url}")

    # LINE Botのインスタンスを作成します。これには、設定から取得したアクセストークンと
    # チャネルシークレットを渡します。
    bot = LineBot(settings['LINE_ACCESS_TOKEN'], settings['LINE_CHANNEL_SECRET'])
    # bot = YouriBot(settings['LINE_ACCESS_TOKEN'], settings['LINE_CHANNEL_SECRET'])

    # Flaskアプリケーションを作成します。
    app = bot.create_app()

    # アプリケーションを起動します。これにより、Webサーバーが起動し、
    # LINEからのリクエストを待機する状態になります。
    app.run()

最終的に、Flaskを使用してWebサーバーを起動し、LINEからのリクエストを待機する状態になります。

デモサイト

StreamlitLineBot - a Hugging Face Space by MakiAi
Discover amazing ML apps made by the community

リポジトリ

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

コメント

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