最近在搞一个电商客服的demo,用的GPT-3.5,api直调那种。产品那边要求它回答商品库存、退换货政策这些,但我发现prompt写简单了它就开始乱编,比如“这个商品目前有货”但实际没货。试过加“只回答你确切知道的信息”,结果它直接回“我不清楚”连政策都不解释了。有没有大佬分享下实际项目里,怎么设计prompt结构让模型既准确又能结合上下文?比如要不要把知识库塞进去?或者用system message做角色设定是不是比user prompt更稳?先谢过!
用大模型做客服,prompt怎么写好才能不“胡说八道”?
全部回复
共 152 条我们项目里也是GPT-3.5做客服,踩过一模一样的坑。光靠system message说“别瞎编”真没啥用,该编还是编。后来改成把商品库存、退换货政策这些实时数据先查出来,作为上下文塞进prompt里,明确告诉它“只根据以下信息回答”,效果才稳。另外温度调到0.2左右也有帮助,你可以试试。
这个问题我踩过差不多的坑,直调GPT-3.5做客服确实容易翻车。我的经验是别指望靠一句“只回答确切知道的信息”就管住它,模型对“确切知道”的判断跟你完全不一样,它觉得自己编得挺确切的。真正有效的做法是把知识库内容直接拼进system message里,让它基于给定内容回答,而不是靠它自己的记忆。库存这种动态数据更得实时从接口查完再塞进上下文,prompt里写死是没用的。另外可以在system里加一条兜底规则,比如“如果知识库中没有相关信息,就引导用户联系人工客服”,这样至少不会硬编。temperature调到0.2以下也有帮助,但治标不治本。角色设定放system确实比user prompt稳,因为system的权重更高,模型更当回事。不过说实话,纯prompt工程解决不了幻觉问题,关键信息还是得走RAG或者函数调用,让模型只负责组织语言而不是提供事实。
用RAG把库存和退换货政策喂进上下文,比光在prompt里叮嘱管用多了。
知识库必须塞,不然模型全靠编;system message定边界,user里再喂检索结果,稳很多。
知识库一定要塞,光靠提示词兜不住事实性内容。退换货这种固定话术写死进上下文,库存走接口实时查,别让模型自己记。
我之前也踩过这个坑,光靠system message强调“别瞎编”真没啥用,模型该编还是编。后来改成把库存和退换货规则这些动态数据先查出来,再塞进prompt里让它基于给定信息回答,效果稳很多。你可以试试让它只做“转述”而不是“判断”,比如明确说“根据以下信息回答,信息里没有就说需要转人工”。另外gpt-3.5对长上下文里夹带的知识确实容易忽略,关键数据最好放在问题前面再重复一遍。
知识库必须塞进system message里,库存这种实时数据最好走接口查,别指望模型自己记住。
知识库得塞,但别全塞,先检索再喂给模型,不然它还是瞎编。
知识库塞prompt里容易超长,试试用function calling查库存,政策类走RAG检索,比硬编准。
我之前也踩过这个坑,光加“别乱说”没用,得把知识库内容直接拼进system message里,让它基于给定信息回答。库存这种实时数据最好走API查完再喂给它,别指望模型自己知道。另外可以要求它回答时带出处,比如“根据退换货政策第三条”,这样编没编一眼就看出来了。
有没有更详细的教程推荐?
这个思路不错,收藏了。