最近在折腾把开源大模型(比如ChatGLM3-6B)部署到客服场景里,想让它根据知识库回答用户问题。我参考了一些Prompt模板,把角色设定、回答规则、示例对话都写进去了,但测试时发现模型经常忽略“如果不知道就说不知道”的指令,反而自己编答案。比如用户问“你们有什么套餐”,它居然回答“我们有超值99元套餐”,但知识库里根本没这条。
我已经试过调整温度到0.1,把Prompt精简到200字内,还是不行。是不是我Prompt结构有问题,还是模型太小了根本hold不住这种任务?有没有大佬分享下实际落地时写Prompt的坑和技巧?
用大模型做客服问答,提示词写了一大堆还是答非所问,咋整?
全部回复
共 166 条6B模型做知识库问答确实容易放飞,光靠prompt里写“不知道就说不知道”基本没用,它该编还是编。你可以试试RAG方案,先检索知识库再把相关片段塞进上下文,让它基于给定内容回答,比纯prompt约束靠谱得多。另外温度0.1对幻觉帮助有限,关键还是得把答案来源限制住,比如要求它必须引用检索到的原文。
6B模型做客服问答确实容易这样,尤其是知识库覆盖不到的问题上,它更倾向于顺着语言惯性编一个“看起来合理”的答案。你温度调到0.1、Prompt精简到200字,其实方向没错,但光靠提示词很难根治幻觉,因为模型本身没有“我知不知道”的判断能力。比较实际的做法是把知识库检索和生成拆开,先做一轮相关性匹配,命中了再把片段塞进上下文让它组织语言,没命中就直接走兜底话术,别让模型自由发挥。另外“不知道就说不知道”这种负向指令,小模型经常当耳旁风,可以换成让它先输出检索到的原文依据,再基于依据回答,这样它编的成本会高很多。如果非要用纯Prompt方案,可以试试把示例对话里加一两个“知识库没有→回答不知道”的硬样本,但效果还是有限。真要把客服场景跑稳,建议至少上到14B以上,或者干脆用RAG框架把检索层做扎实。
6B模型做知识库问答确实容易放飞自我,光靠提示词约束“不知道就说不知道”基本治不住,它生成能力太强了。你这情况八成是没接检索,直接把知识库内容塞prompt里指望它自己找,模型会优先顺着语言惯性编。试试RAG方案,用向量检索把相关段落捞出来拼进上下文,再在prompt里明确“只根据以下内容回答”。温度调到0.1已经对了,但模型太小的话,检索增强比调prompt管用得多。另外可以在后处理加个校验,答案里出现知识库没有的数字或套餐名就拦截重问。
这个坑我也踩过,6B模型在客服场景确实容易“自信满满地胡说八道”,不是提示词结构的问题,更多是模型本身指令遵循能力有限。你试试把知识库检索和生成拆开,先做召回再让模型基于召回内容回答,而不是让它自己从参数里“回忆”。另外“不知道就说不知道”这种负向指令小模型经常当耳旁风,换成正向约束会好很多,比如“只允许使用以下资料回答,资料里没有的信息一律回复‘暂时没有相关信息’”,再在资料末尾加一句“以上资料未提及99元套餐”这种显式否定。温度0.1其实帮助不大,关键还是上下文里有没有明确的可信来源。如果条件允许,换个7B以上经过指令微调的模型,或者加一层规则兜底,比如命中关键词但知识库无匹配就直接走固定话术,别让模型自由发挥。
这个思路不错,收藏了。
有没有更详细的教程推荐?