我所在的 30 人電商公司,知識散落在 Google Docs、Wiki.js 與 Notion 三套系統:HR 政策是 Word 檔、SOP 在 Wiki.js、產品規格在 Notion。新人得在不同系統間找文件,資深同事則反覆回答早已寫過的問題,KM 慢慢變成「有人寫、沒人查」。當同事一個月內第三次問我「客訴升級的流程圖在哪裡」,我決定做一個住在 Microsoft Teams 裡的 AI Bot:一次搜尋三個來源,每個回答都附出處,也能把修正後的知識寫回原系統。


APPROACH
我把對話入口放進大家每天本來就會開的 Microsoft Teams,再從同一個入口搜尋所有來源。 這個 Bot 負責三件事:
我設定的產品標準很直接:查詢必須比打斷資深同事更方便,否則使用者仍會回去問人。
CHALLENGE 01
知識工具常常不是因為功能不足而失敗,而是使用者想不起來要打開它。 我評估過獨立問答網站,雖然介面自由度更高,卻會多一個網址與操作習慣。放進大家每天都開著的 Teams,提問幾乎不增加切換成本;身分驗證也能直接沿用公司帳號,不必另外維護一套登入系統。
CHALLENGE 02
我把「AI 可能答錯」當成設計前提。 因此每個回答都附上引用的原文連結,讓使用者一鍵核對。AI 不會因為接上知識庫就自動可信;只有把驗證成本降到足夠低,使用者才有可能放心採用。
檢索品質則靠真實問法持續校準。最初的 RAG 流程是把問題 embed、做 cosine 搜尋,再生成答案;demo 看起來正常,遇到「Line 推播設定位置?」這種簡短問句卻會失準。正確文件是「Line 推播設定」,但「位置」一詞會把排名拉向 UI 設定類文件,連前五名都進不了。我在搜尋前先用 GPT 將問題展開成 2–3 個語意變體,分別搜尋後,再依每個切片的最高分合併排序,短句問題的召回率因此明顯改善。
後來我再補上語意與關鍵字加權的混合搜尋。起因是一份需求文件明明存在 Notion,換成口語問法卻完全搜不到。純語意檢索對專有名詞與產品代號較弱,「粥寶寶」對模型而言只是一串字。加入關鍵字權重後,同一個問題的文件排名從第 27 名升到第 5 名;問法完整時則能穩定排第一。
這套做法仍有明確限制:查詢展開由 LLM 執行,不是確定性流程,因此同一個問題重問,排名可能波動。我沒有把它包裝成完美檢索。更穩的方向,是讓 AI 同時取得文件與程式碼,交叉比對兩邊內容;這個判斷後來發展成另一個專案:FruitWeb 診斷 MCP。
優化檢索的輸入,必須是真實使用者的問法。 每次搜不到,我就把那個問法帶回測試與調整,讓下一次查詢更接近答案。

CHALLENGE 03
如果發現錯誤的人無法順手修正,知識庫就會逐漸過期。 因此關鍵能力不只有搜尋,Bot 還必須能把修改、追加與新內容發布回三個來源。
#修改 讓同事不用學 Wiki.js 後台,就能修正錯字;#追加 用來補上 SOP 遺漏的步驟;#發布 則把隨手記整理成有標題與結構的 KM 頁面。每次修改 Notion 都會自動附加稽核註記,補足它沒有 per-block 編輯歷史的限制。能力可以開放,但每次變更都必須能追溯。
這讓真正發現問題的人可以當下修正,不必先通知某位編輯再等待處理。貢獻知識從一項需要另外排時間的工作,變成查詢與使用過程中的順手動作。

FEATURES
個人助理。 既然對話介面已經存在,我再加入筆記與提醒,讓 Bot 同時成為個人便利貼。每天 9、14、17 點的提醒推送看似簡單,正式運作後卻暴露出排程可靠性的問題,後面會談到。
全流程圖片支援。 使用者可在筆記與提醒中附圖。圖片先存入私有 Azure Blob,每次顯示才產生短期 SAS token,不留下公開 URL;筆記發布時,圖片會以 base64 嵌入 KM,或透過 Drive 上傳到 Google Docs,原始 blob 隨即刪除。我刻意縮短暫存生命週期,減少需要長期保護的資料。
暫存檔存在得越短,需要長期保護的資料就越少。 資安不只靠權限,也靠減少不必要的留存。
RESULTS
系統從 2026 年 3 月運作至今,穩定維持 690+ 份文件、約 9,600 個索引切片與三個知識來源;每小時同步一次,回答時間 < 3 秒,每月 Azure 成本約 NT$2,500。7 月加入使用遙測後,我也開始能用數據觀察實際使用分佈,而不是只靠身邊回饋。
最有意思的不是技術指標,是使用樣態:
#發布 流程,Bot 也成為他們主要的知識貢獻入口。我也觀察到知識庫比過去更快累積內容。不是因為增加了寫文件的要求,而是發布門檻降低後,貢獻自然發生在使用過程裡。
LESSONS
每次中斷我都留下根因分析,兩次部署事故最後變成一條硬規則:這個服務永遠使用完整包一次替換,不做增量部署。規則也直接寫進部署腳本,不再依賴操作人員記得。
完整的 postmortem 在 repo 裡,包含架構選擇、和我會重做的部分。
NEXT
STACK
TypeScript、Node.js、Azure OpenAI(gpt-4.1 + text-embedding-3-small)、Microsoft Bot Framework、Wiki.js GraphQL、Google Drive API + Docs API、Notion API、Azure Blob Storage、Azure SQL、Application Insights。部署在 Azure App Service。
原始碼在 GitHub(jean199801/teams-knowledge-assistant)——README 有完整的架構說明,需要技術細節可以看。