做过一个纺织工艺问答机器人。它的骨架并不复杂。把资料切开、存好,按问题找回相关段落,再交给大模型组织成回答。我最记得的一件事,是行业里的专有名词在通用搜索里经常出错。
我之前所在的一家纺织产业互联网平台想做这件事。平台手里有工艺手册、历史问答记录和标准操作流程,目标是让班组长用一句话查到工艺标准和操作规范,少翻手册,也少打电话去问老师傅。
先是对话框,后来改成了表单
早期版本是一个纯对话框。一句典型的提问,是“棉纱 40S 的捻度标准是多少?”
问题出在提问的人身上。工厂里的用户不习惯写完整的问题,很多人只打一两个词,或者只能描述一个模糊的现象。对话式对提问质量要求很高,一线工人写不出好问题,机器人接到的就是一个残缺的问题。
后来的迭代方向,是模板化引导。预设几个高频场景按钮,比如查工艺标准、查操作方法;每个场景配一个轻量表单,让人填品名和规格参数;表单内容转成标准问题,再去检索。回答出来以后,再问一句还要查什么。
复盘时我的判断是,对 C 端用户,对话式更自然;对车间里的操作工,表单反而更高效。
检索流程本身不花哨
资料先统一转成 Markdown,切成片段,向量化以后存进向量数据库。统一转 Markdown 之后,切片的质量明显提升。
用户一问,系统同时做两件事。一是用向量找语义相近的段落,二是用关键词匹配找字面相符的段落,然后把两边的结果加权排序。排在前面的段落,连同问题一起交给大模型,由它生成回答。
通用模型不认识行业词
踩坑是从搜索结果开始的。手册切片向量化以后,很多搜索不准,而且不准的方式很有规律。
“棉纱”和“全棉纱”在语义上很近,工艺标准却不一样。“活性染料”和“直接染料”在向量空间里靠得很近,化学成分却完全不同。带范围的数值,比如 pH 值的一段区间,语义搜索读不出“范围”是什么意思。
根因不复杂。通用的 Embedding 模型是在维基百科、论坛、新闻这类通用语料上训练的,它没见过纺织行业的分类体系。40S 在这个领域指纱线支数,放回通用语料里,它可能是别的意思。模型只能按字面和日常语义去猜。
我们做过几类缓解。提高关键词匹配的权重,措辞精确的用户搜索因此准了不少。对高频专有名词做同义词映射,比如用户说的“纱”和“纱线”,应当被当成同一个东西。对数值型内容加正则规则,直接匹配,不让向量去猜。
彻底的解法是微调一个专门的 Embedding 模型,但这需要标注大量行业数据。在当时的经济账上不划算,我们没有做。回头看,如果再做一次,这可能是优先级更高的投资。
如果重做,我会先改这几处
复盘时我想过重做的顺序,分成产品和技术两层。
产品上,先做表单式查询,不做对话式。B 端用户想要的是快速找到标准答案。高频问题可以先写死,RAG 只做兜底,回答更快,体验也更好。还要给回答加一个置信度。检索结果不够可靠的时候,系统不硬编,只告诉用户去查哪本手册的哪一页。
技术上,先攒几个月的搜索日志,人工标出一批问答对,再决定用哪种 Embedding 方案。专有名词词库和同义词映射,应该排在搜索算法优化前面。领域 Embedding 微调的投入大,长期回报也可能最高,但这一步要等数据攒够再说。
最大的教训是不要高估通用 AI 能力对垂直行业的适配度。行业数据的预处理质量,往往比模型选择更关键。