最近在搭一个本地知识库问答,用的是 LangChain + BGE + ChatGLM。文档切成了 512 token 的 chunk,检索 top3 拼进 prompt。但发现有些 chunk 里一半是无关内容,模型容易被带偏,答非所问。试过调小 chunk size 到 256,结果上下文又断了,召回也不稳定。想问问大家,检索后有没有必要做二次压缩或者重排序?还是说应该在 prompt 里加指令让模型自己忽略噪声?这块一直调不好,有点迷茫。
楼主
21天前
RAG 检索回来的 chunk 太长,直接塞进 LLM 效果很差,大家一般怎么处理?
请 登录 后发表回复
全部回复
共 1 条
2楼
17天前
我一般会在检索后加一层rerank,BGE-reranker挺好用的,先把top10召回再精排到top3,噪声少很多。chunk 512确实容易混进无关段落,可以试试按语义切而不是固定长度,LangChain有个SemanticChunker能少切碎点。prompt里加指令效果有限,模型该被带偏还是偏,不如把压缩做在检索侧。真要压缩可以看看LLMLingua那类方案,不过得权衡延迟。