工业软件(CAD/PLM/仿真等)的官方文档写得很"规范",但用户提问很"口语"。典型场景:用户问"怎么批量导出 BOM",文档里写的却是"数据导出 → 批量操作 → 勾选装配树节点"。字面完全不匹配,纯向量检索经常召回失败。这篇文章讲我们在工业软件知识库项目里用的两个增强手段:查询改写(Query Rewriting)和假设性文档嵌入(HyDE),以及它们各自的适用边界。
向量检索靠语义相似度,但"批量导出 BOM"和"数据导出-批量操作"在 embedding 空间距离不一定近——尤其当文档用了大量领域缩写(BOM、装配树、特征树)。这不是 chunk 大小的锅,是"查询语言"和"文档语言"不一致。
flowchart LR
U[用户口语问句] --> R[Query Rewriting 改写成文档术语]
U --> H[HyDE 生成假设性答案文档]
R --> V[向量召回]
H --> V
V --> F[融合 Rerank]
F --> A[返回结果]思路是用一个轻量模型,把用户问句改写成"文档里可能出现的表述",但必须受领域词典约束,否则模型会编造不存在的功能名。
实践要点:改写器必须喂领域词典,否则它容易写出"一键导出"这类文档里没有的词,反而带偏召回。我们也限制改写只做"同义映射",不做"问题扩展",避免引入噪声。
HyDE(Hypothetical Document Embeddings)的思路很巧:先让模型针对问题"虚构"一段它期望看到的答案文档,再把这段假文档拿去 embedding 检索。因为假文档的用词更接近真实文档风格,召回反而更准。
注意 HyDE 的"假文档"只用于检索,绝不返回给用户,避免幻觉答案外流。我们在工业软件场景实测,HyDE 对"怎么做 X"类操作问句提升明显,对"XX 参数默认值是多少"这类精确事实问句提升有限(精确事实还是 BM25 更稳,见文章四)。
Q1:Query Rewriting 会不会改偏原意?
会,如果没有领域词典约束。务必把产品真实功能名词固化进 prompt,禁止模型造词。
Q2:HyDE 的假文档泄漏给用户有风险吗?
有。假文档只进检索链路,返回结果必须来自真实文档库,绝不能把模型生成内容当答案。
Q3:这两个方法要训练吗?
不需要。改写和 HyDE 都用现成 LLM 的 few-shot/instruct 能力,重点是 prompt 里的领域约束。
Q4:和 Reranker 什么关系?
互补。改写/HyDE 提升"召回阶段"的相关候选量,Reranker 在"精排阶段"去噪,建议叠加。
Q5:工业软件缩写太多怎么办?
建一张"用户口语 → 文档术语"映射表,既给改写器用,也可做检索前的 lexicon boost。
作者:默然|数智化转型网
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。