iT邦幫忙

2

【GPT-3 LINE BOT】(4) 來人啊~ 上程式碼 啦~~

  • 分享至 

  • xImage
  •  

Google Apps Script 內部檔案分布

  • 我將只會附上 主程式碼(doPost)chatGPT_api() 的部分

主程式原始碼(doPost)

ChatGPT_ACCESS_TOKEN = // OpenAI 的 API token keys
CHANNEL_ACCESS_TOKEN = // 你的 line bot token

function doPost(e) {
  //從接收到的訊息中取出 replyToken 和發送的訊息文字資訊 
  var msg = JSON.parse(e.postData.contents);
  var replyToken = msg.events[0].replyToken;
  var type = msg.events[0].type;
  var userid = msg.events[0].source.userId;
  var groupid = msg.events[0].source.groupId;

  // 只接收純文字的訊息
  if (type == 'message' && msg.events[0].message.text != null) {
    var userMessage = msg.events[0].message.text;
  }
  else { return 0 }

  // 幫使用者輸入的文字後面加入結束字元
  send_msg = userMessage + "###"

  // 雖然這樣會消耗很多的 token 數,但經過我測試,這樣比起調高 max_tokens 還可以更快的得到 API 的回覆答案
  // 重複的向 GPT API 傳送訊息,直到沒有接收到任何東西(這樣即可突破 4000 token 的限制)
  do {
    response = chatGPT_api(send_msg)
    receive_msg = JSON.parse(response.getContentText())["choices"][0]["text"]
    send_msg = send_msg + receive_msg
    check_end = receive_msg.length == 0
    console.log(send_msg)
  } while (!check_end)

  // 把訊息過篩不需要的換行字元後用LINE傳回給使用者
  reply = send_msg.replace(userMessage, "").replace("###", "")
  console.log(reply)
  while (reply[0] == "\n") { reply = reply.replace("\n", "") }
  reply_message(replyToken, [{ 'type': 'text', 'text': reply }])
  // reply_message(replyToken, reply_flex(reply))  // 預留使用flex傳送訊息的程式碼
}

chatGPT_api()

// 可以自行改動各項參數
function chatGPT_api(message) {
  return UrlFetchApp.fetch('https://api.openai.com/v1/engines/text-davinci-003/completions', {
    'method': 'post',
    'headers': {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer ' + ChatGPT_ACCESS_TOKEN,
    },
    'payload': JSON.stringify({
      temperature: 0.9,
      max_tokens: 256,
      top_p: 1,
      frequency_penalty: 2,
      presence_penalty: 0.6,
      prompt: message,
      stop: ["###"],
    }),
  })
}

程式碼(網址)

  • 部分簡單重複的內容就不在這邊說明,但我都放在連結裡面

https://script.google.com/d/1LdBtvb8nhSLnjpw0Goqr6Zyk4Ixl_QFDU3Hlkw7Z7gAIPEk8eUBaUSY7/edit?usp=sharing


參考資料

全部都是這光頭歪國人他教我的
How to create GPT-3 apps in Google Sheets – Free Tutorial

另外當初在做的時候也有看到其他有趣的創作者,給大家參考


最後

  • 由於 OpenAI 所開放的 API 在三個月內只有100K的令牌(token)可以使用,又加上我自己玩一玩就已經用掉三分之一了,所以我若大家有想要玩的,可以自己 copy 我的 code 來創作喔!~~ (抱歉 我就是窮逼免費仔
  • 另外提醒一下,很多的創作大部分都是要用自己的 API KEY ,所以只能使用三個月,無痛使用的方式才是能免費的使用 ChatGPT 喔~

若以上有任何的錯誤都歡迎留言跟我說
我會非常感謝你的(ノ>ω<)ノ

【GPT-3 LINE BOT】 系列

(1) 介紹 ChatGPT & GPT-3
(2) 玩壞 ChatGPT LINE BOT
(3) 創建屬於自己的 ChatGPT LINE BOT
(4) 來人啊~ 上程式碼 啦~~
(5) 同場加映:介紹 Hugging Face 及 Meta AI BlenderBot
(6) 同場加映:Hugging Face 串接 LINE BOT
(7) 同場加映:用 Python & Google Apps Script 玩 Hugging Face


接案 (☛´∀`*)☛ LINE ID:albert20699

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
channelzkimo
iT邦新手 5 級 ‧ 2023-03-08 12:32:59

HI 感謝你的分享 我試圖用您的code複製一份 聊天機器人
但是我不太確定為何無法順利運行
個別在doPost 跟reply_message出現Request failed for https://api.line.me returned code 400.
我想請教該如何修正?再次感謝您的分享

會出現reply_message上面的問題應該是CHANNEL_ACCESS_TOKEN沒有設定正確或是reply_message的url網址錯誤,可以先嘗試看看單純的傳送簡單訊息看看,看是line的程式碼問題還是openai程式碼問題
https://ithelp.ithome.com.tw/articles/10309771/
再推銷一下自己的文章

我要留言

立即登入留言