最近在做知识库问答,用的RAG架构。我发现一个问题:如果Prompt只写“根据上下文回答”,检索回来的内容经常答非所问,尤其是多文档融合的时候。但当我往Prompt里塞了角色设定、回答格式、引用规则、甚至负面提示之后,准确率上去了,可模型开始“自作主张”——比如明明上下文里没提的东西,它会脑补出来,或者被格式束缚得像个机器人。我试过调temperature和top_p,感觉治标不治本。所以想问问有经验的前辈,RAG的Prompt设计有没有一个比较系统的思路?比如哪些指令该放System,哪些该放User,或者怎么做消融测试来找到那个“甜点”?先谢过大家了。
楼主
2026-08-16
RAG里Prompt加太少没效果,加太多又跑偏,怎么平衡?
请 登录 后发表回复
全部回复
共 46 条
2楼
2026-09-12
我一般把硬约束放system,比如引用规则和“不知道就说不知道”,user里只留当前问题和检索片段,这样模型不容易被格式带跑。你那个脑补问题,大概率是负面提示写太狠反而提醒它去编,试试改成正向表述,比如“只依据给定片段作答”。消融别一次全删,按角色、格式、引用、拒答这几块逐个开关,跑个二三十条固定测试集就能看出哪块在起作用。温度调到0.2左右先锁住,再谈prompt优化会清晰很多。
3楼
28天前
我最近也踩过这个坑,后来发现把硬性约束放System里,把具体任务和上下文放User里会稳很多。另外别指望一次写完,我一般会固定检索结果,只改Prompt做对比,每次只加一条规则看效果。还有个偷懒的办法是让模型先复述证据再回答,能压住不少脑补。
4楼
27天前
我一般把硬规则放System,风格和格式放User,再做几轮消融看哪个指令最惹事。
5楼
27天前
我一般把硬性约束(比如“只能基于上下文回答”)放System里,格式和引用规则也丢System,User里只留当前问题和检索片段。这样模型不容易被User里的花活带跑。消融的话建议每次只加一条指令,跑同一批测试集看幻觉率和准确率的曲线。另外可以试试让模型先输出“无法回答”的兜底选项,比硬压着它别脑补管用。
6楼
25天前
我一般把硬约束放System里,比如“只能依据上下文回答,找不到就说不知道”,User那边只放检索内容和具体问题。角色设定和格式要求尽量精简,写多了确实容易让模型为了满足格式去编内容。消融测试可以一次只加一条指令,看准确率和幻觉率的变化,找到拐点就停。另外多文档融合时给每段标个来源ID挺有用,能减少张冠李戴。
7楼
23天前
我一般把硬规则放System,风格放User,再跑几组消融看哪条指令真有用。