個人網站 · 問答
把站內問答拆開來看
問答小窗背後是一個小型 RAG。這張圖把整個流程拆成節點:六個步驟、每一步用到的函式,以及知識庫裡的主題與段落。點任何一個節點,可以看說明、原始碼或段落內容。
拖曳節點或背景,滾輪縮放;點節點看內容
關聯圖需要 JavaScript。下面的清單列出相同的步驟、函式與主題。
流程與程式六個步驟,各自用到的函式
-
程式先擋掉明確索取機密或要求改寫規則的句子,並遮蔽 Email、電話與金鑰。純打招呼、純問聯絡方式直接回,不呼叫模型。
- 把訪客輸入整理成一行,超過上限或太短回傳空字串。 @param {unknown} input
- 送給外部服務前遮蔽可能的個資與金鑰。 @param {string} text
- 不需要模型就能決定的情況。
-
RAG 的 R。問題拆成英文字詞與中文雙字詞,和公開段落比對重疊,再加上區段關鍵字、專案別名與對話脈絡,取分數最高的 10 段當候選。不用向量資料庫。
- 拉丁字詞(含數字)與中文雙字詞。 @param {string} text @returns {Set<string>}
- 關鍵字是否出現在問題裡。純英數的短詞要求詞界,避免 "ai" 命中 "email"。 @param {string} query 已 normalize @param {string} keyword
- 依關鍵字、別名、字詞重疊與對話脈絡為每個段落計分,高分在前。
- 常數
-
把問題與候選一次交給 Jev:意圖、主題、是否夾帶無關請求,以及每一段是否直接回答了問題。Jev 只回傳分類與機率,不產生文字;回應格式不對就整個不採用。
- 函式
- 第二次請求:只針對某個主題裡還沒判斷過的段落問「是否含有答案」。
- 回應格式不符就丟錯,由呼叫端退回本機檢索;不拿格式不明的結果來決定回覆。
- 常數
-
程式依機率與固定的門檻決定:引用段落、提供聯絡方式、婉拒,或說明公開資料不足。主題判定後只引用該主題的段落,必要時針對主題補看一次。
- 依 Jev 的判斷決定回覆。先看證據:知識庫裡的段落都是公開內容,只要有段落確實回答了問題就引用;
- 常數
-
回覆一律是頁面上的原文加來源連結,不自由生成。建議問題指向同一主題裡還沒引用的段落,點了直接取該段,不必再問模型。
- 函式
- 回答之後的建議:同一主題裡還沒被引用的段落。帶 pick,點選時直接取該段,不必再問模型。
-
Jev 無法使用、額度用完或回應格式不對時,只靠檢索分數回答,並在回覆上標示。門檻比較保守,寧可說資料不足。
- 沒有 Jev 時只靠檢索分數決定。
- 常數
知識庫問答只會引用這些段落
建置時由頁面內容直接產生:每個專案頁與關於頁的每個區段是一個段落,附固定錨點。問答只會引用這裡的文字。
- 駿斯 5 套系統總覽 11 個段落
- 家教課程系統 9 個段落
- 暑期課程報名平台 6 個段落
- 跨場館排班系統 9 個段落
- 泳池協同課整合系統 7 個段落
- LINE OA BOT 7 個段落
- ioredis 6 個段落
- WorldMonitor 4 個段落
- What The 髮 4 個段落
- 本站 11 個段落
- 關於 12 個段落