最近在做一个企业知识库问答,用的langchain+openai的pipeline,检索用的faiss,embedding是text-embedding-ada-002。问题是我按固定chunk_size=500切分文档,重叠设了50,但用户问的问题稍微绕一点(比如“去年Q3的报销流程和今年比有啥改动”),召回的前几段经常命中无关内容,导致生成答案东拼西凑。我试过调top_k从4改到8,效果反而更差。也想过用父子分块或者加metadata过滤,但感觉越改越乱,不知道是不是应该先换embedding模型,还是干脆上重排序?有没有做过的朋友说说,RAG调优到底先调哪里?
楼主
2026-08-17
RAG召回老是不准,是不是我分块方式有问题?求大佬指点
请 登录 后发表回复
全部回复
共 45 条
2楼
2026-09-14
先加个rerank试试,比换embedding便宜多了,top_k别乱动。
3楼
2026-09-14
先别急着换embedding,加个重排序试试,一般能救回来不少。
4楼
2026-09-20
你这个问题我踩过,固定500切分确实容易把跨段落的逻辑切碎,尤其涉及时间对比的查询,单靠调top_k只会塞进更多噪声。建议先加个rerank模型试试,bge-reranker或者cohere的都行,召回质量能明显提一档,比换embedding划算。另外你那类问题其实更适合先做metadata过滤,把年份和流程类型抽出来,别让向量检索硬扛。父子分块也值得搞,小块检索大块喂给模型,能缓解上下文断裂。
5楼
12天前
写得挺好,建议补充一些性能数据。
6楼
3天前
固定500切分对“去年Q3和今年比”这种跨时段对比确实容易切散,两边的信息落不到同一个块里,召回自然对不上。top_k调大反而更差挺正常的,无关块挤进来稀释了上下文,生成就容易拼凑。我觉得可以先别急着换embedding,试试按文档结构切、把时间/部门这类信息塞进metadata做过滤,或者上父子块让小块召回大块喂给模型。重排序可以放后面,先把召回的内容单元对齐问题解决了收益更明显。