概述
- FAQ 資料管理(faqs.csv)
- 對話歷史記錄(SQLite / JSONL 可選)
- 向量檢索(Sentence-Transformers embedder + Chroma / FAISS 選用)
- 簡易 CLI 與 Colab 執行範例
- 測試流程
目錄
- run_faq.py:主 CLI 程式(檢索 FAQ、簡單回覆、記錄對話歷史)
- run_chat.py:簡易 CLI 聊天(使用 SQLite 記憶示範)
- memory_sqlite.py:SQLite 記憶工具(初始化、寫入、取最近)
- simple_memory.py:JSONL 記憶工具
- day27_test.ipynb 或 day27_test.py:Day27 測試流程(20 筆中文測試、匯出報表)
- faqs.csv:FAQ 資料(id, question, answer)
- faq_question_embeddings.npy:FAQ 問題 embeddings(可重建)
快速安裝
i> !pip install -q sentence-transformers chromadb faiss-cpu pandas transformers gradio
ii> 把專案檔案(run_faq.py, memory_sqlite.py, faqs.csv 等)貼成 cell 並執行 %%writefile 以建立檔案
FAQ 檔案格式
CSV 欄位範例(UTF-8 / utf-8-sig)
更新 FAQ 的基本流程:
- 編輯 faqs.csv(加入/修改/刪除列)
- 重新跑 embedding(或刪除 faq_question_embeddings.npy 讓程式重建)
- 重新建立或 upsert 向量索引(Chroma/FAISS)
測試 20 筆中文測試
- 準備 test_queries.csv(20 筆)
- 載入 FAQ 的 embeddings
- 對每一題做 top-k 檢索
- 自動判定(id 比對 or fuzzy 字串比對)
常見錯誤與排除建議
ValueError: You are using a deprecated configuration of Chroma.
- 原因:使用舊版 chromadb.Client(Settings(...)) 初始化
- 解法:改用 chromadb.PersistentClient(path=...) 並使用 get_or_create_collection() / upsert()
ModuleNotFoundError: No module named 'memory_sqlite'
- 原因:在 Notebook 內沒有把 .py 檔寫出來
- 解法:使用 %%writefile memory_sqlite.py 建立檔案,或把程式放在同一個 cell 中直接執行
argparse 在 Colab 出現 -f /.../kernel-xxx.json 參數錯誤
- 解法:在程式中使用 args, unknown = parser.parse_known_args() 或於 Colab 中以 !python run_faq.py 單獨執行
記憶體不足 / OOM
- 解法:使用較小的 embedder(如 paraphrase-multilingual-MiniLM-L12-v2)、減少 batch_size、或在 Colab 選用 GPU/TPU(或用 CPU 版本的模型)
Chroma distances 行為不同
- 注意:不同版本的 Chroma 返回距離(越小越好)或相似度(越大越好),上線前務必 print() 檢查 sample 值並調整判定邏輯(例如把距離轉為 similarity: sim = 1/(1+dist))