串接 OpenAI ChatGPT (2)
这篇教学会会介绍如何将 LINE BOT 搭配 OpenAI ChatGPT,部署到 Google Cloud Functions 里,透过 OpenAI 强大的自然语言处理功能,实作一个 24 小时运作的 LINE 翻译机器人。
快速导览:
本篇文章所需知识
要实作本篇文章的范例,需要先参考以下文章,先建立自己的 LINE BOT 以及注册 OpenAI 账号。
LINE BOT + OpenAI ChatGPT,让 AI 回复消息
参考“LINE BOT 串接 OpenAI ( 让 AI 回复消息 )”,让程序判断“Hi AI:”开头的文字,当文字的开头出现“Hi AI:”的字串时 ( 透过程序全部转成小写 ),就让 OpenAI 进行回复,否则就仍然回传相同的字串。
import openai
from flask_ngrok import run_with_ngrok # colab 使用,本機環境請刪除
from flask import Flask, request
# 載入 LINE Message API 相關函式庫
from linebot import LineBotApi, WebhookHandler
from linebot.models import TextSendMessage # 載入 TextSendMessage 模組
import json
app = Flask(__name__)
@app.route("/", methods=['POST'])
def linebot():
body = request.get_data(as_text=True)
json_data = json.loads(body)
print(json_data)
try:
line_bot_api = LineBotApi('你的 Channel access token')
handler = WebhookHandler('你的 Channel secret ')
signature = request.headers['X-Line-Signature']
handler.handle(body, signature)
tk = json_data['events'][0]['replyToken']
msg = json_data['events'][0]['message']['text']
# 取出文字的前五個字元,轉換成小寫
ai_msg = msg[:6].lower()
reply_msg = ''
# 取出文字的前五個字元是 hi ai:
if ai_msg == 'hi ai:':
openai.api_key = '你的 OpenAI API Key'
# 將第六個字元之後的訊息發送給 OpenAI
response = openai.Completion.create(
model='text-davinci-003',
prompt=msg[6:],
max_tokens=256,
temperature=0.5,
)
# 接收到回覆訊息後,移除換行符號
reply_msg = response["choices"][0]["text"].replace('\n','')
else:
reply_msg = msg
text_message = TextSendMessage(text=reply_msg)
line_bot_api.reply_message(tk,text_message)
except:
print('error')
return 'OK'
if __name__ == "__main__":
run_with_ngrok(app) # colab 使用,本機環境請刪除
app.run()
从下图与 LINE BOT 的对话中可以看出,如果开头没有 hi ai 的聊天消息,就会采用一模一样的消息回复,如果开头有 hi ai 的聊天消息,就会让 OpenAI 进行回复。
部署程序到 Google Cloud Functions
参考“使用 Google Cloud Functions”文章,进入 Google Cloud Functions 建立新专案。
编辑 requiements.txt,加入 LINE BOT 和 OpenAI 函数库。
修改上述的程序码,将其填入 main.py,使其符合 Google Cloud Functions 的格式 ( 只是一些小细节修改 )。
from linebot import LineBotApi, WebhookHandler
from linebot.models import TextSendMessage, StickerSendMessage, ImageSendMessage, LocationSendMessage
import requests, statistics, json, time
import openai
access_token = '你的 LINE ACCESS TOKEN'
channel_secret = '你的 channel_secret'
def linebot(request):
body = request.get_data(as_text=True)
json_data = json.loads(body)
try:
line_bot_api = LineBotApi(access_token)
handler = WebhookHandler(channel_secret)
signature = request.headers['X-Line-Signature']
handler.handle(body, signature)
tk = json_data['events'][0]['replyToken']
msg = json_data['events'][0]['message']['text']
ai_msg = msg[:6].lower()
reply_msg = ''
if ai_msg == 'hi ai:':
openai.api_key = '你的 OpenAI API Key'
response = openai.Completion.create(
model='text-davinci-003',
prompt=msg[6:],
max_tokens=256,
temperature=0.5,
)
reply_msg = response["choices"][0]["text"].replace('\n','')
else:
reply_msg = msg
text_message = TextSendMessage(text=reply_msg) # 設定回傳同樣的訊息
line_bot_api.reply_message(tk,text_message) # 回傳訊息
except:
print('error')
return 'OK'
完成后部署程序,专案名称前方出现绿色勾勾表示部署完成,复制触发的网址。
将网址填入 LINE BOT 的 Message API 里 Webhook URL,点击 Verify 按钮验证,出现 Success 表示 Webhook URL 已经顺利串接,可以开始使用。
回到 LINE BOT 开始聊天,当开头有“hi ai:”时就会透过 OpenAI 的 AI 机器人进行回复,如果聊天语句中要求 AI 机器人帮忙翻译,AI 机器人就会帮忙翻译。
小结
透过 OpenAI 的辅助,更能让 LINE BOT 别具特色,如果再进一步搭配程序逻辑的判断、网络爬虫的应用,或是透过 Dialogflow 的语意判断,才能做出真正有帮助的 LINE 聊天机器人。
微信扫码关注
抖音扫码关注