这道题问的是专业领域[[RAG]]系统怎么搭,本质上是在考你怎么把通用RAG的能力约束到知识边界内,保证输出准确、可溯源,同时兼顾效率。我以法律场景为例,具体说一下我的方案。
先说数据预处理。这块最核心的不是怎么切分,而是[[分块]]策略的取舍。固定切分简单,但法律条款跨块就会丢语义,所以我倾向按段落边界切,保证每个块语义完整。同时我会做多粒度索引:原文段落做粗粒度,拆解后的法条做细粒度,再额外维护一批问答对做应用层,这样不同查询能命中不同粒度的块。还有一个前提是术语对齐,比如“违约金”和“滞纳金”在法律场景里不能简单等同,得建同义词表区分场景。时效性标记也很重要,标注每条法规的生效废止状态,否则检索到旧法就出大问题。
检索优化这块,我会上[[Hybrid Search]],把稠密向量和稀疏向量结合起来。稠密向量用领域微调的[[Embedding]],比如法律BERT,处理语义匹配;稀疏向量用[[BM25]]加法条编号精确匹配,处理条款号这种精确查询。为什么这么组合?因为法律场景里用户可能搜“第X条”,向量模型对这种精确数字不敏感,但BM25能直接命中。说白了,没有哪种检索方式能覆盖所有场景,落地一定是混合的。然后[[重排序]]用领域微调的[[Cross-Encoder]],比如法律[[ColBERT]],同时加权时效性和地域匹配。举个例子,用户问“北京地区工伤认定流程”,我会优先排北京的法规,新法在前。
生成优化这块,核心是引用溯源和[[幻觉]]检测。我会在Prompt里强制要求引用格式,比如[《劳动法》第X条],生成内容必须关联检索片段,用户能点击跳转原文。同时设置信度阈值,检索分数太低就拒答或转人工,避免胡编。幻觉检测用[[Faithfulness]]模型校验生成内容和检索片段的一致性,不一致就重新生成或提示用户。这里有个坑:不要盲目相信模型生成的引用,必须做交叉验证。
工程落地层面,我倾向离线在线分离,知识库更新走离线Pipeline,不影响在线服务。缓存策略也很关键,热门法条预加载,相似Query结果缓存,能大幅降低延迟。监控看板我会盯着检索命中率、生成引用率和用户满意度三个指标,形成反馈闭环。
其实还有一个延伸点:当知识库频繁更新时,增量更新和检索质量之间怎么平衡?比如新法出台,旧法废止,怎么保证检索实时性又不影响召回?这块我有些实践经验,可以详细展开。