那現在有GAS 呼叫 Gemini API 的程式碼也有Line Bot 的程式碼,這時候就要將其合在一起
因為 LLMs APP 的特性是,當對話有多的時候,他會用前面的去回答後面的, 這樣會導致你的產生的程式會出錯。
我的建議是 重新開啟對話框將程式碼逐一喂給 LLMs 比較不會出錯 不過隨著平台功能越來越強大 程式碼的量也可以越喂越多
先閱讀程式碼, 不要做事, 等等再告訴你要做什麼~
function callAI() {
var url = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=AIzaSyBeSmRdF2a1xvGNZHnC4ijSADeUqi20IVg';
var payload = {
"contents": [
{
"parts": [
{
"text": "Explain how AI works"
}
]
}
]
};
var options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload)
};
var response = UrlFetchApp.fetch(url, options);
var json = JSON.parse(response.getContentText());
// 提取text內容
var text = json.candidates[0].content.parts[0].text;
Logger.log(text);
return text;
}
var LINE_CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'; // 請填入你的 Channel Access Token
function doPost(e) {
var contents = JSON.parse(e.postData.contents);
var events = contents.events;
for (var i = 0; i < events.length; i++) {
var event = events[i];
if (event.type == 'message' && event.message.type == 'text') {
var replyToken = event.replyToken;
var userMessage = event.message.text;
var replyMessage = handleUserMessage(userMessage);
replyToUser(replyToken, replyMessage);
}
}
}
function handleUserMessage(message) {
// 根據用戶消息進行處理,這裡簡單回覆相同消息
return message;
}
function replyToUser(replyToken, message) {
var url = '<https://api.line.me/v2/bot/message/reply>';
var payload = {
replyToken: replyToken,
messages: [{
type: 'text',
text: message
}]
};
var options = {
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN
},
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
1.handleUserMessage 去 呼叫 callAPI
2.callAPI text 用handleUserMessage 的 message 取代
3.最後再回傳
了解了。以下是依照你的要求修改過的程式碼:
function callAI(userMessage) {
var url = '<https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash-latest:generateContent?key=AIzaSyBeSmRdF2a1xvGNZHnC4ijSADeUqi20IVg>';
var payload = {
"contents": [
{
"parts": [
{
"text": userMessage // 用用戶的消息取代
}
]
}
]
};
var options = {
'method': 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload)
};
var response = UrlFetchApp.fetch(url, options);
var json = JSON.parse(response.getContentText());
// 提取text內容
var text = json.candidates[0].content.parts[0].text;
Logger.log(text);
return text;
}
var LINE_CHANNEL_ACCESS_TOKEN = 'YOUR_CHANNEL_ACCESS_TOKEN'; // 請填入你的 Channel Access Token
function doPost(e) {
var contents = JSON.parse(e.postData.contents);
var events = contents.events;
for (var i = 0; i < events.length; i++) {
var event = events[i];
if (event.type == 'message' && event.message.type == 'text') {
var replyToken = event.replyToken;
var userMessage = event.message.text;
var replyMessage = handleUserMessage(userMessage);
replyToUser(replyToken, replyMessage);
}
}
}
function handleUserMessage(message) {
// 呼叫 callAI 並回傳結果
var aiResponse = callAI(message);
return aiResponse;
}
function replyToUser(replyToken, message) {
var url = '<https://api.line.me/v2/bot/message/reply>';
var payload = {
replyToken: replyToken,
messages: [{
type: 'text',
text: message
}]
};
var options = {
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN
},
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
這樣的改動包括:
handleUserMessage
函數中呼叫 callAI
,並傳入用戶消息。callAI
函數中使用 userMessage
取代固定的 "Explain how AI works" 文本。callAI
函數回傳的結果在 handleUserMessage
中被回傳,並作為對用戶的回覆。串接好後,就可以直接 用 前面章節 的 RAG 及 function calling 等,依照你的需求完成客服機器人
我是 Wolke。我是一名專業程式開發者,專長是開發 AI 和程式解決方案。
我投入了不少時間在專業發展上。我是多本書的作者,其中包括《LINE聊天機器人+AI+雲端+開源+程式:輕鬆入門到完整學習》和《ChatGPT來襲,未來人人都需具備的運算思維!應用詠唱工程來釋放程式生產力—程式學習/開發篇》。也有出版線上課程,我熱衷於分享我的經驗和技術,幫助其他開發者更好地利用 AI 工具。
也在許多知名大學、論壇、社團擔任講者,如果貴方有需要也歡迎與我聯繫。
2023年 講座 紀錄
最後這篇文章若有切合你的需求,敬請訂閱按讚分享