作者:劉士銓 / 臺灣大學計算機及資訊網路中心網路組工讀生
本專案以檢索增強生成(RAG)技術為核心,結合LangChain開發框架、Chroma向量資料庫與開源語言模型,打造一套校內智慧客服系統。系統透過向量搜尋從問答集中擷取相關內容,輔助語言模型生成回應,有效降低錯誤資訊風險。同時支援對話記憶與流式回覆,強化使用者體驗。未來將持續優化效能與穩定性,期望成為實用且可信的校內服務工具。
系統架構
這套系統是由檢索增強生成(Retrieval-Augmented Generation,簡稱RAG)技術所驅動。我們採用了功能強大的LangChain開發框架,並搭配專門儲存數據的Chroma向量資料庫、Hugging Face社群的開源embedding模型以及Ollama模型平台共同協作而成。不過,在我們翻開架構圖之前,如果不先解釋上面的專有名詞與RAG,大家可能就放棄閱讀了XD,因此,我們先帶大家來認識RAG吧。
什麼是檢索增強生成?
RAG要解決兩個十分直觀的問題。舉例來說,如果我們問一個在2021年就完成訓練的大型語言模型(Large Language Model):「現在的台灣總統是誰?」它很有可能會告訴你是「蔡英文」。這不怪它,因為在它訓練的那段日子裡,全世界的資料庫確實是這麼寫的。對於訓練結束後才發生的時事,模型的回答可能會失準;另一種情況是如果我們問它太specific的問題,例如:「公館麥當勞旁邊那間店是開什麼的?」它可能會憑感覺編造一個聽起來很合理的答案,但如果我們打算把它當作專業的客服系統或在地嚮導,回答的品質則大大的不及格。你發現了嗎?語言模型雖然威力無窮,但仍具有時間與回答品質的問題,因此,為了解決這兩個問題,RAG誕生了!
RAG的方法是我們會先準備一些問答集,並放到資料庫內(Chroma),當使用者輸入問題時,我們則嘗試找出跟使用者問題最相近的k個問題,並隨後一起丟給大型語言模型回答,如下圖。

圖表 1:RAG架構
系統實作
首先,我們利用常見的爬蟲套件BeautifulSoup,將事先準備好的QA問答集內容進行爬取。接著,將這些文本進行編碼(encode),並存入Chroma向量資料庫中。當使用者輸入問題時,系統會先將該問題同樣進行編碼,再透過向量搜尋的方式,從資料庫中找出最相關的五筆問答內容,並一併提供給大型語言模型作為回答依據。
此外,得益於功能強大的LangChain框架,本系統也支援多項進階功能,例如short-term memory(讓前後問題能夠互相承接,對話更具連貫性),以及stream(流式回答),讓模型在「想到什麼就說什麼」的同時即時輸出回覆,大幅降低等待時間,也明顯提升了使用者的互動體驗。
不過,在實際測試過程中,我們也發現使用者有時會提出並未收錄於問答集中的問題。因此,當使用者輸入問題後,系統會先交由語言模型判斷該問題是否與計中網路組所準備的問答內容相關;若判定相關,才會執行上述的搜尋與生成流程,反之則會婉拒回答。
之所以採取「拒答」,主要是為了降低錯誤資訊的風險。舉例來說,在測試期間,我們曾詢問語言模型:「請問計中在哪裡?」,結果模型回覆「在台大總圖書館旁邊」,這個答案顯然並不正確。為避免類似情況誤導使用者,最終決定:凡是與計中網路組業務無關的問題,一律不予回覆,以確保回答內容的可靠性。
實際使用畫面如下圖所示。可以發現,語言模型的回答中會主動嵌入相關連結,這是我們在後續調整中加入的設計,目的是讓使用者能夠快速取得進一步資訊,進一步提升整體使用體驗。

圖表 2:客服系統實際使用畫面
結語和未來展望
整體而言,本專案成功建置了一套以RAG技術為核心的智慧客服系統,不僅能有效降低大型語言模型產生錯誤資訊的風險,也能在既有問答資料的基礎上,提供即時且具脈絡性的回應,作為校內服務的輔助工具具有相當的實用價值。
在未來的優化方向上,首先將進行系統的壓力測試,以了解在同時有大量使用者連線時,系統的回應時間與穩定度表現,並評估目前架構下的負載上限。接著,亦可針對 回應延遲進行優化,例如調整向量搜尋流程、模型推論設定,或加入快取機制,進一步縮短使用者等待回覆的時間。此外,在服務穩定性方面,也能透過更完整的錯誤處理與監控機制,讓系統在實際長時間運行下更加可靠。
從個人角度來看,隨著這個專案的完成,我也明顯感受到自己在系統設計、技術整合,以及實務問題解決能力上的成長。從一開始對架構一知半解,到能夠實際將多種工具與模型串接成一套可用的服務,這段過程相當有成就感。期望未來能有更多機會,繼續開發各種「酷酷的」系統,把技術真正轉化為能服務大家的工具。