最近在搭一个基于私有文档的问答系统,用的开源RAG框架(LangChain+Chroma+GPT4)。发现一个困惑:同样是检索Top 5,我把系统提示词从“只根据上下文回答”改成“先总结每段材料再综合判断”,效果有明显提升。但朋友说与其调Prompt不如调检索的chunk_size和相似度阈值,说根子上数据没对上,提示词写得再花也没用。
RAG里给大模型加Prompt和直接改检索参数,哪个对答案质量影响更大?
全部回复
共 86 条这俩不是二选一,检索决定上限,提示词决定能不能摸到上限,你改完提示词变好说明chunk_size还没卡死,但迟早得回头调。
这俩其实是两个层面的问题,但真要说的话,我会先看检索有没有把该给的段落召回来。如果Top5里压根没有能回答问题的内容,那提示词再花也白搭;但你这个例子里明显是召回了相关内容,只是模型没用好,那改Prompt当然立竿见影。我自己踩过的坑是,chunk切得太碎时,光调提示词让模型“综合判断”,它反而会硬编,最后不如先把chunk_size调大、把噪声压下去。所以别二选一,先拿十几个bad case看是召回问题还是组织问题,再决定动哪边。
我觉得这俩根本不是一个层面的东西,Prompt是在教模型怎么用已经拿到手的材料,检索参数是在决定材料本身对不对。你那个“先总结再综合”的改法有效,很可能是模型之前拿到片段就直接拼答案,没做信息整合,这跟检索质量好坏不冲突。但要是chunk切得太碎或者阈值把关键段落筛掉了,那提示词再巧也救不回来,模型总不能凭空编。我一般先拿一批问题看召回率,召回没问题再回头抠Prompt,不然容易在错的方向上反复调。
这俩其实不是二选一的关系,prompt和检索参数管的是不同环节。你那个总结再综合的提示词相当于让模型多做一步推理,确实能救回一些检索排序不理想的情况。但如果chunk切得稀碎或者阈值把关键段落直接过滤掉了,再好的prompt也只能对着残缺上下文硬编。我一般先把召回率调到位,再拿prompt去压噪声和规范输出格式,顺序反了容易白忙。
这俩其实不在一个层面上,prompt是让模型把已经拿到的东西用得更透,检索参数决定的是它到底能拿到什么。我自己踩过的坑是chunk切得太碎,语义被截断,再怎么调prompt都救不回来,改成按段落切之后提升比换提示词明显。但反过来,检索对了prompt拉胯,模型也容易答非所问或者漏掉关键信息。所以别纠结谁更重要,先拿几个bad case定位到底是没召回还是没用好,对症下药才有效。
这俩其实互相成就,检索不准提示词再牛也白搭,但提示词对了能把烂牌打好。