最近在做一个基于RAG的问答系统,向量库用的是Milvus,检索top3片段拼进Prompt里让模型回答。但发现模型经常忽略检索到的内容,还是按自己知识瞎答,甚至编造一些原文没有的细节。目前用的Prompt是“根据以下资料回答问题:{context}\n问题:{question}”,感觉太简单了。看网上有人加“如果资料中没有答案就说不知道”,试了效果也不稳定。想请教各位,RAG场景下Prompt到底该怎么设计?有没有什么结构化的模板或者技巧?是不是还需要在检索后做重排序?真心求教,谢谢!
最近在做一个基于RAG的问答系统,向量库用的是Milvus,检索top3片段拼进Prompt里让模型回答。但发现模型经常忽略检索到的内容,还是按自己知识瞎答,甚至编造一些原文没有的细节。目前用的Prompt是“根据以下资料回答问题:{context}\n问题:{question}”,感觉太简单了。看网上有人加“如果资料中没有答案就说不知道”,试了效果也不稳定。想请教各位,RAG场景下Prompt到底该怎么设计?有没有什么结构化的模板或者技巧?是不是还需要在检索后做重排序?真心求教,谢谢!
我之前也踩过这个坑,光在prompt里写“没有就说不知道”确实不太管用,模型该编还是编。后来我把context里每个片段前面加上序号和来源,让它回答时先引用片段编号再作答,瞎编的情况明显少了很多。另外你可以试试把指令放后面而不是开头,有些模型对末尾的约束更敏感。重排序建议加上,top3里经常混进不相关的片段,反而干扰模型判断。