最近在做一个人事政策问答的RAG,用的GPT-4o。我一开始把system prompt写得很细,比如“请严格基于上下文回答,如果找不到答案就说不知道,不要编造,注意引用原文”等等,还加了few-shot。结果发现它变得特别“怂”,明明向量库里检索到相关条款了,它却经常答非所问,或者直接说“未找到相关信息”。后来我把prompt简化成两句话,准确率反而上来了。想问问大家,RAG场景下的prompt是不是越简单越好?还是说我的检索本身就有问题,导致模型被我的“严格指令”误导了?有没有什么平衡的技巧?
楼主
2026-08-03
RAG里Prompt写得太详细反而变笨了,大家有遇到过吗?
请 登录 后发表回复
全部回复
共 102 条
2楼
18天前
我踩过类似的坑,system prompt塞太多约束确实会让模型过度保守,尤其是“找不到就说不知道”这种话,它宁可摆烂也不愿意冒险回答。后来我改成只在检索分数低于阈值时才触发兜底话术,平时就让它正常答,效果好很多。你这个情况我怀疑是检索回来的 chunk 本身噪音大,模型一纠结就干脆放弃了。可以试试把引用要求放到 user prompt 里,system 保持简洁,分工清楚点。
3楼
15天前
这个现象我太有共鸣了,之前做客服知识库也踩过一模一样的坑。你那些“严格基于上下文”“找不到就说不知道”的指令,本质是在给模型套枷锁,它会变得过度保守,宁可拒答也不愿意冒一点风险。我后来琢磨出来一个点,就是RAG里的prompt和纯生成任务的逻辑不太一样,检索已经把知识喂到嘴边了,模型需要的是“信任上下文”而不是“怀疑上下文”。你简化成两句话反而对了,因为那两句话大概率保留了核心约束,去掉了那些让模型自我审查的冗余指令。不过我也怀疑你检索那块可能有隐性噪声,比如召回的段落里混了相似但不相关的条款,模型被严格指令一压,就更容易判定“上下文不充分”。我现在的做法是把few-shot换成“正例+边界例”,只给一两个示范,同时在检索后加个轻量重排,让喂进去的上下文更干净。另外可以试试把“不知道”的触发条件写得更具体,比如“仅当上下文完全没有涉及该政策时”,而不是笼统的“找不到答案”。prompt不是越简单越好,而是约束要精准,别让模型在回答前先做一堆自我怀疑的内心戏。