#LINE #聊天機器人 #GCP #ChatGPT #LINE聊天機器人2 #後記
LINE 聊天機器人 - 結合ChatGPT 打造你的隨身智能小幫手
在前一篇文章中,講述了 LINE BOT 設定 & Cloud Functions 部署,並做出了模仿你說話的聊天機器人,但總覺得還有更多好玩的…
不知道大家是不是和我一樣懶,身為一個 ChatGPT 的愛用者,當在使用手機的時候,總覺得要去開瀏覽器再去使用 ChatGPT 有點麻煩,所以這篇文章就登場了!
️ ✍ 番外篇:透過爬蟲與 ChatGPT ,打造個人股市的消息整理小幫手
Journey 🥾 :
流程概觀 🔍
1. LINE BOT 設定、GCP Cloud Functions 開發, 部署與串接
2. 註冊 OpenAI API,獲取 Keys 🔑
3. 設定 ChatGPT API Key 環境變數
4. OpenAI API 調用
5. 領域展開:ChatGPT-J 😎
流程概觀 🔍
步驟 1:LINE BOT 設定、GCP Cloud Functions 開發, 部署與串接
我這邊列出要有的東西,如果是一步一步跟到這的朋友,當然也可以拿前一篇建好的 Channel & Functions 去微調使用,但我偏好都建立新的去使用,也可以順便再熟悉下前一章的內容
- 建立一個 Messaging Channel
- 建立一個 GCP Cloud Functions
因為這步驟內容與前一篇文章重複,如果還不了解這步驟的朋友,建議可以先參考前一篇文章呦👇
步驟 2:註冊 OpenAI API,獲取 Keys 🔑
再來,我們要註冊並取得一個 API Key
2.1 ) - 登入註冊一個OpenAI帳戶
2.2 ) - 點擊 View API keys
2.3 ) — 點擊 Create new secret key
2.4 ) — 自由輸入 key Name
2.5 ) — 複製你的key,後面會用到 🔑
步驟 3:設定 ChatGPT API Key 環境變數
如同前一篇文章所提到,基於安全性問題我們要將 Key 放在環境變數,在程式執行時再去讀取它
💡 若覺得 步驟3 怎麼跳了一大段,可以參考前一篇文章的基本設定
3.1 ) — 設定環境變數:OPENAI_API_KEY,將 “步驟1” 拿到的 Key 放這在 🔑
3.2 ) — import openai
讓我們可以和 ChatGPT 進行互動
import openai
3.3 ) — 將新的環境變數加進來
# ChatGPT
openai.api_key = os.environ.get('OPENAI_API_KEY')
3.4) — 到目前為止,程式上半部會長這樣
import json
import hmac
import hashlib
import base64
import os
import openai
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
# line
line_bot_api = LineBotApi(os.environ.get('CHANNEL_ACCESS_TOKEN'))
channel_secret = os.environ.get('CHANNEL_SECRET')
handler = WebhookHandler(channel_secret)
# ChatGPT
openai.api_key = os.environ.get('OPENAI_API_KEY')
步驟 4:OpenAI API 調用
4.1) — 定義函式:chat_with_gpt
用於將 LINE 使用者訊息傳遞給 ChatGPT,並將處理後的回覆返回給 LINE 使用者
# 回傳ChatGPT訊息
# 將LINE 使用者訊息發給ChatGPT,ChatGPT處理後再回傳給 LINE 使用者
def chat_with_gpt(user_input):
try:
# 設定提示語句,將使用者輸入的訊息與回覆模板結合
prompt = f"{user_input}\n\nResponse:"
# 使用OpenAI API,傳遞模型名稱、訊息角色和內容,以生成機器人回覆
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
)
# 從回覆中提取機器人的回覆訊息,並去除前後空白
result = response['choices'][0]['message']['content'].strip()
return result # 返回處理過的回覆給LINE使用者
except openai.Error as e:
return "Error: OpenAI API"
except Exception as e:
return "Error: An unexpected error occurred"
4.2) — 呼叫 chat_with_gpt 函式,並回傳訊息給 LINE 使用者
將以下兩行 Code 加到我們的 linebot 函式中
# 將Line訊息發給ChatGPT
GPT_output = chat_with_gpt(user_input)
# 回傳ChatGPT訊息
line_bot_api.reply_message(tk, TextSendMessage(GPT_output))
4.3) — main.py完整的程式會長這樣
import json
import hmac
import hashlib
import base64
import os
import openai
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
# line
line_bot_api = LineBotApi(os.environ.get('CHANNEL_ACCESS_TOKEN'))
channel_secret = os.environ.get('CHANNEL_SECRET')
handler = WebhookHandler(channel_secret)
# ChatGPT
openai.api_key = os.environ.get('OPENAI_API_KEY')
# 處理Line Request
def linebot(request):
if request.method != 'POST' or 'X-Line-Signature' not in request.headers:
return 'Error: Invalid source', 403
else:
# get X-Line-Signature header value
x_line_signature = request.headers['X-Line-Signature']
# get body value
body = request.get_data(as_text=True)
hash = hmac.new(channel_secret.encode('utf-8'),
body.encode('utf-8'), hashlib.sha256).digest()
signature = base64.b64encode(hash).decode('utf-8')
# Compare x-line-signature request header and the signature
if x_line_signature == signature:
try:
# 解析 JSON
json_data = json.loads(body)
handler.handle(body, x_line_signature)
# 取得 reply token
tk = json_data['events'][0]['replyToken']
# 取得 Line訊息
user_input = json_data['events'][0]['message']['text']
# 將Line訊息發給ChatGPT
GPT_output = chat_with_gpt(user_input)
# 回傳ChatGPT訊息
line_bot_api.reply_message(tk, TextSendMessage(GPT_output))
return 'OK', 200
except:
print('error')
else:
return 'Invalid signature', 403
# 回傳ChatGPT訊息
# 將LINE 使用者訊息發給ChatGPT,ChatGPT處理後再回傳給 LINE 使用者
def chat_with_gpt(user_input):
try:
# 設定提示語句,將使用者輸入的訊息與回覆模板結合
prompt = f"{user_input}\n\nResponse:"
# 使用OpenAI API,傳遞模型名稱、訊息角色和內容,以生成機器人回覆
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
)
# 從回覆中提取機器人的回覆訊息,並去除前後空白
result = response['choices'][0]['message']['content'].strip()
return result # 返回處理過的回覆給LINE使用者
except openai.Error as e:
return "Error: OpenAI API"
except Exception as e:
return "Error: An unexpected error occurred"
4.4 ) — 調整 requirements.txt 💻
加入 openai
openai
步驟 5:領域展開 ChatGPT-J 😎
5.1 ) — 至Messaging API頁籤,掃碼加入這個帳號
5.2 ) — 如假包換 ChatGPT
總結 👽
在本篇文章中,成功地將原本的鸚鵡機器人蛻變為一隻展翅翱翔的鳳凰 🔥
透過 LINE BOT 與 ChatGPT 的結合,打造出一個無所不能的隨身 AI 機器人,當突然想要用 ChatGPT 時,終於不用一直去開瀏覽器了!
📔 以上內容部分參考自網路,並整理成自已的實作筆記分享給大家 📔
今天就先這樣
掰掰 🏊🏼 🏊🏼 🏊🏼 🏊🏼 🏊🏼 🏊🏼
番外篇
在下一篇的文章中,將延續本篇內容,再多應用一個 Google新聞的爬蟲,打造一個可以幫我們快速搜集和整理新聞的小幫手!✍
身為一個股市投資者,消息面有時是確認自己想法與進攻訊號的步驟之一,但每天要追的新聞、消息、Twitter真的是多到數不清,更何況還要在時間內整理出重點分析…