前幾天,我們已經完成:
但是,如果 RAG 只能在聊天工具裡展示,評審可能會繼續問:
因此,今天要把 RAG 從「後端技術」轉換成「使用者可以操作的網站功能」。
我們要完成一個最小可行的 AI 查詢介面:
今天不追求漂亮動畫,而是先確保:
使用者知道自己輸入了什麼、系統正在做什麼,以及答案根據哪裡的資料。
網站不要直接把 API 金鑰放在瀏覽器裡。
比較安全的架構是:
使用者
-> 網站介面
-> 後端 API
-> 資料檢索
-> AI 模型
-> 回傳回答與來源
-> 網站顯示結果
請在下方位置插入今天的架構圖。

圖 1:RAG 網站從使用者輸入、後端驗證、資料檢索、AI 生成,到來源卡片、錯誤處理及操作紀錄的完整流程。
圖片替代文字:
RAG 網站由使用者介面、後端 API、檢索器與 AI 模型組成,並將來源卡片、安全錯誤及操作紀錄回傳給使用者。
製作方式:自行繪製 SVG 並輸出為 1800 × 1100 PNG,未使用來源不明的網路圖片。
初學者可能會想:
網頁按鈕
-> 直接呼叫 AI API
-> 顯示回答
這樣做的主要問題是:
比較好的方式是:
前端只呼叫自己的後端 API
後端再呼叫檢索服務與 AI 模型
前端只需要知道:
在寫網站之前,先決定前端與後端如何溝通。
{
"question": "晚上還有 100 元以下的素食餐點嗎?",
"budget": 100,
"diet_tags": ["vegetarian"],
"time": "2026-09-23T18:30:00+08:00",
"dataset_version": "places_v1.0"
}
{
"status": "success",
"answer": "目前資料中有兩個可能符合條件的項目。",
"sources": [
{
"source_id": "SRC001",
"title": "校園餐廳公告",
"url": "https://example.edu.tw/dining",
"verified_at": "2026-09-22T09:00:00+08:00"
}
],
"retrieved_count": 3,
"dataset_version": "places_v1.0"
}
{
"status": "no_result",
"answer": "目前資料中沒有完全符合條件的項目。",
"suggestions": [
"放寬預算條件",
"移除飲食限制",
"改變搜尋時段"
],
"sources": [],
"dataset_version": "places_v1.0"
}
{
"status": "error",
"error_code": "SERVICE_TIMEOUT",
"message": "目前查詢時間較久,請稍後再試。",
"retryable": true
}
API 契約的好處是:
一個 AI 查詢頁面不能只有「有結果」和「沒有結果」。
使用者還沒有輸入問題。
畫面可以顯示:
請輸入你的預算、地點與需求。
例如:晚上 100 元以下的素食餐點
系統正在搜尋資料或等待 AI 回覆。
畫面可以顯示:
正在搜尋專題資料...
正在整理符合條件的結果...
不要只顯示一個無限旋轉圖示,因為使用者不知道系統到底在做什麼。
回答應該分成三個區域:
不要只顯示:
查無資料
應該提供下一步:
目前沒有完全符合的資料。
你可以嘗試:
- 放寬預算
- 更換搜尋地點
- 移除部分限制
- 改用較早的時段
錯誤訊息應該讓一般使用者看得懂:
目前服務暫時忙碌,資料沒有遺失。
請稍後再試,或先查看目前可用的資料。
不要直接把伺服器錯誤內容顯示給使用者,例如:
Internal Server Error
Database Connection Failed
這些內容對開發者有用,對一般使用者沒有幫助。
如果 AI 回答沒有來源,使用者很難判斷可信度。
每張來源卡片至少應包含:
| 欄位 | 用途 |
|---|---|
| source_id | 對應原始資料 |
| title | 顯示來源名稱 |
| source_type | 官方網站、訪談或模擬資料 |
| verified_at | 最近查證時間 |
| dataset_version | 使用的資料版本 |
| url | 回到原始資料 |
| status | verified、simulated 或 unknown |
範例:
來源:校園餐廳公告
類型:官方網站
查證時間:2026-09-22
資料版本:places_v1.0
狀態:已查證
查看原始資料
來源卡片不應該只是裝飾。
評審點開來源後,應該能理解:
錯誤做法:
{
"answer": "推薦校園素食坊。"
}
這樣網站不知道:
比較完整的格式:
{
"status": "success",
"answer": "目前有一個項目符合預算與飲食條件。",
"recommendations": [
{
"place_id": "P0001",
"name": "校園素食坊",
"reason": "價格範圍符合預算,資料中標示為素食。",
"matched_conditions": [
"budget",
"diet"
],
"verification_status": "verified",
"source_id": "SRC001"
}
],
"warnings": [
"營業時間尚未完成今日查證"
]
}
這樣網站可以分別顯示:
請根據提供的專題資料回答使用者問題。
輸出必須包含:
1. status
2. answer
3. recommendations
4. matched_conditions
5. warnings
6. sources
7. dataset_version
規則:
- 只能使用提供的資料。
- 沒有證據時,請寫入 warnings。
- 不要自行補上價格、營業時間或地址。
- 每個推薦項目都要對應 source_id。
- 如果沒有完全符合的項目,status 使用 no_result。
- 如果系統無法完成查詢,status 使用 error。
- 不要輸出未定義的欄位。
提示詞可以幫助 AI 產生一致格式,但不能完全取代程式檢查。
後端仍應檢查:
第一版不需要做得很複雜。
建議包含:
| 欄位 | 元件 | 說明 |
|---|---|---|
| question | 文字輸入框 | 使用者描述需求 |
| budget | 數字輸入框 | 預算上限 |
| location | 下拉選單 | 搜尋地點 |
| diet_tags | 核取方塊 | 飲食限制 |
| time | 日期與時間 | 查詢時段 |
| submit | 按鈕 | 送出查詢 |
送出前可以做基本檢查:
前端檢查是為了改善使用體驗。
真正的安全檢查仍然必須放在後端。
不要把秘密金鑰寫進:
即使名稱叫做 secret,只要被打包到瀏覽器,使用者仍可能看到。
API 金鑰應該只存在後端服務的環境設定中。
AI 查詢可能受到:
影響。
網站至少要提供:
查詢時間過久,請稍後重試。
同時記錄:
不要自動無限重試,否則可能造成更多請求與額外成本。
至少要測試:
AI 專題的 Demo 不只要展示成功案例,也要能說明失敗時如何處理。
如果網站查詢失敗,不能只顯示空白畫面。
使用者需要知道:
透明的錯誤狀態會比假裝系統永遠成功更可靠。
| 驗收項目 | 合格標準 |
|---|---|
| 問題輸入 | 使用者能清楚輸入查詢 |
| 條件輸入 | 預算與飲食限制可設定 |
| 載入狀態 | 查詢期間有明確提示 |
| 成功結果 | 顯示回答與推薦項目 |
| 來源顯示 | 每個推薦項目都有來源 |
| 沒有結果 | 提供調整條件的建議 |
| 錯誤狀態 | 顯示可理解的錯誤訊息 |
| 防止重複送出 | 查詢期間按鈕會停用 |
| 個資安全 | 不顯示不必要的個人資料 |
| 版本透明 | 顯示使用的資料版本 |
| 行動裝置 | 手機畫面仍能完成主要流程 |
| Demo 速度 | 五分鐘內能完成一次完整展示 |
請畫出以下流程:
輸入條件
-> 前端檢查
-> 顯示載入狀態
-> 呼叫後端 API
-> 顯示回答
-> 顯示來源
另外畫出:
API 失敗
-> 顯示錯誤
-> 提供重新嘗試
完成:
至少完成:
每張卡片至少顯示:
測試:
把 RAG 接到網站,不只是增加一個聊天輸入框。
一個可靠的 AI 網站必須同時處理:
使用者輸入
-> 後端驗證
-> 資料檢索
-> AI 生成
-> 來源回傳
-> 狀態顯示
-> 錯誤處理
-> 人工驗收
今天的核心觀念是:
AI 的回答只是結果,網站還必須讓使用者理解結果如何產生。
能得獎的 Demo 通常不只展示成功回答,也能展示:
Day 10,我們將使用 Vibe Coding 加速製作網站,學習如何把需求、資料契約與 API 規格交給 AI 協助開發,同時避免產生看似能跑、實際無法驗收的程式。
OpenAI API
https://developers.openai.com/api/
OpenAI File Search
https://developers.openai.com/api/docs/guides/tools-file-search
Google Cloud RAG Engine
https://docs.cloud.google.com/gemini-enterprise-agent-platform/build/rag-engine/rag-overview
GOV.UK API 設計指南
https://www.gov.uk/service-manual/technology/application-programming-interfaces-apis
MDN Fetch API
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API
以上資料於 2026 年 9 月 23 日查閱。API 功能、模型方案、免費額度與價格可能變動,使用前請以官方最新文件為準。