在 LLMs 中,後端解決方案的重要性主要來自於 function calling。因為 RAG 的方法多種多樣,到目前為止,尚未有一種方法能完全提供正確的回答,容易產生錯誤的幻覺。然而,透過 function calling 獲得的答案,LLMs 不會再捏造。如果你的 LLMs 必須提供正確的答案,那麼你一定要學習後端解決方案,以便串接正確的資料,讓 LLMs 可以如實提供正確的答案。
此外,使用 function calling 在一定程度上可以避免 prompt hacking 及惡意資料獲取。
後端解決方案有百百種這裡示範不用錢的範例
用 google spreadsheet 規劃一個 學生成績管理的 資料庫的範例
學生資料
)學號 | 姓名 | 性別 | 年級 | 班級 | 生日 | 聯絡電話 | 地址 |
---|---|---|---|---|---|---|---|
001 | 王小明 | 男 | 3 | 1 | 2005/05/01 | 0912345678 | 台北市某某路 |
002 | 李小華 | 女 | 2 | 3 | 2006/08/12 | 0987654321 | 新北市某某路 |
003 | 張大偉 | 男 | 1 | 5 | 2007/03/22 | 0922333444 | 桃園市某某路 |
成績紀錄
)成績編號 | 學號 | 課程代號 | 學期 | 成績 | 評語 |
---|---|---|---|---|---|
001 | 001 | C001 | 2023 上 | 85 | 表現良好 |
002 | 001 | C002 | 2023 上 | 78 | 需加強 |
003 | 002 | C001 | 2023 上 | 92 | 優秀 |
004 | 003 | C003 | 2023 上 | 88 | 穩定表現 |
課程資料
)課程代號 | 課程名稱 | 授課老師 | 學分數 | 授課時間 |
---|---|---|---|---|
C001 | 數學 | 張老師 | 3 | 週一 10:00-12:00 |
C002 | 英文 | 李老師 | 2 | 週二 14:00-16:00 |
C003 | 物理 | 王老師 | 3 | 週三 09:00-11:00 |
用 GAS 寫一個 rest api
輸入學號 就可以將 該學生的 基本資料 成績紀錄 以及課程名稱授課老師都寫出來
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]
};
}
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年 講座 紀錄
最後這篇文章若有切合你的需求,敬請訂閱按讚分享