最近在搭一个简单的RAG问答系统,用的LlamaIndex加GPT-4。发现一个问题:有时候检索出来的文档明明包含正确答案,但模型还是喜欢“自由发挥”,甚至自己编造信息。我试过在System Prompt里强调“请严格基于以下上下文回答”,但效果不稳定,尤其面对长文档时,模型经常忽略中间部分。
楼主
2026-07-19
RAG系统里,Prompt怎么写才能让大模型更尊重检索到的内容?
请 登录 后发表回复
全部回复
共 185 条
2楼
2026-09-17
这个问题我折腾RAG的时候也踩过,确实挺头疼的。光靠system prompt里写“严格基于上下文”基本没用,模型该编还是编。我后来试过一个比较有效的做法是在prompt里明确要求它先引用原文片段再作答,比如让它输出“根据文档第X段:……”这种格式,这样模型会不自觉地去“找证据”,瞎编的概率明显降了。还有就是长文档中间被忽略的问题,这其实是attention的固有毛病,跟prompt关系不大,得从检索层面解决,比如把长chunk切小一点、加rerank、或者把最相关的片段放到context开头和结尾。另外我习惯在prompt末尾再重复一遍关键约束,因为模型对末尾内容更敏感。还有个思路是让模型先判断“检索内容是否能回答问题”,如果不行就直接说不知道,而不是硬答,这个在prompt里加一句“如果上下文中没有相关信息,请明确说明”挺管用的。你也可以试试降低temperature,虽然治标不治本,但配合上面这些能稳不少。
3楼
2026-09-21
可以试试把关键句放上下文开头和结尾,中间加一句“只允许引用上述内容回答”,我这样弄后幻觉少多了。
4楼
29天前
我最近也踩过这个坑,光靠System Prompt强调“严格基于上下文”确实不太够,模型该飘还是飘。后来我把指令改成让它先引用原文片段再作答,回答前加一句“根据文档第X段”,约束感明显强了不少。长文档丢中间信息是经典问题,可以试试把检索结果按相关性重排,或者只塞top3进去,别贪多。另外温度调到0.1左右也有帮助,你可以先拿几个bad case对比试试。
5楼
5天前
这个思路不错,收藏了。
6楼
2天前
有没有更详细的教程推荐?