輸出內容
========================================
Pattern 13: RAG 檢索增強生成
========================================
⚠️ 尚未建立索引,開始建立...
🔨 開始建立知識庫索引...
📄 處理文檔: 優惠券使用規則.txt
- 段落 1: 優惠券使用規則...
- 段落 2: 優惠券類型:
我們提供折扣券、滿額折抵券、免運券三種優惠券。...
- 段落 3: 折扣券:
直接打折,如「全站 9 折券」。可與會員等級折扣擇一使用(選較優惠的)。...
- 段落 4: 滿額折抵券:
需達門檻才可使用,如「滿 1000 折 100」。可與會員折扣同時使用。...
- 段落 5: 免運券:
免除運費,但不適用於離島及急件配送。...
- 段落 6: 使用限制:
- 每筆訂單限用一張優惠券
- 優惠券不可折抵運費(免運券除外)
- 客製化商品不適用折...
- 段落 7: 優惠券有效期:
每張優惠券都有標示有效期限,過期後自動失效。優惠券一旦使用即失效,退貨後優惠券不會返...
- 段落 8: 如何取得優惠券:
- 首次註冊即贈送 100 元折抵券
- 會員生日當月自動發送 200 元折抵券
...
- 段落 9: 優惠券疊加規則:
滿額折抵券可與會員等級折扣同時使用,但折扣券需與會員折扣擇一。先計算會員折扣,再扣...
📄 處理文檔: 客製化商品說明.txt
- 段落 1: 客製化商品說明...
- 段落 2: 什麼是客製化商品:
客製化商品包括刻字蛋糕、照片蛋糕、特殊造型蛋糕、個人化禮盒等需要根據您的需求特別...
- 段落 3: 客製化預訂時間:
- 一般客製化蛋糕:需提前 3 天預訂
- 複雜造型蛋糕(如 3D 立體蛋糕):需...
- 段落 4: 客製化內容限制:
文字刻字:最多 20 個中文字或 40 個英文字母
照片規格:建議解析度 300d...
- 段落 5: 客製化商品價格:
基本刻字服務免費
照片蛋糕加價 200 元
複雜造型蛋糕依難度另外報價,通常為基礎...
- 段落 6: 客製化商品不可退換:
由於客製化商品是專為您製作,下單後無法更改或取消,也不接受退換貨。請在下單前仔...
- 段落 7: 白金卡會員優先排程:
白金卡會員客製化訂單享有優先排程權,在高峰期仍可保證如期完成製作。...
📄 處理文檔: 會員等級制度.txt
- 段落 2: 等級分類:
我們的會員分為三個等級:銀卡會員、金卡會員、白金卡會員。等級依照年度累積消費金額計算。...
- 段落 3: 銀卡會員(預設等級):
- 門檻:註冊即成為銀卡會員
- 優惠:生日當月享 9 折優惠
- 點數回饋...
- 段落 4: 金卡會員:
- 門檻:年度累積消費滿 10,000 元
- 優惠:全年 95 折、生日當月 85 折...
- 段落 5: 白金卡會員:
- 門檻:年度累積消費滿 30,000 元
- 優惠:全年 9 折、生日當月 8 折
...
- 段落 6: 點數使用規則:
100 點可折抵 100 元,結帳時自動提示可用點數。點數有效期為獲得後一年。...
- 段落 7: 等級計算時間:
每年 1 月 1 日重新計算等級,依前一年度(1/1-12/31)的消費總額決定當年...
📄 處理文檔: 退換貨政策.txt
- 段落 2: 一般商品退換貨規定:
購買後 7 天內可無條件退換貨,商品須保持全新未使用狀態,包裝完整。退貨時需附...
- 段落 3: 客製化商品不可退換:
客製化蛋糕、刻字商品、個人化禮盒等客製化商品,因已根據顧客需求製作,恕不接受退...
- 段落 4: 食品類商品退換規定:
新鮮蛋糕、甜點等食品類商品,基於衛生考量,除非商品本身有瑕疵(如破損、變質),...
- 段落 5: 瑕疵品處理:
若收到商品有瑕疵或損壞,請於收到商品後 24 小時內拍照並聯繫客服,我們會立即為您換貨...
- 段落 6: 退款處理時間:
退貨商品送回後,我們會在 3-5 個工作天內完成檢查並退款。退款將退回原付款方式,信...
📄 處理文檔: 配送與運費.txt
- 段落 2: 配送區域:
我們提供全台灣本島配送服務。離島地區(金門、馬祖、澎湖)需額外加收運費。...
- 段落 3: 運費標準:
- 訂單金額滿 1200 元:免運費
- 訂單金額未滿 1200 元:運費 120 元
...
- 段落 4: 配送時間:
一般商品:下單後 2-3 個工作天到貨
客製化商品:需 5-7 個工作天製作,下單後約 ...
- 段落 5: 指定配送時段:
可選擇以下時段配送(需在訂單備註說明):
- 上午時段:9:00-12:00
- 下...
- 段落 6: 無法選擇特定配送日期,僅能選擇時段。...
- 段落 7: 緊急配送服務:
台北市、新北市部分區域提供當日配送服務,需在上午 10 點前下單,加收 200 元急...
✅ 索引建立完成!共 33 個文檔段落
💾 已儲存至: /var/www/ai-agent-pattern-notes/patterns/13-rag/embeddings.json
========================================
示範 1: 退換貨政策查詢
========================================
【問題】我買的客製化蛋糕可以退貨嗎?
--- 無 RAG 的回答 ---
💬 無 RAG(LLM 直接回答)...
很抱歉,客製化蛋糕通常是無法退貨的,因為它們是根據客戶的特殊要求製作的。不過,如果蛋糕在運送過程中受損,請儘快聯繫我們的客服,我們會協助您處理這個問題。謝謝您的理解!
--- 使用 RAG 的回答 ---
🔍 檢索相關文檔...
查詢: 我買的客製化蛋糕可以退貨嗎?
📊 相似度排名 (Top 3):
1. [0.7262] 退換貨政策.txt - 客製化商品不可退換:
客製化蛋糕、刻字商品、個人化禮盒等客製化商品,因已根據顧客需求製作,恕不接受退換貨。下單前請確認訂...
2. [0.6675] 退換貨政策.txt - 食品類商品退換規定:
新鮮蛋糕、甜點等食品類商品,基於衛生考量,除非商品本身有瑕疵(如破損、變質),否則不接受退換貨。...
3. [0.5948] 客製化商品說明.txt - 客製化商品不可退換:
由於客製化商品是專為您製作,下單後無法更改或取消,也不接受退換貨。請在下單前仔細確認內容。...
💬 使用 RAG 生成答案...
✨ 答案:
很抱歉,客製化蛋糕因已根據您的需求製作,恕不接受退換貨。請在下單前仔細確認訂單內容。
========================================
示範 2: 運費查詢
========================================
【問題】訂單滿多少可以免運費?
--- 無 RAG 的回答 ---
💬 無 RAG(LLM 直接回答)...
訂單滿額免運費的條件可能因店家而異。一般來說,許多電商平台會設定在滿100元或300元時可以享受免運費。如果您需要確切的金額,建議您查看我們網站上的運費政策或聯繫客服確認。
--- 使用 RAG 的回答 ---
🔍 檢索相關文檔...
查詢: 訂單滿多少可以免運費?
📊 相似度排名 (Top 3):
1. [0.6530] 配送與運費.txt - 運費標準:
- 訂單金額滿 1200 元:免運費
- 訂單金額未滿 1200 元:運費 120 元
- 離島地區:基本運...
2. [0.5797] 優惠券使用規則.txt - 免運券:
免除運費,但不適用於離島及急件配送。...
3. [0.4617] 優惠券使用規則.txt - 使用限制:
- 每筆訂單限用一張優惠券
- 優惠券不可折抵運費(免運券除外)
- 客製化商品不適用折扣券
- 部分特價商...
💬 使用 RAG 生成答案...
✨ 答案:
訂單金額滿 1200 元就可以免運費。
========================================
示範 3: 會員優惠查詢
========================================
【問題】金卡會員有什麼優惠?
--- 無 RAG 的回答 ---
💬 無 RAG(LLM 直接回答)...
金卡會員通常會享有以下一些優惠:
1. **獨家折扣**:金卡會員通常可以享受比一般會員更高的折扣。
2. **積分回饋**:購物時可獲得更高的積分回饋,未來可用於折抵消費。
3. **專屬活動**:金卡會員可能會收到邀請參加專屬的促銷活動或新品發佈會。
4. **優先購買權**:在新品釋出時,金卡會員可享有優先購買的權利。
5. **免費配送**:部分金卡會員可能會享有免運費的優惠。
6. **延長保固或售後服務**:某些商品可能會因為金卡會員身份而獲得更長的保固期或更完善的售後服務。
具體的優惠內容會依據不同商家的會員計劃而有所不同,建議您查詢我們的官方網站或客服獲取更詳細的資訊。
--- 使用 RAG 的回答 ---
🔍 檢索相關文檔...
查詢: 金卡會員有什麼優惠?
📊 相似度排名 (Top 3):
1. [0.7359] 會員等級制度.txt - 金卡會員:
- 門檻:年度累積消費滿 10,000 元
- 優惠:全年 95 折、生日當月 85 折
- 點數回饋:消費...
2. [0.7155] 會員等級制度.txt - 白金卡會員:
- 門檻:年度累積消費滿 30,000 元
- 優惠:全年 9 折、生日當月 8 折
- 點數回饋:消費 ...
3. [0.7053] 會員等級制度.txt - 銀卡會員(預設等級):
- 門檻:註冊即成為銀卡會員
- 優惠:生日當月享 9 折優惠
- 點數回饋:消費 100 元得...
💬 使用 RAG 生成答案...
✨ 答案:
金卡會員的優惠包括:
- 全年95折
- 生日當月85折
- 消費100元得2點的點數回饋
- 每季免費一個6吋蛋糕的專屬禮遇。
========================================
RAG 系統核心組件說明
========================================
✅ Embedding: 使用 OpenAI text-embedding-3-small
- 將文本轉換成 1536 維向量
- 捕捉語義相似性
✅ Vector Storage: 純 PHP + JSON 檔案
- 儲存文檔段落及其 embedding
- 適合小型知識庫(< 1000 文檔)
✅ Retrieval: Cosine Similarity 手寫實作
- 計算查詢與每個段落的相似度
- 返回 Top-K 最相關文檔
✅ Generation: 將檢索結果作為 context 給 LLM
- LLM 根據知識庫內容生成準確答案
- 避免幻覺(hallucination)
========================================
對比總結
========================================
❌ 無 RAG:
- LLM 憑記憶或猜測回答
- 可能給出錯誤或過時的資訊
- 無法回答專屬業務規則
✅ 有 RAG:
- 基於實際知識庫內容回答
- 準確、即時、可追溯來源
- 知識庫更新後立即生效
💡 提示:刪除 embeddings.json 可重新建立索引
原始碼
https://github.com/howtomakeaturn/ai-agent-pattern-notes/tree/main/patterns/13-rag
問一個問題
如果客戶的問題 實在沒有適合的答案
rag 這結構 會承認嗎
還是會從相似度最高的 亂回答一通
好問題!這是 RAG 系統的關鍵品質問題。
目前的實作有風險會亂回答,因為:
我本以為 RAG 就是 embedding + vector db
原來單純用個 json file 存 也是可以
所謂 將文本轉換成 1536 維向量 的意思是
文本長這樣

然後簡單按段落分割

每個段落轉成 1536 維向量

查詢的時候
把用戶查詢內容 轉換成 向量(embeddings)
然後計算每個文檔段落與查詢的相似度 -> 使用 Cosine Similarity
取出相似係數最高的 K 個段落
然後把這 K 個段落 當作參考資料 append 到 prompt 給 llm
就這樣而已
我問一下 embeddings 這種向量 是針對一整個段落的喔
我還以為 向量 都是針對單字為主
我誤會喔?
然後用戶的問題 跟 知識庫的段落 還有相似性喔?一個是Q一個是A還相似喔?
非常好的問題!這是很多人初學 RAG 時的困惑點 👍
你沒有誤會,但有兩種不同技術:
傳統 NLP (Word Embedding)
早期技術:Word2Vec, GloVe
現代 Embedding (Text/Sentence Embedding)
OpenAI text-embedding-3-small
關鍵差異:
❌ 不是把每個字拆開 embedding
✅ 是把整段文字的語義壓縮成一個向量
✅ 長度不限(可以是5個字或500個字)
這是 語義相似性,不是文字相似!
範例說明
<?php
// 用戶問題
$query = "金卡會員有什麼優惠?";
// 知識庫段落
$answer = "金卡會員:門檻年度累積消費滿10,000元,優惠全年95折、生日當月85折...";
文字上完全不同:
但語義上極度相關:
Embedding 怎麼做到的?
OpenAI 的 embedding 模型經過大量訓練:
訓練時學到的模式:
"有什麼優惠?" 和 "優惠:全年95折" → 應該靠近
"怎麼退貨?" 和 "退貨政策:7天內..." → 應該靠近
"iPhone" 和 "蛋糕配送" → 應該遠離
模型把「問題」和「相關答案」映射到向量空間的相近位置。
實際相似度示例
問題:"金卡會員有什麼優惠?"
↓
相似度結果:
0.87 ✅ "金卡會員:門檻年度累積消費滿10,000元,優惠全年95折..."
0.65 ✅ "白金卡會員:門檻年度累積消費滿30,000元,優惠全年9折..."
0.45 ⚠️ "銀卡會員(預設等級):門檻註冊即成為銀卡會員..."
0.15 ❌ "配送時間:一般商品下單後2-3個工作天到貨"
為什麼不是 Q 配 Q、A 配 A?
你可能以為應該這樣:
❌ 錯誤思路:
知識庫存 Q&A 對
"Q: 金卡會員有什麼優惠?"
"A: 全年95折..."
用戶問問題 → 匹配知識庫的 Q → 返回對應的 A
但 RAG 更強大:
✅ RAG 思路:
知識庫直接存「知識/事實/政策」(都是 A)
"金卡會員:全年95折、生日當月85折..."
用戶問任何形式的問題 → 語義匹配 → 返回相關知識
好處:
總結