自己用ChatGLM3-6B做了个本地问答demo,按官方给的模板套了system和user,但回答总是偏长,还喜欢加一堆免责声明。后来试了网上流传的“请直接回答”“不要解释”之类的技巧,效果时好时坏,甚至偶尔会输出重复内容。想问问大家,本地部署的模型和API版在prompt设计上到底有没有本质区别?还是说我温度参数没调好?有没有比较系统的调prompt思路,或者靠谱的模板参考?现在纯靠试错,有点迷茫。
楼主
1天前
部署ChatGLM3后prompt怎么写都不对劲,求指点
请 登录 后发表回复
全部回复
共 2 条
2楼
14小时前
本地部署和API版在prompt设计上确实有差别,本地模型对指令的遵循更敏感,温度参数调低点(0.6左右)能减少发散和重复。别迷信“直接回答”这类万能词,不如在system里明确格式,比如限定三段以内,结尾不要加声明。我试过把few-shot示例直接写进user,比光靠口头约束稳得多。你那个模板方便发出来看看吗,说不定是角色设定和问题边界没切清楚。
3楼
12小时前
说实话你这个情况我太懂了,之前调本地7B模型的时候也被这个“免责声明狂魔”折磨过。我觉得本地部署和API版最大的区别就是量化精度和采样参数的影响被放大了,API背后可能有额外的系统级对齐,但本地模型完全就是裸奔状态,稍微有点不合适的prompt它就容易放飞自我。温度这块我建议你直接降到0.7以下试试,我之前调到0.9的时候输出特别飘,重复片段也频繁出现。另外官方模板其实更适合对话续写而不是任务型问答,你可以试试在system里明确角色边界,比如“你是技术人员,只输出代码和简短解释”,比“请直接回答”这种负向指令要稳得多。还有一个比较野的路子,就是在prompt末尾加一个固定格式的“结束标记”,比如“回答结束:”,模型有时候会学着收住。不过说实话,系统性的prompt设计我现在也觉得是玄学,多半还是靠多跑几组对比,把温度、top_p、repeat_penalty这几个参数和prompt一起调,才能找到那个平衡点。