iT邦幫忙

2024 iThome 鐵人賽

0
生成式 AI

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

12-1 人人都要會寫的 Backend 解決方案——以 GAS 和 Google Sheets 為例

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20240903/20046160pkHSVk1r2i.png

在 LLMs 中,後端解決方案的重要性主要來自於 function calling。因為 RAG 的方法多種多樣,到目前為止,尚未有一種方法能完全提供正確的回答,容易產生錯誤的幻覺。然而,透過 function calling 獲得的答案,LLMs 不會再捏造。如果你的 LLMs 必須提供正確的答案,那麼你一定要學習後端解決方案,以便串接正確的資料,讓 LLMs 可以如實提供正確的答案。

此外,使用 function calling 在一定程度上可以避免 prompt hacking 及惡意資料獲取。

後端解決方案有百百種這裡示範不用錢的範例

簡單示範

  1. 先請 LLMs 規劃一個資料庫
用 google spreadsheet 規劃一個  學生成績管理的 資料庫的範例
  1. 獲得以下資料後 貼到 google spreadsheet

學生資料表 (Sheet: 學生資料)

學號 姓名 性別 年級 班級 生日 聯絡電話 地址
001 王小明 3 1 2005/05/01 0912345678 台北市某某路
002 李小華 2 3 2006/08/12 0987654321 新北市某某路
003 張大偉 1 5 2007/03/22 0922333444 桃園市某某路

成績紀錄表 (Sheet: 成績紀錄)

成績編號 學號 課程代號 學期 成績 評語
001 001 C001 2023 上 85 表現良好
002 001 C002 2023 上 78 需加強
003 002 C001 2023 上 92 優秀
004 003 C003 2023 上 88 穩定表現

課程資料表 (Sheet: 課程資料)

課程代號 課程名稱 授課老師 學分數 授課時間
C001 數學 張老師 3 週一 10:00-12:00
C002 英文 李老師 2 週二 14:00-16:00
C003 物理 王老師 3 週三 09:00-11:00
  1. 再請 LLMs APP 撰寫 GAS 作為 rest api
用 GAS 寫一個 rest api
輸入學號 就可以將 該學生的 基本資料  成績紀錄 以及課程名稱授課老師都寫出來
  1. 獲得如下程式碼
function doGet(e) {
  // 取得學號
  var studentId = e.parameter.studentId;

  // 呼叫函數來獲取資料
  var studentData = getStudentData(studentId);
  var result = studentData ? JSON.stringify(studentData) : "Student not found";

  // 設定 Content-Type 為 JSON
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

function getStudentData(studentId) {
  var sheetStudent = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('學生資料');
  var sheetGrades = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('成績紀錄');
  var sheetCourses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('課程資料');

  // 搜尋學生基本資料
  var studentRange = sheetStudent.getRange(2, 1, sheetStudent.getLastRow() - 1, sheetStudent.getLastColumn());
  var studentData = studentRange.getValues().find(row => row[0] == studentId);
  if (!studentData) return null;

  // 構建基本資料物件
  var studentInfo = {
    "學號": studentData[0],
    "姓名": studentData[1],
    "性別": studentData[2],
    "年級": studentData[3],
    "班級": studentData[4],
    "生日": studentData[5],
    "聯絡電話": studentData[6],
    "地址": studentData[7],
    "成績紀錄": []
  };

  // 搜尋學生的成績紀錄
  var gradesRange = sheetGrades.getRange(2, 1, sheetGrades.getLastRow() - 1, sheetGrades.getLastColumn());
  var gradesData = gradesRange.getValues().filter(row => row[1] == studentId);

  gradesData.forEach(grade => {
    var courseId = grade[2];
    var courseData = getCourseData(sheetCourses, courseId);
    studentInfo['成績紀錄'].push({
      "課程名稱": courseData.name,
      "授課老師": courseData.teacher,
      "學期": grade[3],
      "成績": grade[4],
      "評語": grade[5]
    });
  });

  return studentInfo;
}

function getCourseData(sheetCourses, courseId) {
  var courseRange = sheetCourses.getRange(2, 1, sheetCourses.getLastRow() - 1, sheetCourses.getLastColumn());
  var courseData = courseRange.getValues().find(row => row[0] == courseId);
  
  return {
    "name": courseData[1],
    "teacher": courseData[2]
  };
}

  1. 貼到該 spreadsheet 下的 Google Apps Scripts 可以先自己寫一個 demo function 試一下
function demo(){
  let a = getStudentData('001')
  console.log(a)
}

執行後

{ '學號': 1,
  '姓名': '王小明',
  '性別': '男',
  '年級': 3,
  '班級': 1,
  '生日': Sun May 01 2005 00:00:00 GMT+0800 (Taipei Standard Time),
  '聯絡電話': 912345678,
  '地址': '台北市某某路',
  '成績紀錄': 
   [ { '課程名稱': '數學',
       '授課老師': '張老師',
       '學期': '2023 上',
       '成績': 85,
       '評語': '表現良好' },
     { '課程名稱': '英文',
       '授課老師': '李老師',
       '學期': '2023 上',
       '成績': 78,
       '評語': '需加強' } ] }

然後你就可以依照自己的需求放到 function calling 的流程裡

關於我

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

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

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

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


上一篇
9-4 Assistant API Functions 撰寫
下一篇
12-3 Gym 使用心得分享
系列文
運用生成式 AI 服務 所提供的API 實做應用開發(以Gemini及ChatGPT為例)42
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言