兄弟们,最近在搞一个企业内部知识库的RAG方案,上来就踩了几个大坑,分享一下。
先说检索。别以为扔个embedding模型进去就完事了。你用的模型是不是针对你的领域语料训练过的?随便整个通用模型,查出来的相关度能让你怀疑人生。我后来换了bge-large-zh-v1.5,配合BM25做混合检索,召回率至少提了15%。另外,chunk size别乱设,我试过512和1024,效果差了不止一个档次——得根据你的文档结构和查询粒度来调。
再说生成。检索回来的top-k文档,如果全文塞给LLM,上下文太长会导致指令丢失。我做了个rerank环节,把前5个chunk重新排序,只取最相关的2-3个喂给模型。用的是Cohere的rerank模型,效果比直接硬塞好太多。另外记得加个prompt模板,告诉模型“如果检索内容没信息,直接说不知道”,不然模型会脑补出一堆幻觉。
最后说部署。线上要监控检索延迟和生成延迟,特别是检索部分,用FAISS的时候索引加载太慢,我改成了内存映射,启动时间从10秒降到0.5秒。还有,别忘了做fallback机制——当检索结果质量低于阈值时,别硬生成,直接返回“查无资料”。
提问:你们在生产环境中,RAG的检索召回率一般做到多少?有没有什么优化trick?欢迎来杠。 |