OPEN AI x ChatGPT x LineBot 串接完整全紀錄

更新於 發佈於 閱讀時間約 18 分鐘
步驟:
S1.至OPEN AI 取得 API KEY
S2.至LineBot 取得 Channel access token 、Channel secret 並 進行相關設定
S3.至Vercel 申請免費伺服器並連結 GitHub原碼
S4.GitHub上傳原碼(index.py、chatgpt.py、prompt.py、requirements.txt、vercel.json)
S5.至Vercel進行伺服器設定(此處主要為原碼與環境變數,也就是將S1 & S2 的api key 與 權杖 進行設定,取得進行 Webhook用的網址),成功後可看到 Hello World 字眼
S6.至LineBot 進行 WebHook設定,完成後即可在Line上進行測試

詳細步驟流程:

取得OPEN API KEY


首先至OPEN AI 取得 API KEY,詳細可參閱 OPENAI 聊天機器人 文章

LineBot Channel access token 、Channel secret

取得 LineBot Channel access token 、Channel secret 後 至 Line BOT 控制台 申請 LineBot Key
申請方式,可參照 LineBOt 建置影片
其中要注意,此處為
點擊後方 Edit 可進到中文頁面修改
設定完成後 至 vercel 申請免費伺服器

Vercel 匯入 GitHub 原碼

申請完成後,匯入 GitHub 原碼
若沒 GitHub 則需至 GitHub官網註冊
GitHub上傳原碼 可在官網下載工具使用

原碼部分

from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
from api.chatgpt import ChatGPT
import os
line_bot_api = LineBotApi(os.getenv("LINE_CHANNEL_ACCESS_TOKEN"))
line_handler = WebhookHandler(os.getenv("LINE_CHANNEL_SECRET"))
working_status = os.getenv("DEFALUT_TALKING", default = "true").lower() == "true"
app = Flask(__name__)
chatgpt = ChatGPT()
# domain root
@app.route('/')
def home():
    return 'Hello, World!'
@app.route("/webhook", 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:
        line_handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'
@line_handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    global working_status
    
    if event.message.type != "text":
        return
    working_status = True
    if working_status:
        chatgpt.add_msg(f"Human:{event.message.text}?\n")
        reply_msg = chatgpt.get_response().replace("AI:", "", 1)
        chatgpt.add_msg(f"AI:{reply_msg}\n")
        line_bot_api.reply_message(
            event.reply_token,
            TextSendMessage(text=reply_msg))
if __name__ == "__main__":
    app.run()
chatgpt.py 可參考 OPEN AI 聊天機器人Chat範例
from api.prompt import Prompt
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
class ChatGPT:
    def __init__(self):
        self.prompt = Prompt()
        self.model = os.getenv("OPENAI_MODEL", default = "text-davinci-003")
        self.temperature = float(os.getenv("OPENAI_TEMPERATURE", default = 0))
        self.frequency_penalty = float(os.getenv("OPENAI_FREQUENCY_PENALTY", default = 0))
        self.presence_penalty = float(os.getenv("OPENAI_PRESENCE_PENALTY", default = 0.6))
        self.max_tokens = int(os.getenv("OPENAI_MAX_TOKENS", default = 240))
    def get_response(self):
        response = openai.Completion.create(
            model=self.model,
            prompt=self.prompt.generate_prompt(),
            temperature=self.temperature,
            frequency_penalty=self.frequency_penalty,
            presence_penalty=self.presence_penalty,
            max_tokens=self.max_tokens
        )
        return response['choices'][0]['text'].strip()
    def add_msg(self, text):
        self.prompt.add_msg(text)
prompt.py 可參考 vercel 官網提供的 python flask 範例
import os
chat_language = os.getenv("INIT_LANGUAGE", default = "zh")
MSG_LIST_LIMIT = int(os.getenv("MSG_LIST_LIMIT", default = 20))
LANGUAGE_TABLE = {
  "zh": "嗨!",
  "en": "Hi!"
}
class Prompt:
    def __init__(self):
        self.msg_list = []
        self.msg_list.append(f"AI:{LANGUAGE_TABLE[chat_language]}")
    
    def add_msg(self, new_msg):
        if len(self.msg_list) >= MSG_LIST_LIMIT:
            self.remove_msg()
        self.msg_list.append(new_msg)
    def remove_msg(self):
        self.msg_list.pop(0)
    def generate_prompt(self):
        return '\n'.join(self.msg_list)
此外,根據vercel官網提供的 python flask建置,還須注意
You can install dependencies for your Python projects by defining them in requirements.txt or a Pipfile with corresponding Pipfile.lock.
requirements.txt
Flask==2.2.2
這件事,將版本與相關的SDK建立 requirements.txt
Flask==2.2.2
line-bot-sdk
openai
還有,vercel.json 用來,指定路徑進入點的
{
  "builds": [
    {
      "src": "api/index.py",
      "use": "@vercel/python"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "api/index.py"
    }
  ]
}
完成後,透過 GitHub 工具上傳
上傳完成後,返回 vercel 進行 import

Vercel Environment Variables 環境設定

點擊 Environment Variables 進行環境設定,將OPEN AI & LineBot API KEY 進行輸入設定,完成後 點擊 Deploy

LineBot Webhook 設定

完成後,複製 DOMAINS 路徑,返回 LineBot後台
將路徑貼上,並在路徑後方加上 webhook,原因是我們在 index.py處
@app.route("/webhook", methods=['POST'])
將路徑引到此處與LineBot透過post方式傳輸資料
至此就可以進行測試囉~

QA

chatgpt 與 openai gpt3 有何差異

chatgpt 有api嗎

使用ChatGPT API

若要使用 ChatGPT 作為 Line機器人的串接API
則須將 chatgpt.py 的
def get_response(self):
        response = openai.Completion.create(
            model=self.model,
            prompt=self.prompt.generate_prompt(),
            temperature=self.temperature,
            frequency_penalty=self.frequency_penalty,
            presence_penalty=self.presence_penalty,
            max_tokens=self.max_tokens
        )
        return response['choices'][0]['text'].strip()
透過ChatGPT說的進行合併修改
import openai
openai.api_key = "YOUR_API_KEY"
response = openai.Completion.create(
engine="chatbot",
prompt="Hello, how are you today?",
max_tokens=20
)
print(response.text)
不過經過測試,這裡有點有趣
依上述所言,只要改 model 就應該可以
def __init__(self):
        self.prompt = Prompt()
        self.model = "chatbot"
        self.temperature = float(os.getenv("OPENAI_TEMPERATURE", default = 0))
        self.frequency_penalty = float(os.getenv("OPENAI_FREQUENCY_PENALTY", default = 0))
        self.presence_penalty = float(os.getenv("OPENAI_PRESENCE_PENALTY", default = 0.6))
        self.max_tokens = int(os.getenv("OPENAI_MAX_TOKENS", default = 240))
    def get_response(self):
        response = openai.Completion.create(
            model=self.model,
            prompt=self.prompt.generate_prompt(),
            temperature=self.temperature,
            frequency_penalty=self.frequency_penalty,
            presence_penalty=self.presence_penalty,
            max_tokens=self.max_tokens
        )
        return response['choices'][0]['text'].strip()
But
因此~
目前就是只能用 OpenAI GPT-3 玩~

後記:

經過我的騷擾跟測試,這機器人改口了~
笑死~
本紀錄參考:
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
40會員
130內容數
獨立遊戲開發紀錄
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
吳佳鑫的沙龍 的其他內容
安裝Python 安裝Open Ai 參考資料 註冊申請 Open AI API 至官方網站申請為會員,接著選 View API Key 進入後 選擇 Create CHAT 範例 官方範例 中文CHAT
XAMPP 伺服器架設 S1. 下載與安裝 S2. 啟動XAMPP、Apache、Mysql S3. Mysql安全性設定 shell : --user=root password "1234" phpmyadmin(config.inc.php) S4. Apache設定
本範例為 PHP 載入 CSV檔,進行數據統計,並計算出各號碼開出次數。 資料來源: 政府資料開放平台 公益彩券各年度各期電腦型彩券獎號、銷售金額與獎金總額 載入CSV檔的作法 將資料進行統計整理 將資料放於陣列的方式 自定義函式 完整原碼
構想上,前端簡單的使用Google Map 做定位,並寫入SQL做第一段比對經緯度。接著前端有一個php上傳圖片的功能(沒有 https 所以就不做網頁開相機的方式)。經過上傳至伺服器後,python 圖形辨識,比對上傳的圖片,若比對成功或相似度差異不大,則判定正確,寫入SQL,端頁面顯示奪寶成功。
本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者
本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者
安裝Python 安裝Open Ai 參考資料 註冊申請 Open AI API 至官方網站申請為會員,接著選 View API Key 進入後 選擇 Create CHAT 範例 官方範例 中文CHAT
XAMPP 伺服器架設 S1. 下載與安裝 S2. 啟動XAMPP、Apache、Mysql S3. Mysql安全性設定 shell : --user=root password "1234" phpmyadmin(config.inc.php) S4. Apache設定
本範例為 PHP 載入 CSV檔,進行數據統計,並計算出各號碼開出次數。 資料來源: 政府資料開放平台 公益彩券各年度各期電腦型彩券獎號、銷售金額與獎金總額 載入CSV檔的作法 將資料進行統計整理 將資料放於陣列的方式 自定義函式 完整原碼
構想上,前端簡單的使用Google Map 做定位,並寫入SQL做第一段比對經緯度。接著前端有一個php上傳圖片的功能(沒有 https 所以就不做網頁開相機的方式)。經過上傳至伺服器後,python 圖形辨識,比對上傳的圖片,若比對成功或相似度差異不大,則判定正確,寫入SQL,端頁面顯示奪寶成功。
本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者
本專題為兩塊ESP8266-ESP01 ,分別為 Arduino+ESP-01+YL-69 土壤濕度檢測器與LED燈 ,以及 ESP-01 + DHT11 + LED 傳輸給伺服器端,並於伺服器上 WebSite 透過ESP-01上傳儲 存於 MYSQL 資料呈現曲線圖給前端使用者。此外,前端使用者
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
ChatGPT(全名:聊天生成預訓練轉換器)是一個由 OpenAI 開發的人工智慧聊天機器人程式。它於 2022 年 11 月推出,使用了基於 GPT-3.5、GPT-4 和 GPT-4o 架構的大型語言模型,並以強化學習進行訓練。
Thumbnail
👨‍💻 簡介 今天這篇主要是帶大家快速建立屬於自己的 Telegram bot,申請 bot 的部分我會附上網址,請準備好之後再來開始。 🛠️ 使用工具 Python 3.9.6 TG Bot 📝 功能需求 輸入指令讓 TG Bot 回傳訊息 接受傳入參數並進行簡單回傳 設定
Thumbnail
打造 LINE AI Chatbot,將 LINE 官方渠道串接 ChatGPT AI,讓 AI 根據用戶問題給予對應回覆,在回覆廣度或深度都更完整。輕鬆處理龐大訊息量,自動生成回覆並立即回應,提升訊息處理效率!更支援「針對 AI 回答設定框架」,於指定資料表內搜尋資料生成回覆,提高回覆準確性!
Thumbnail
本文章將介紹如何在LINE Notify上設定及使用權杖(access token)來進行通知功能。透過此API,可以使用curl或JAVA CODE來讓結果顯示在Line上面,達到及時的通知效果。
Thumbnail
設計程式來讀取欲傳送訊息之參數txt檔案,再利用程式自動傳出訊息至LINE群組。能簡易使用於任何場合。
Thumbnail
給出好的指令也是一門學問! 我們在業界稱為「指令工程」(Prompt Engineering),OpenAI 官方也有公布指令工程的操作資訊,但是今天我們只要學會這樣的操作方式,你可以贏過現在多數的AI使用者。
Thumbnail
上回說明的手動下指令,傳出訊息。為了節省手動輸入之動作,將欲執行的curl指令內容,事先作成執行檔。當需要傳送訊息時,只要按兩下執行檔,便可立刻傳出訊息至LINE群組內之全員 2. 說明 2.1 因每次要傳送內容不同,將這些會變動的訊息資料,輸入後保存 於bat執行檔內
Thumbnail
本文介紹如何設置OpenAI API密鑰並使用Whisper API轉寫音訊檔案。文章詳細說明了轉寫單個音訊檔案,以及將長音訊分割並轉寫的過程。透過範例演示,讀者可以學習如何將音訊轉寫為文字,提高工作效率。
Thumbnail
從最初的接觸到深度的投懷送抱,這篇文章對於解決如何安裝text-generation-webui提供了清晰的指引。 它引導讀者通過它的官方方式和Docker方式做到這一點。此外,作者還分享了必要的優化建議。
Thumbnail
大家好,我是萊丘,今天要與大家分享的是 OpenAI最新公布的AI提示詞生成指南。這份指南分成六大要點,幫助我們如何有效地跟ChatGPT互動,就算你不會寫 code 也可以輕鬆掌握。 要點一:指令清晰且具體 大家都知道,ChatGPT 雖然聰明,但它不是讀心術的高手,所以我們需
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
ChatGPT(全名:聊天生成預訓練轉換器)是一個由 OpenAI 開發的人工智慧聊天機器人程式。它於 2022 年 11 月推出,使用了基於 GPT-3.5、GPT-4 和 GPT-4o 架構的大型語言模型,並以強化學習進行訓練。
Thumbnail
👨‍💻 簡介 今天這篇主要是帶大家快速建立屬於自己的 Telegram bot,申請 bot 的部分我會附上網址,請準備好之後再來開始。 🛠️ 使用工具 Python 3.9.6 TG Bot 📝 功能需求 輸入指令讓 TG Bot 回傳訊息 接受傳入參數並進行簡單回傳 設定
Thumbnail
打造 LINE AI Chatbot,將 LINE 官方渠道串接 ChatGPT AI,讓 AI 根據用戶問題給予對應回覆,在回覆廣度或深度都更完整。輕鬆處理龐大訊息量,自動生成回覆並立即回應,提升訊息處理效率!更支援「針對 AI 回答設定框架」,於指定資料表內搜尋資料生成回覆,提高回覆準確性!
Thumbnail
本文章將介紹如何在LINE Notify上設定及使用權杖(access token)來進行通知功能。透過此API,可以使用curl或JAVA CODE來讓結果顯示在Line上面,達到及時的通知效果。
Thumbnail
設計程式來讀取欲傳送訊息之參數txt檔案,再利用程式自動傳出訊息至LINE群組。能簡易使用於任何場合。
Thumbnail
給出好的指令也是一門學問! 我們在業界稱為「指令工程」(Prompt Engineering),OpenAI 官方也有公布指令工程的操作資訊,但是今天我們只要學會這樣的操作方式,你可以贏過現在多數的AI使用者。
Thumbnail
上回說明的手動下指令,傳出訊息。為了節省手動輸入之動作,將欲執行的curl指令內容,事先作成執行檔。當需要傳送訊息時,只要按兩下執行檔,便可立刻傳出訊息至LINE群組內之全員 2. 說明 2.1 因每次要傳送內容不同,將這些會變動的訊息資料,輸入後保存 於bat執行檔內
Thumbnail
本文介紹如何設置OpenAI API密鑰並使用Whisper API轉寫音訊檔案。文章詳細說明了轉寫單個音訊檔案,以及將長音訊分割並轉寫的過程。透過範例演示,讀者可以學習如何將音訊轉寫為文字,提高工作效率。
Thumbnail
從最初的接觸到深度的投懷送抱,這篇文章對於解決如何安裝text-generation-webui提供了清晰的指引。 它引導讀者通過它的官方方式和Docker方式做到這一點。此外,作者還分享了必要的優化建議。
Thumbnail
大家好,我是萊丘,今天要與大家分享的是 OpenAI最新公布的AI提示詞生成指南。這份指南分成六大要點,幫助我們如何有效地跟ChatGPT互動,就算你不會寫 code 也可以輕鬆掌握。 要點一:指令清晰且具體 大家都知道,ChatGPT 雖然聰明,但它不是讀心術的高手,所以我們需