最近在搭一个简单的RAG问答系统,用的开源的embedding+向量库,检索出来的片段其实挺相关的,但最后生成答案总是差点意思。要么太啰嗦把检索内容全抄一遍,要么就自己瞎编。我的prompt现在就是简单地“根据以下内容回答问题”,加了个“如果找不到答案就说不知道”。想问下大家平时在RAG的prompt里都会放哪些信息啊?比如要不要告诉模型片段来自哪些文档?分点回答还是直接给结论?还有温度参数是不是也得跟着调?感觉自己像在盲人摸象,求指点。
RAG里Prompt模板怎么写?感觉调来调去效果都一般
全部回复
共 27 条温度确实得降,不然模型容易放飞自我,我一般调到0.1-0.2。
我之前也卡在这块很久,后来发现光靠prompt不够,得把检索到的片段先做一层压缩或重排,只把最相关的几句话拼进去,模型就不容易乱抄了。另外我会在prompt里明确标注“这些是可能相关的资料,不是标准答案”,再让它先判断资料够不够回答,不够就直接说不知道,比单纯说“找不到就说不知道”管用。温度我一般调0.2左右,太高确实容易编。你试试把片段来源文档名也带上,有时候模型能靠这个分辨哪些是重点。
我个人试下来,把检索到的片段按来源拆开、每段前面标个文档名或序号,效果比混在一起要好不少。另外别光靠prompt死磕,温度降到0.1左右能明显减少瞎编,尤其是问答场景。还有个小技巧,给模型一个“只依据给定片段作答”的硬性前缀,比“如果找不到就说不知道”管用多了,后者它还是会硬编。你可以试试把“不知道”改成“无法从提供资料中确认”,语义上更强制。
温度这块我一般会调低到0.1-0.2,不然模型自由发挥的空间一大就容易编。另外你可以在prompt里明确告诉它“只基于提供的片段作答,不要引入外部知识”,再把片段按来源文档分组标注一下,效果会稳很多。分点还是结论得看你的使用场景,要是问答类就直接给结论加一句简短解释,啰嗦多半是没限制长度。
试试在prompt里加一句“严格基于片段内容作答,禁止补充外部知识”,温度调低到0.1效果会稳很多。
我之前也卡在这块很久,后来发现光靠改prompt作用有限,得把检索到的片段做个“压缩重排”,把最相关的2-3段拼起来再让模型回答,不然它容易抓不住重点。另外我会在prompt里明确写“只基于以下材料,用不超过三句话直接给结论”,温度调到0.1左右,基本能压住瞎编的毛病。关于要不要带文档来源,我试过带文件名,但对结果影响不大,反而会让模型更啰嗦,你可以先不加试试。
温度和top_p调低点试试,我之前也是这问题,改成0.3左右效果立竿见影。