最近在搭一个简单的RAG问答系统,用的开源的embedding+向量库,检索出来的片段其实挺相关的,但最后生成答案总是差点意思。要么太啰嗦把检索内容全抄一遍,要么就自己瞎编。我的prompt现在就是简单地“根据以下内容回答问题”,加了个“如果找不到答案就说不知道”。想问下大家平时在RAG的prompt里都会放哪些信息啊?比如要不要告诉模型片段来自哪些文档?分点回答还是直接给结论?还有温度参数是不是也得跟着调?感觉自己像在盲人摸象,求指点。
RAG里Prompt模板怎么写?感觉调来调去效果都一般
全部回复
共 44 条我一般会在prompt里塞一句“只根据下面片段回答,别自己发挥”,再加一句“用两三句话概括,别照抄原文”,效果比单说“根据内容回答”好不少。片段来源我偶尔会带上文件名,模型会更谨慎一点,尤其问到具体条款的时候。温度我一般调到0.2左右,太高确实容易开始编。分点还是直接给结论得看场景,问答类我偏向先给结论再补一句依据,读起来不累。
我最近也在折腾这个,感觉prompt里加不加来源信息差别挺大的。之前我只给检索片段,模型经常把几段内容缝在一起,后来改成每个片段前面标个[1][2],让它引用编号,答案结构清楚多了,胡编也少了点。分点还是结论这个得看你场景,问答类我倾向于先给一句直接回答,再补依据,不然模型很容易开头就绕。温度我一般调到0.2到0.3左右,太高真的会自己加戏。还有个坑是检索片段别塞太多,超过上下文一半之后模型反而抓不住重点,我现在会先做一轮rerank或者截断。你说的“找不到就说不知道”最好再具体点,比如“如果片段里没有明确答案,只回复未找到相关信息”,不然它还是会硬编。
我一般会在prompt里明确要求“只根据检索内容回答,不要自己发挥”,再加一句“如果片段之间冲突,以重复出现的信息为准”,这样能压住胡编。告诉模型来源挺有用的,比如“以下片段来自XX文档”,它会更倾向引用而不是自己造。分点还是直接给结论得看场景,问答类我倾向先给结论再列依据,温度调到0.1-0.3比较稳。另外可以在prompt里加一句“不要照抄原文,用你自己的话概括”,对啰嗦问题挺管用。
你这个描述太真实了,我一开始搭RAG也是这个感觉,检索没问题,坏就坏在最后那一下生成。我后来发现prompt里光写“根据以下内容回答”确实不够,得把角色和边界说清楚,比如“你是一个只依据给定片段作答的助手,片段里没有的信息不要补充”。另外告诉模型片段来源挺有用的,尤其是带标题或文件名的场景,它会更倾向引用而不是瞎编。分点还是直接给结论,我觉得取决于你的场景,问答类我一般要求先给一句直接答案,再列依据,这样既不啰嗦也不丢信息。温度我一般调到0.1到0.3之间,太高真的容易自由发挥。还有个坑是片段顺序和去重,有时候检索回来的内容互相矛盾,模型就懵了,我后来会在prompt里加一句“如果片段之间有冲突,请指出并优先采用更具体的那条”。你也可以试试把“不知道”改成“根据现有片段无法确定”,语气上模型会更老实一点。