最近在用LangChain搭一个简单的RAG问答机器人,处理公司内部的运维文档。embedding用的bge-large,向量库用的Milvus,top_k设了5。现在遇到一个很头疼的问题:检索出来的chunk经常是东一句西一句,比如问“数据库连接池爆了怎么排查”,召回的内容有讲配置参数的、有讲报错日志的、还有讲重启步骤的,但每个chunk都只有一小段,LLM(用的Qwen)生成答案时就像在拼拼图,经常逻辑不连贯,甚至自相矛盾。
楼主
2026-08-21
RAG系统检索结果太碎片化,生成答案逻辑断裂怎么办?
请 登录 后发表回复
全部回复
共 43 条
2楼
2026-09-13
我之前也踩过这个坑,top_k设5其实不一定合适,关键得看chunk怎么切的。你试试把chunk size调大一点,再加个overlap,让每个片段自带上下文,别切得太碎。另外可以上rerank模型,比如bge-reranker,先粗召回再精排,把真正相关的整段捞出来。还有个偏方是让LLM先做一轮query改写,把“排查步骤”这种意图拆清楚再检索,效果会好不少。
3楼
27天前
我也踩过这坑,top_k设5反而容易把不同子问题的片段全捞进来。你试试加个rerank,比如用bge-reranker对召回结果重排,再按相似度阈值砍掉低分的,碎片感会好很多。另外chunk切分时留点overlap,或者按文档标题层级切,别纯按固定长度。Qwen本身对上下文顺序挺敏感的,把最相关的放前面也有帮助。
4楼
26天前
试试把相邻chunk合并成父块再喂给模型,或者加个重排序,光靠top_k拼不出完整逻辑。