做過一個紡織工藝問答機器人。它的骨架並不複雜。把資料切開、存好,按問題找回相關段落,再交給大模型組織成回答。我最記得的一件事,是行業裡的專有名詞在通用搜索裡經常出錯。
我之前所在的一家紡織產業網際網路平臺想做這件事。平臺手裡有工藝手冊、歷史問答記錄和標準操作流程,目標是讓班組長用一句話查到工藝標準和操作規範,少翻手冊,也少打電話去問老師傅。
先是對話框,後來改成了表單
早期版本是一個純對話框。一句典型的提問,是「棉紗 40S 的捻度標準是多少?」
問題出在提問的人身上。工廠裡的使用者不習慣寫完整的問題,很多人只打一兩個詞,或者只能描述一個模糊的現象。對話式對提問品質要求很高,一線工人寫不出好問題,機器人接到的就是一個殘缺的問題。
後來的迭代方向,是模板化引導。預設幾個高頻場景按鈕,比如查工藝標準、查操作方法;每個場景配一個輕量表單,讓人填品名和規格參數;表單內容轉成標準問題,再去檢索。回答出來以後,再問一句還要查什麼。
覆盤時我的判斷是,對 C 端使用者,對話式更自然;對車間裡的操作工,表單反而更高效。
檢索流程本身不花哨
資料先統一轉成 Markdown,切成片段,向量化以後存進向量資料庫。統一轉 Markdown 之後,切片的品質明顯提升。
使用者一問,系統同時做兩件事。一是用向量找語義相近的段落,二是用關鍵詞匹配找字面相符的段落,然後把兩邊的結果加權排序。排在前面的段落,連同問題一起交給大模型,由它生成回答。
通用模型不認識行業詞
踩雷是從搜尋結果開始的。手冊切片向量化以後,很多搜尋不準,而且不準的方式很有規律。
「棉紗」和「全棉紗」在語義上很近,工藝標準卻不一樣。「活性染料」和「直接染料」在向量空間裡靠得很近,化學成分卻完全不同。帶範圍的數值,比如 pH 值的一段區間,語義搜尋讀不出「範圍」是什麼意思。
根因不復雜。通用的 Embedding 模型是在維基百科、論壇、新聞這類通用語料上訓練的,它沒見過紡織行業的分類體系。40S 在這個領域指紗線支數,放回通用語料裡,它可能是別的意思。模型只能按字面和日常語義去猜。
我們做過幾類緩解。提高關鍵詞匹配的權重,措辭精確的使用者搜尋因此準了不少。對高頻專有名詞做同義詞對映,比如使用者說的「紗」和「紗線」,應當被當成同一個東西。對數值型內容加正則規則,直接匹配,不讓向量去猜。
徹底的解法是微調一個專門的 Embedding 模型,但這需要標註大量行業資料。在當時的經濟帳上不划算,我們沒有做。回頭看,如果再做一次,這可能是優先順序更高的投資。
如果重做,我會先改這幾處
覆盤時我想過重做的順序,分成產品和技術兩層。
產品上,先做表單式查詢,不做對話式。B 端使用者想要的是快速找到標準答案。高頻問題可以先寫死,RAG 只做兜底,回答更快,體驗也更好。還要給回答加一個置信度。檢索結果不夠可靠的時候,系統不硬編,只告訴使用者去查哪本手冊的哪一頁。
技術上,先攢幾個月的搜尋日誌,人工標出一批問答對,再決定用哪種 Embedding 方案。專有名詞詞庫和同義詞對映,應該排在搜尋演算法最佳化前面。領域 Embedding 微調的投入大,長期回報也可能最高,但這一步要等資料攢夠再說。
最大的教訓是不要高估通用 AI 能力對垂直行業的適配度。行業資料的預處理品質,往往比模型選擇更關鍵。