这道题问[[RAG]]的架构和检索优化,我觉得本质是在问:怎么把外部知识可靠地注入到生成模型里,同时控制好延迟和[[幻觉]]。RAG不是简单拼装,而是检索和生成的桥接,设计时要时刻想着它们怎么配合。
先说核心架构,就是检索器加生成器再加一个融合机制。用户query进来,检索器从知识库捞Top-K文档,拼成prompt喂给LLM生成答案。这里有个关键前提:证据漏召回会限制基于该证据集作答,但高召回不保证忠实生成;解析、权限、重排、上下文与生成都要分阶段评估。所以我会把重心放在检索优化上。
检索器优化,我一般分两条路走。一条是[[Dense Retrieval]],用[[Embedding]]做语义匹配,适合长尾query;另一条是[[Sparse Retrieval]],比如[[BM25]],做精确词匹配,适合高频术语或订单号这种场景。真正落地时,我很少单选一条,而是用[[Hybrid Search]]把两者结果融合,比如用RRF排序。举个具体例子:客服场景里用户问‘退款到账时间’,语义上可能匹配到‘退款流程’,但关键词‘到账时间’能精确命中FAQ里对应的字段,混合检索能把两类结果都捞上来。这里有个坑:如果query和文档的语义gap特别大,比如用户说‘订单异常’但文档里写的是‘交易失败’,纯向量检索可能漏掉。这时候我会用查询改写,比如HyDE先生成一个假设文档再检索,或者做query expansion。
接下来是[[向量数据库]]选型。索引算法上,HNSW是图索引,IVF是聚类倒排索引,不能按内存型/磁盘型二分;编码、落盘、召回和延迟取决于具体变体及参数。我会根据数据规模和延迟要求选。量化压缩也很关键,从FP32压到INT8能省不少内存,但精度会掉一点,得用业务数据测过再定。另外,权限条件应限制候选资格,内容返回与送模型前必须授权;引擎可使用预过滤或搜索中迭代过滤,不能一概说所有metadata都必须先完成一次预过滤。常见失败场景是:索引参数没调好,比如HNSW的ef_construction设太小,建图质量差,导致召回崩了。所以上线前我会用一批固定query回放,对比Recall@K和延迟。
[[重排序]]策略我用两阶段漏斗。第一阶段召回池大,比如Top-100,用轻量模型快速过滤;第二阶段用Cross-Encoder对召回候选交互打分,再选最终Top-K;例如给Top-100候选打分后取Top-5,而非只给已选的5篇打分。如果延迟敏感,我会用[[ColBERT]]做late interaction,精度折中但快很多。这里有个取舍:精排模型部署成本高,如果业务对延迟要求严格,我会考虑用[[Bi-Encoder]]加简单规则替代。
最后说落地权衡。延迟要按业务SLO、负载和输入输出长度分别测编码、检索、重排、TTFT与TPOT,不能统一承诺500/100/400ms。成本方面,Embedding调用费不贵,但精排模型部署费高,得算ROI。证据资格、漏召回与生成忠实性都可能成为瓶颈;先做阶段归因和消融,再决定优先优化哪部分。另外,上下文过长时我会做检索结果摘要压缩,或者用层次化检索先找章节再找段落。
还有一个点值得注意:当知识库频繁更新时,增量索引怎么做。直接原地动图索引会导致召回质量波动,我倾向用base加delta双索引,删除用软标记,后台异步重建,上线前做一致性校验。
所以综合来看,我更倾向把RAG看成一套系统工程,不是调个模型就完事。检索器、数据库、重排序每一步都有取舍,得根据业务场景和资源来定。