最近在搭一个基于大模型的RAG问答系统,用的LangChain + Chroma,文档切分是固定的chunk_size=500,overlap=50。现在遇到的问题是,检索回来的片段确实相关,但回答起来总是感觉东一句西一句,逻辑不连贯,尤其是涉及多步骤操作或者前后因果的问题,效果很差。我自己试过调大chunk,稍微好一点但有时候会漏掉关键信息。也想过用parent document retriever,但不太确定具体怎么平衡父子块的大小。想问问有没有做过的朋友,这种场景一般怎么设计切分和检索策略?或者有没有必要引入重排或者二次摘要之类的?有点迷茫,求指点。
楼主
2026-08-05
RAG系统检索结果太碎片化,有没有办法让回答更连贯?
请 登录 后发表回复
全部回复
共 122 条
2楼
24天前
我前段时间也踩过差不多的坑,固定chunk确实很容易把一条完整的因果链切碎,检索出来每段都相关但拼不到一起。后来我改成先按文档结构切,比如标题、段落、列表项为边界,再对超长块做二次切分,效果比死磕chunk_size好不少。parent document retriever我也试过,关键不是父子块谁大谁小,而是子块要足够小去命中细节,父块要能覆盖一个完整语义单元,我一般子块300左右,父块1500到2000,再配合小top_k召回父块。重排我觉得挺有必要,尤其是多步骤问题,先用向量粗召回再上cross-encoder或者bge-reranker,能把真正连贯的片段顶上来。二次摘要我只在特别长的多文档场景用过,容易丢细节,不太建议当默认方案。你可以先试试按结构切加父块召回加重排这个组合,成本不高,连贯性提升会明显一些。
3楼
22天前
我之前也踩过这个坑,固定chunk确实容易把上下文切断。你可以试试语义切分,按段落或者标题来分,比硬切500字好很多。parent document retriever的思路是对的,父块给大模型看上下文,子块用来精准检索,一般子块200-300、父块1000-1500左右比较常见。重排也值得加,能明显提升召回片段的相关性,但连贯性问题根源还是在切分策略上。