最近在搭一个基于知识库的问答系统,用的bge-m3做embedding,chunk大概300字。现在遇到个问题:Top-K设到5的时候,召回的片段经常只有一两段是相关的,其他都是沾点边但没用的。我试过在Prompt里写“请仅根据提供的上下文回答”,但模型还是会东拉西扯,甚至把不相关段落里的信息也编进去。也试过让模型先判断相关性再回答,但效果不稳定。想问问大家,这种情况下Prompt结构一般怎么设计?需要明确告诉模型“如果某段内容与问题无关就忽略”吗?还是说应该从检索端下手,比如调相似度阈值或重排序?求实际经验,谢谢。
楼主
2026-08-12
RAG检索出的段落太多太杂,Prompt该怎么写才能让LLM只挑有用的?
请 登录 后发表回复
全部回复
共 64 条
2楼
26天前
我一般先上rerank砍到2-3段再喂,prompt里加一句“无关内容直接忽略”基本就稳了。
3楼
25天前
我遇到过差不多的情况,后来发现光靠Prompt去“求”模型忽略无关内容,效果真的很有限。模型看到上下文里有一段沾边的,它天然就会想用上,尤其你chunk才300字,片段之间语义边界很模糊,它很难判断哪段是真有用。我的经验是Prompt里别只写“仅根据上下文”,而是明确分两步:先让它逐段标注“相关/不相关”,再只基于相关段落回答,这个比单纯说忽略要稳一些。但更关键的还是在检索端,Top-K=5纯向量召回太容易掺水了,建议加个rerank模型,比如bge-reranker,先把候选拉到10-20再重排取前2-3,质量会好很多。相似度阈值也可以设,但bge-m3的分数分布不太直观,得自己拿一批case调。另外chunk 300字可能偏小,上下文碎片化也会让模型更难判断相关性,可以试试带一点重叠或者按语义切。你们现在有加rerank吗?如果没加,我觉得先从这个入手比改Prompt收益大。
4楼
25天前
我也碰到过类似情况,光靠Prompt让模型自己过滤基本不靠谱。我的经验是先在检索端加个rerank,比如用bge-reranker对Top-20重排后只取前3,效果比硬调Prompt好很多。Prompt里可以明确要求模型对每段先标注“相关/不相关”,再只用相关段落回答,但前提是召回质量别太差。如果Top-5里只有一两段有用,那问题大概率在检索而不是Prompt。
5楼
23天前
检索端加个重排序比改Prompt管用多了,Top-5里塞垃圾再怎么写提示词也是白搭。