iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
生成式 AI

運用生成式 AI 服務 所提供的API 實做應用開發(以Gemini及ChatGPT為例)系列 第 24

5-2-3 要求 LLMs 去將上面功能 combine together

  • 分享至 

  • xImage
  •  

5-2-3 要求 LLMs 去將上面功能 combine together

https://ithelp.ithome.com.tw/upload/images/20240811/20046160cKqtekRPSb.png

合併

那現在有GAS 呼叫 Gemini API 的程式碼也有Line Bot 的程式碼,這時候就要將其合在一起

因為 LLMs APP 的特性是,當對話有多的時候,他會用前面的去回答後面的, 這樣會導致你的產生的程式會出錯。

我的建議是 重新開啟對話框將程式碼逐一喂給 LLMs 比較不會出錯 不過隨著平台功能越來越強大 程式碼的量也可以越喂越多

Prompt

先閱讀程式碼, 不要做事, 等等再告訴你要做什麼~


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);
}

Prompt

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);
}

這樣的改動包括:

  1. handleUserMessage 函數中呼叫 callAI,並傳入用戶消息。
  2. callAI 函數中使用 userMessage 取代固定的 "Explain how AI works" 文本。
  3. 確保 callAI 函數回傳的結果在 handleUserMessage 中被回傳,並作為對用戶的回覆。

結論

串接好後,就可以直接 用 前面章節 的 RAG 及 function calling 等,依照你的需求完成客服機器人

關於我

我是 Wolke。我是一名專業程式開發者,專長是開發 AI 和程式解決方案。

我投入了不少時間在專業發展上。我是多本書的作者,其中包括《LINE聊天機器人+AI+雲端+開源+程式:輕鬆入門到完整學習》《ChatGPT來襲,未來人人都需具備的運算思維!應用詠唱工程來釋放程式生產力—程式學習/開發篇》。也有出版線上課程,我熱衷於分享我的經驗和技術,幫助其他開發者更好地利用 AI 工具。

也在許多知名大學、論壇、社團擔任講者,如果貴方有需要也歡迎與我聯繫。
2023年 講座 紀錄

最後這篇文章若有切合你的需求,敬請訂閱按讚分享


上一篇
5-2-2 GAS to be webhook of LINE bot
下一篇
6-1 前言 OpenAI 對於 ChatGPT API 及 My GPTs 的佈局
系列文
運用生成式 AI 服務 所提供的API 實做應用開發(以Gemini及ChatGPT為例)29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言