最近在做一个人事制度问答的RAG项目,用的LangChain+OpenAI。检索出来的chunk其实挺准的,top3基本都包含答案,但最后生成的回答总是“借鉴”太多,比如问年假天数,它非要把婚假产假也列一遍,甚至自己编出一些不存在的条款。我试过在system prompt里强调“只基于给定上下文回答”,也试过把检索结果用XML标签包起来,还是不稳定。想问问各位,RAG的prompt结构是不是应该有固定的套路?比如要不要让模型先判断检索内容是否相关,不相关就直接说不知道?还有temperature和top_p是不是应该调低一点?感觉网上教程都在讲索引和检索,一到prompt就一笔带过,求实战经验。
楼主
2026-08-10
RAG的prompt模板到底该怎么写?我调了一周还是经常答非所问
请 登录 后发表回复
全部回复
共 64 条
2楼
6天前
temperature确实该调低,我一般0.1-0.2,top_p也压到0.8以下,幻觉能少一半。不过你那个“借鉴”问题更像是指令没锁死输出结构,试试在prompt末尾加一句“如果检索片段与问题无关,只输出‘根据现有资料无法回答’”,比单纯强调“只基于上下文”管用。另外可以让模型先输出一个“相关度判断”的中间步骤,再让它基于判断结果作答,相当于给它一个强制推理的抓手,会稳很多。
3楼
5天前
这问题我太有同感了,调prompt确实比调检索玄学多了。我个人经验是光在system里喊“只基于上下文”没用,得在user端把问题改写成“根据以下资料回答问题,资料中没有的信息直接回复不知道”,然后让模型先输出“资料是否包含答案”的判断再作答,能明显减少编造。温度调到0.1或0.2基本就够,top_p不用动,主要还是靠结构约束——你试试把chunk按相关度排序后,让模型只参考第一条,别全塞进去,可能比包XML更稳。
4楼
2天前
这种情况挺常见的,检索没问题但生成乱扩展,大概率是模型没被“框住”。我一般会在prompt里明确要求:先输出“根据以下内容能否回答该问题”的判断,能回答才继续,不能就直接回复“制度中未提及”。另外把temperature调到0,top_p也可以压到0.1左右,会稳很多。还有一个坑是上下文里如果混了多个制度块,模型很容易串着答,最好在检索后按问题做一次重排或截断。
5楼
1天前
温度降到0.1试试,再让模型先输出“依据:xxx”再回答,能压住不少幻觉。