🕶️
LINE公式アカウントの応答をLLMで知能化!
0. 背景
公式アカウントを運営する際に、こんな課題はございませんか?
- 問い合わせが多く、スタッフが足りない
- 営業時間外に来るメッセージに、即時に対応できない
- 24時間365日のサポート体制を構築したいが、コストがかさむ
- …
数行のコードで構築できるシステムをご紹介したい
1. Azure OpenAI
Azure OpenAI は、Microsoft が提供する Azure 上のサービスで、OpenAI の言語モデル(GPT シリーズ)と Azure のセキュリティ、スケーラビリティを組み合わせ、AI アプリケーションを簡単に構築できます。
メリット
- 大規模言語モデル:GPT-4 などの高度な言語モデルで複雑な自然言語処理をサポート
- セキュリティ:企業レベルのセキュリティ基準で、顧客のデータの安全性を確保する
- Azure サービスとの統合:Azure Cognitive Services や Machine Learning とのシームレスな統合が可能
2. システム構成
Line Message API
- LINE Messaging APIは、エンドユーザーが送信したメッセージをLINEプラットフォーム経由でボットサーバーに転送し、ボットサーバーがそのメッセージに応じてREST APIを使ってユーザーに自動返信を行う仕組みです。
- これにより、企業や開発者は双方向のコミュニケーションを効率的に自動化し、24時間365日のサポートを実現することができます。
メッセージのやり取り
- エンドユーザーがメッセージを送信
- Webhookでメッセージがボットサーバーに送信される
- ボットサーバーがREST APIを使って応答
-
エンドユーザーが返信を受け取る
- ここにボットサーバーやシステムだけ組み込む必要があります。
自動返信システム
-
LINEでユーザーから送信されたメッセージをリッスン(
MessageEvent
) -
事前に指定された応答のスタイルを読み込む(この例では「友好的なスタイル」(
get_friendly_prompt
)を使用) -
LLMを使用して返信を生成し、ユーザーの入力とプロンプトを組み合わせて対話に影響を与える(
conversation.run
) -
reply_token
を使用して、LINE Messaging API を通じて生成された返信メッセージをユーザーに送信する@handler.add(MessageEvent, message=TextMessageContent) def handle_message(event): # ユーザーから送信されたメッセージを取得 user_message = event.message.text # ユーザーのメッセージをログに出力 app.logger.info(f"ユーザーからのメッセージを受信しました: {user_message}") try: # Prompt スタイルを読み込む prompt_style = get_friendly_prompt() # LLM とメモリを使用して返信を生成 # 会話前に Prompt スタイルを追加して対話に影響を与える response = conversation.run(input=f"{prompt_style}\nUser: {user_message}") # ユーザーに生成されたメッセージを返信 with ApiClient(configuration) as api_client: line_bot_api = MessagingApi(api_client) line_bot_api.reply_message_with_http_info( ReplyMessageRequest( reply_token=event.reply_token, messages=[TextMessage(text=response)] ) ) app.logger.info(f"メッセージが正常に送信されました: {response}") except Exception as e: app.logger.error(f"メッセージの送信に失敗しました: {str(e)}")
-
Azure API KEYを用意した上、LangChainにより記憶があるボットを構築する
import os from dotenv import load_dotenv from langchain.chat_models import AzureChatOpenAI load_dotenv() def create_llm_client(temperature=0.7, streaming=False) -> AzureChatOpenAI: return AzureChatOpenAI( openai_api_key=os.getenv("AZURE_OPENAI_API_KEY"), openai_api_version=os.getenv("API_VER"), azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"), deployment_name=os.getenv("DEPLOYMENT_NAME"), temperature=temperature, streaming=streaming ) llm = create_llm_client() memory = ConversationBufferMemory() conversation = ConversationChain(llm=llm, memory=memory)
Webhookリクエストの正当性を認証する
-
LINEのWebhookイベントを受信し、以下の理由で署名の検証する
- リクエストの正当性確認
- データの改ざん防止
@app.route("/webhook", methods=['POST']) def webhook(): 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: app.logger.error("無効な署名です。チャンネルシークレットを確認してください。") abort(400) except Exception as e: app.logger.error(f"エラーが発生しました: {str(e)}") abort(500) return 'OK'
3. システム検証
まだ本格的なクラウドサービスを導入していない場合や、迅速にLINE Messaging APIの動作を確認したい場合どのように検証したほうがいいのか?
ngrokで検証する
ngrokは、ローカル環境で動作しているサーバーを一時的にインターネット上に公開できるツールです。これにより、LINE公式アカウントとボットサーバーの通信テストを簡単に行えます。詳細は以下に参照してください!
- ngrokからもらったURLを最後の
webhook
まで以下のMessaging APIのWebHookに登録し、有効化にする
- ngrokを起動した上、
app.py
を実行する - 以下のように使えると思う
- 常に既読をしたい場合は以下の手順に参照
まとめ
LLMによるLINE公式アカウントの知能化により、対話体験が大幅に向上できるし、24時間対応が可能になります。引き続き、LLMに関する新しい応用例を更新し、ユーザー体験をさらに向上させることに努めていきます。
Discussion