这道题问的是知识库构建,但我觉得面试官真正想听的,是你知不知道一个知识库从数据到检索的完整链路里,哪些环节会出问题、怎么取舍。说白了,这不是一个搭积木的流程,而是一套检索质量工程。
先说数据收集。很多人一上来就想着把PDF、数据库、网页全塞进去,但真正落地的关键是优先收集高频查询场景的数据。比如做客服退款知识库,你先把退款流程、常见纠纷、政策规则吃透,而不是把整个公司ERP文档都丢进去。而且一定要做版本管理和溯源,不然改了一个政策,旧版本还在库里,检索出来就出事了。
接下来是清洗和切分。这一步的坑比想象中大。格式统一是基本功,PDF扫描件要[[OCR]],HTML去标签。但最难的是噪声过滤,页眉页脚、广告、重复内容,这些不干掉,[[向量化]]之后全是噪声。还有语义切分,很多人用固定长度256token一刀切,但业务场景里一个完整退款流程可能跨好几个段落,切碎了检索召回就断章取义。我倾向先按主题或章节自然边界做语义切分,再把零重叠、短窗口与较长窗口作为候选,用同一评测集验证边界证据是否完整。另外,数据质量要有个门槛,用规则加小模型打分,分数太低的片段直接丢掉,不然就是垃圾进垃圾出。
然后说Embedding选型。通用场景用BGE-M3、GTE这些没问题,但垂直领域一定要微调。比如金融合规文档,很多专业术语和上下文,通用模型根本抓不住。微调用对比学习,加In-batch Negatives和Hard Negatives,让模型学会区分相似但不同的条款。这里有个关键点:Query和Document要加不同的Prompt前缀,比如查询是'为这个句子生成表示',文档是'为这段文本生成表示',这样向量空间更对齐。
索引构建,我一般不走极端。[[HNSW]]召回率高但吃内存,适合百万级;[[IVF-PQ]]磁盘友好,适合亿级。真正落地常常是**[[混合检索]]**,稠密向量加[[BM25]]稀疏向量,再配合元数据过滤,比如按时间、来源预过滤。比如搜索'2024年退款政策',先按时间过滤出2024年的文档,再向量召回,效率和精度都高。
检索优化里,我特别看重**[[重排序]]**这一步。向量召回Top-K后,用轻量[[Cross-Encoder]]比如bge-reranker做精排,能显著提升相关性。但代价是延迟,所以得权衡。另外,查询改写也很有用,用户输入'退款怎么还没到',LLM可以扩展成'退款到账时间、退款流程、退款进度查询',提高召回率。
最后说维护。知识库不是建完就完了,数据会变、用户query会变。我一般做增量更新,新数据单独建索引,定期合并。但有个坑:删除操作不能原地动图索引,否则召回质量会崩。我倾向软删除加后台异步重建,用base加delta双索引,查询时合并。上线前用固定query回放,对比Recall@K和延迟,通过才原子切换。
所以整体看,我更倾向把知识库构建看成一个持续优化的检索系统,而不是一次性的数据导入。每个环节都要有反馈闭环,比如监控检索点击率,自动标记低质量片段,甚至用用户反馈迭代Embedding模型。这样知识库才能真正用起来,而不是变成一个没人用的数据垃圾场。