最近在做一个小型RAG系统,想结合Agent做多轮问答。用了常见的语义分块,结果发现只要问题稍微复杂一点,比如“总结一下Q3财报里大客户流失率的变化”,召回出来的片段就特别零散,有的讲Q3,有的讲客户流失,但就是拼不回去。我试过调高chunk size或者加overlap,但效果不稳定,反而更容易混入不相关的信息。想问下各位大佬,有没有什么更优雅的分块策略或者检索后排序的方法,能让召回的内容更“整”一点?先谢谢了。
楼主
2小时前
RAG+Agent落地时,文档切得太碎导致召回太散怎么办?
请 登录 后发表回复
全部回复
共 2 条
2楼
2小时前
这个问题真的挺典型的,我也踩过类似的坑。后来我试了下先按语义做粗粒度分块(比如按章节或二级标题),再在检索时用问句去匹配这些大块的摘要,而不是直接搜碎片内容,这样召回的整体性会好不少。另外检索后可以加一步rerank,用模型把候选片段按逻辑连贯性重新排序,能筛掉不少“拼不回去”的零散结果。你可以试试看这个思路。
3楼
26分钟前
这个坑我也踩过,后来试了试基于文档结构的语义分块,比如先按标题或段落层级切,再对每个块做摘要索引,这样召回时能保留上下文关系。另外检索完可以用一个轻量的rerank模型把相关性低的片段过滤掉,或者用LLM做一次片段合并,把零散句子重新组织成连贯段落。不过chunk size和overlap确实很难调,我自己的经验是如果文档本身有固定格式(比如财报),还不如直接按章节切,虽然粒度粗一点,但至少每个块的内容是完整的。你试过用图结构来组织片段吗?比如把相邻块的关系建成小图,检索时沿着边把相关片段聚回来,这样可能比纯向量检索更稳。当然代价是实现复杂一些,但针对“总结趋势”这类问题效果明显。