自己用ChatGLM3-6B做了个本地问答demo,按官方给的模板套了system和user,但回答总是偏长,还喜欢加一堆免责声明。后来试了网上流传的“请直接回答”“不要解释”之类的技巧,效果时好时坏,甚至偶尔会输出重复内容。想问问大家,本地部署的模型和API版在prompt设计上到底有没有本质区别?还是说我温度参数没调好?有没有比较系统的调prompt思路,或者靠谱的模板参考?现在纯靠试错,有点迷茫。
部署ChatGLM3后prompt怎么写都不对劲,求指点
全部回复
共 24 条我也踩过这个坑,本地6B和API版差别真挺大的,小模型对prompt更敏感,你写“不要解释”它反而可能盯着这个词瞎发挥。温度别急着调,先固定0.3左右,重点是把system写清楚角色和输出格式,比如“只输出答案,不超过两句话”。重复内容多半是max_length或者重复惩罚没设好,可以试试repetition_penalty调到1.1。另外建议去翻翻官方仓库的example,比网上那些玄学技巧靠谱多了。
本地部署和API版确实有区别,但没你想的那么玄乎,更多是参数配置和推理框架的差异。ChatGLM3-6B对prompt格式其实挺敏感的,官方模板里的system和user之间最好别乱加空格或换行,否则模型容易把指令当成普通上下文。回答偏长和爱加免责声明,大概率是训练数据里这类安全回复占比高,温度调到0.3到0.5之间会稳一些,太高就容易重复。我自己试过把system写得更具体,比如“你是问答助手,回答不超过三句话,禁止输出‘作为AI’”,比笼统的“请直接回答”管用。另外可以试试在user结尾加一句“答案:”来引导它直接续写,这招对6B小模型挺有效。纯靠试错确实累,建议你先固定温度0.4,然后只改system里的约束词,一次只动一个变量,记录几组对比,很快就能摸到边界。
本地部署和API版确实有差别,API那边通常做了后处理或对齐调优,本地裸模型更容易“放飞”。回答偏长和免责声明多,八成是system没压住,可以试试把system写得更具体,比如限定字数、指定输出格式,比“请直接回答”这种泛泛指令管用。温度别急着调,先固定0.3左右排除随机性,重复输出往往是top_p或重复惩罚没设好。建议去扒一下ChatGLM3官方finetune仓库里的prompt示例,比网上那些零散技巧系统多了。
温度调低点先,0.3试试,太长可能是重复惩罚没设对。