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

更新於 發佈於 閱讀時間約 18 分鐘


程式原碼: https://github.com/JokerWuXin/ChatGpt-LineBot

步驟:

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 建置影片

其中要注意,此處為

raw-image

點擊後方 Edit 可進到中文頁面修改

raw-image

設定完成後 至 vercel 申請免費伺服器


Vercel 匯入 GitHub 原碼

申請完成後,匯入 GitHub 原碼

raw-image

若沒 GitHub 則需至 GitHub官網註冊

GitHub上傳原碼 可在官網下載工具使用

原碼部分

index.py 可參考 LINE Messaging API SDK for Python

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建置,還須注意

Python Dependencies

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


raw-image

還有,vercel.json 用來,指定路徑進入點的

{
"builds": [
{
"src": "api/index.py",
"use": "@vercel/python"
}
],
"routes": [
{
"src": "/(.*)",
"dest": "api/index.py"
}
]
}
raw-image

完成後,透過 GitHub 工具上傳

raw-image

上傳完成後,返回 vercel 進行 import

raw-image

Vercel Environment Variables 環境設定

raw-image
raw-image

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

raw-image

LineBot Webhook 設定

完成後,複製 DOMAINS 路徑,返回 LineBot後台

raw-image

將路徑貼上,並在路徑後方加上 webhook,原因是我們在 index.py處

@app.route("/webhook", methods=['POST'])

將路徑引到此處與LineBot透過post方式傳輸資料

至此就可以進行測試囉~

raw-image

QA

chatgpt 與 openai gpt3 有何差異

raw-image

chatgpt 有api嗎

raw-image
raw-image

使用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)

不過經過測試,這裡有點有趣

raw-image

依上述所言,只要改 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()
raw-image

But

raw-image

因此~

根據 官方技術文件

目前就是只能用 OpenAI GPT-3 玩~

後記:

經過我的騷擾跟測試,這機器人改口了~

raw-image
raw-image
raw-image

笑死~

本紀錄參考:

留言
avatar-img
留言分享你的想法!
bq98023 bq98023-avatar-img
2023/04/22
請問環境變數 API KEY3把都輸入完成 再 點擊 Deploy 會卡在這個頁面 不會 跳轉入 hello world! 頁面是什麼問題呢? 創建不出 webhook 的網址。這是我的 https://github.com/TsaiWeiLin/ChatGpt-Linebot 網址
Mike Lu-avatar-img
2023/03/16
您好,非常感謝您的教學分享,是我看過最詳盡的介紹,也成功完成了 想請問有更新API的model到3.5-turbo的設定嗎
edan456852-avatar-img
2023/02/22
您好,我想請問我都非常成功,但機器人不會回覆,想請教您是哪裡出問題,謝謝。
吳佳鑫-avatar-img
發文者
2023/02/25
機器人不會回覆,若 vercel 有成功架起來 在linebot上打啟動 能看到訊息 那請 看一下 open ai api key是否在有效期限內 經測試,在 ChatGPT 開始收費後 才申請金鑰的 有效期限 都只到 2023/2/1 唷~
Scott-avatar-img
2023/02/21
Hi,佳鑫: 我碰到一樣的問題, 我在vercel上面domain是"chargpt-linebot.vercel.app", 然後在Webhook那邊設定的網址是"https://chargpt-linebot.vercel.app/webhook/" 但是verify會出現404,不是200, 我vercel.json 和 requirement.txt 都放在根目錄底下, 請問可能是什麼問題? 感謝你花時間 幫我看問題 我也是業餘愛好者 謝謝
吳佳鑫-avatar-img
發文者
2023/02/25
404: NOT_FOUND Code: NOT_FOUND ID: hkg1::9jmns-1677295638340-c4fa4d53203f 你的 vercel 沒架設成功唷~
凱森張-avatar-img
2022/12/23
非常感謝,照著做很順利的成功了!
avatar-img
MJ的沙龍
42會員
136內容數
獨立遊戲開發紀錄
MJ的沙龍的其他內容
2025/04/12
🗓 Steam 上市日期:2025/4/28 | 🖤 加入願望清單:https://store.steampowered.com/app/3634400/Elara/ 「他們說我太敏感,說我不合群。 但我只是——不想學會沉默。」 —Elara Quinn 你是否曾經在工作時,感
Thumbnail
2025/04/12
🗓 Steam 上市日期:2025/4/28 | 🖤 加入願望清單:https://store.steampowered.com/app/3634400/Elara/ 「他們說我太敏感,說我不合群。 但我只是——不想學會沉默。」 —Elara Quinn 你是否曾經在工作時,感
Thumbnail
2025/03/05
在靈異頻發的醫院夜班,小護士林筱筱意外發現她的冷酷上司——蘇醫生,竟然早已死亡五年,從此她與這位神秘的「鬼醫生」攜手處理靈異事件,並在驚魂不斷的夜班中逐漸建立起一段超越生死的羈絆。
Thumbnail
2025/03/05
在靈異頻發的醫院夜班,小護士林筱筱意外發現她的冷酷上司——蘇醫生,竟然早已死亡五年,從此她與這位神秘的「鬼醫生」攜手處理靈異事件,並在驚魂不斷的夜班中逐漸建立起一段超越生死的羈絆。
Thumbnail
2025/02/24
這是一篇懸疑驚悚小說,描述女主角江語珊調查一起離奇命案的故事。死者林曦是一位心理學教授,死於自家公寓,現場佈滿鏡子,死者嘴角帶著詭異的微笑。語珊在調查過程中發現,此案與一種名為「鏡像侵蝕」的心理現象有關,並逐漸被捲入其中。
Thumbnail
2025/02/24
這是一篇懸疑驚悚小說,描述女主角江語珊調查一起離奇命案的故事。死者林曦是一位心理學教授,死於自家公寓,現場佈滿鏡子,死者嘴角帶著詭異的微笑。語珊在調查過程中發現,此案與一種名為「鏡像侵蝕」的心理現象有關,並逐漸被捲入其中。
Thumbnail
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
Hi,我是茶桁。 在过去的两讲中,我们已经使用 OpenAI 提供的 Embedding 接口完成了文本分类的功能。现在,我们回到 Completion 接口,这一讲将带你更深入地了解该接口的使用。除此之外,我们还将快速搭建一个有界面的聊天机器人,这将让你更好地理解 Completion 接口的应
Thumbnail
Hi,我是茶桁。 在过去的两讲中,我们已经使用 OpenAI 提供的 Embedding 接口完成了文本分类的功能。现在,我们回到 Completion 接口,这一讲将带你更深入地了解该接口的使用。除此之外,我们还将快速搭建一个有界面的聊天机器人,这将让你更好地理解 Completion 接口的应
Thumbnail
不用问我都知道,你们一定是被ChatGPT的火热出圈导致的开始关注人工智能,也是由于此才看到我这篇文章。 放心,大家想要的我一定会给予,既然大家都想先认识ChatGPT,那么我们就从这个主题开始。 接下来,我们学学如何利用openAI的API来和其沟通。在整个使用过程中,我们都使用的是GPT-3
Thumbnail
不用问我都知道,你们一定是被ChatGPT的火热出圈导致的开始关注人工智能,也是由于此才看到我这篇文章。 放心,大家想要的我一定会给予,既然大家都想先认识ChatGPT,那么我们就从这个主题开始。 接下来,我们学学如何利用openAI的API来和其沟通。在整个使用过程中,我们都使用的是GPT-3
Thumbnail
由于 ChatGPT 的出現讓我們看到了聊天機器人的新可能性,我們這篇文章的目的,就是要來製作第一個屬於自己的聊天機器人。 我們先來準備範例的程式碼,並且稍後會再跟大家介紹要設計自己的 ChatGPT 聊天機器人的重要概念。 初始專案與環境設定 下載程式碼 請先使用下面這一段指令下載我們的範例程式碼
Thumbnail
由于 ChatGPT 的出現讓我們看到了聊天機器人的新可能性,我們這篇文章的目的,就是要來製作第一個屬於自己的聊天機器人。 我們先來準備範例的程式碼,並且稍後會再跟大家介紹要設計自己的 ChatGPT 聊天機器人的重要概念。 初始專案與環境設定 下載程式碼 請先使用下面這一段指令下載我們的範例程式碼
Thumbnail
前言 ChatGPT 的熱門程度早已想當然而,企業們爭相開始導入 OpenAI 技術的應用,好比進入了 AI 群雄割據的年代,不過 Microsoft Copilot 的主權宣示,這個重視高生產力時代,將會暫時遠離一場腥風血雨的爭鬥。 回歸本次的主角「AI 客服機器人」,筆者將他應用於課程回覆的狀況
Thumbnail
前言 ChatGPT 的熱門程度早已想當然而,企業們爭相開始導入 OpenAI 技術的應用,好比進入了 AI 群雄割據的年代,不過 Microsoft Copilot 的主權宣示,這個重視高生產力時代,將會暫時遠離一場腥風血雨的爭鬥。 回歸本次的主角「AI 客服機器人」,筆者將他應用於課程回覆的狀況
Thumbnail
今天終於可以揮別那些假的ChatGPT串接教學了! 在今天(2023/03/02)之後,終於可以串接真正的ChatGPT API了! 這是真正的GPT 3.5 API官方版本,內文提供簡介與python 串接教學。
Thumbnail
今天終於可以揮別那些假的ChatGPT串接教學了! 在今天(2023/03/02)之後,終於可以串接真正的ChatGPT API了! 這是真正的GPT 3.5 API官方版本,內文提供簡介與python 串接教學。
Thumbnail
本文將介紹如何利用 Siri 與 iOS 捷徑,連接 OpenAI API,製作出一個可以語音對話的 ChatGPT。
Thumbnail
本文將介紹如何利用 Siri 與 iOS 捷徑,連接 OpenAI API,製作出一個可以語音對話的 ChatGPT。
Thumbnail
程式原碼: https://github.com/JokerWuXin/ChatGpt-LineBot 步驟: S1.至OPEN AI 取得 API KEY S2.至LineBot 取得 Channel access token 、Channel secret 並 進行相關設定 S3.至Verce
Thumbnail
程式原碼: https://github.com/JokerWuXin/ChatGpt-LineBot 步驟: S1.至OPEN AI 取得 API KEY S2.至LineBot 取得 Channel access token 、Channel secret 並 進行相關設定 S3.至Verce
Thumbnail
安裝Python 安裝Open Ai 參考資料 註冊申請 Open AI API 至官方網站申請為會員,接著選 View API Key 進入後 選擇 Create CHAT 範例 官方範例 中文CHAT
Thumbnail
安裝Python 安裝Open Ai 參考資料 註冊申請 Open AI API 至官方網站申請為會員,接著選 View API Key 進入後 選擇 Create CHAT 範例 官方範例 中文CHAT
Thumbnail
今天我們繼續來教學LINE Bot的一些基本功能,在之前的教學中,我們都單純的讓機器人回覆文字,但這樣就讓機器人顯得有點生硬,為了讓其更加的活靈活現,LINE官方還提供其他不一樣的回訊方式,而今天我們就來教大家如何讓機器人回傳貼圖以及位置座標吧!!
Thumbnail
今天我們繼續來教學LINE Bot的一些基本功能,在之前的教學中,我們都單純的讓機器人回覆文字,但這樣就讓機器人顯得有點生硬,為了讓其更加的活靈活現,LINE官方還提供其他不一樣的回訊方式,而今天我們就來教大家如何讓機器人回傳貼圖以及位置座標吧!!
Thumbnail
在上篇文章中,我們學會了如何串接各個平台,並且簡單做出了一個會模仿我們說話的機器人,接下來我們將會從LINE Bot有哪些基本的回訊息功能來介紹起,而今天就先從推播以及回覆開始說起吧!!
Thumbnail
在上篇文章中,我們學會了如何串接各個平台,並且簡單做出了一個會模仿我們說話的機器人,接下來我們將會從LINE Bot有哪些基本的回訊息功能來介紹起,而今天就先從推播以及回覆開始說起吧!!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News