前回の記事はこちら。 pancokeiba.hatenablog.com
llama-2-70b-chat を使用しているが、ChatGPT のように日本語で返してくれるわけではなさそうだ。日本語で聞いた質問は理解してくれるものの回答が英語限定の様子(執筆時点)。
ということで、今回のテーマはこちら。
llama-2-70b-chat の返答を翻訳して LINE に送る
googletrans を利用し、Llama 2 から受け取ったメッセージを日本語に翻訳する実装を追加した。 出来上がった main.py はこちら。
from flask import Flask, request, abort from linebot.v3 import ( WebhookHandler ) from linebot.v3.exceptions import ( InvalidSignatureError ) from linebot.v3.messaging import ( Configuration, ApiClient, MessagingApi, ReplyMessageRequest, TextMessage ) from linebot.v3.webhooks import ( MessageEvent, TextMessageContent ) import replicate import os from googletrans import Translator app = Flask(__name__) # LINE のチャネルアクセストークン設定 configuration = Configuration(access_token=os.environ['CHANNEL_ACCESS_TOKEN']) # LINE の秘密鍵設定 handler = WebhookHandler(os.environ['CHANNEL_SECRET']) @app.route("/callback", methods=['POST']) def callback(): # get X-Line-Signature header value signature = request.headers['X-Line-Signature'] # get request body as text body = request.get_data(as_text=True) app.logger.info("Request body: " + body) # handle webhook body try: handler.handle(body, signature) except InvalidSignatureError: app.logger.info("Invalid signature. Please check your channel access token/channel secret.") abort(400) return 'OK' @handler.add(MessageEvent, message=TextMessageContent) def handle_message(event): with ApiClient(configuration) as api_client: # Llama2 実行 output = replicate.run( "meta/llama-2-70b-chat:35042c9a33ac8fd5e29e27fb3197f33aa483f72c2ce3b0b9d201155c7fd2a287", input={"prompt": event.message.text} ) output_ilst = list(output) output_str = ''.join(output_ilst) # 翻訳 translator = Translator() translated = translator.translate(output_str, src='en', dest='ja').text line_bot_api = MessagingApi(api_client) line_bot_api.reply_message_with_http_info( ReplyMessageRequest( reply_token=event.reply_token, messages=[TextMessage(text=translated)] ) ) if __name__ == "__main__": app.run()
動作確認
英語で聞いても日本語で返してくれる。
ちなみに、Replicate を見ると Output は英語のため、期待通り googletrans が効いていることがわかる。