最近在做一个内部知识库的RAG问答,检索用的是bge-m3加faiss,召回top5感觉内容还行,但生成部分总是出问题。我试过把检索到的chunk直接拼在system prompt里,也试过用“请根据以下资料回答”这种模板,但模型要么答非所问,要么把不相关的chunk也硬编进去。看网上说Prompt要加“如果资料中没有答案就说不知道”,加了之后又变得特别保守,明明有答案也说没有。想问问大家在RAG场景下Prompt一般怎么设计?需不需要把chunk加序号或者加来源?有没有比较通用的结构?
最近在做一个内部知识库的RAG问答,检索用的是bge-m3加faiss,召回top5感觉内容还行,但生成部分总是出问题。我试过把检索到的chunk直接拼在system prompt里,也试过用“请根据以下资料回答”这种模板,但模型要么答非所问,要么把不相关的chunk也硬编进去。看网上说Prompt要加“如果资料中没有答案就说不知道”,加了之后又变得特别保守,明明有答案也说没有。想问问大家在RAG场景下Prompt一般怎么设计?需不需要把chunk加序号或者加来源?有没有比较通用的结构?
我一般会把每个chunk前面标上序号和来源,然后让模型回答时引用编号,这样它不容易把无关内容混进来。你说加“不知道”之后变保守,可能是没给模型留“部分回答”的余地,可以改成“资料里没有的部分明确说没有,有提到的正常答”。另外system prompt里最好把“只依据资料”和“允许合理归纳”的边界写清楚,太死或太松都容易翻车。