最近在做一个内部知识库的问答机器人,用的PGVector+OpenAI embedding(text-embedding-3-small)。数据大概5万条文档切片,chunk_size试过256和512,重叠设了50。问题是用户问“公司年假政策”,召回的前20条里经常混进一堆“报销流程”之类的无关内容,top5准确率只有60%左右。已经试过调相似度阈值(0.75和0.8都试了),也加了metadata过滤(比如部门、日期),但还是感觉向量距离和语义相关度对不上。是不是我embedding模型选太小了?还是说必须上专门的向量数据库(比如Milvus)才有效果?或者有什么粗排+精排的实用做法?求有实战经验的大佬指点下,别让我去啃那些又长又散的官方文档。
楼主
2026-08-06
向量数据库做RAG,召回率上不去还有救吗?求大佬指条明路
请 登录 后发表回复
全部回复
共 84 条
2楼
4天前
说实话你这个问题大概率不在embedding模型大小,而是切片策略和检索逻辑太糙了。5万条文档用256的chunk,信息密度低的段落很容易被无关query拽出来,试试按章节语义切块,再对每个chunk做摘要向量+原文向量双路召回。另外top5才60%太正常了,别迷信阈值,建议直接上粗排(向量取top100)+重排(cross-encoder或bge-reranker),效果立竿见影。PGVector够用,别急着换库,先把你那个重叠50的机械切法改掉。
3楼
3天前
混合检索加rerank才是正解,纯向量召回本来就容易跑偏,换个库解决不了语义匹配问题。
4楼
1天前
5万条切片用PGVector其实够用了,问题大概率不在数据库选型上。text-embedding-3-small对中文语义区分确实偏弱,尤其“年假”和“报销”这种同属HR域的词,向量空间里挨得太近。建议先别急着换Milvus,试试加个BM25关键词召回做混合检索,再拿cross-encoder精排top20,通常能明显改善。你这个阈值调到0.8还混进无关内容,说明是召回源头就不准,光靠阈值卡没用。
5楼
12小时前
别急着换库,PGVector五万条够用了,问题八成在embedding对中文语义不敏感,先换bge-m3试试,再加个cross-encoder精排。