第6章:Prompt、Chat Template 与对话协议
1. 项目背景某政务服务平台接入了LLM做智能问答。技术团队选用了一个热门的开源模型,测试时问题"如何办理社保转移?"得到了专业准确的回答。但上线后,客服主管发现一个诡异的规律:每天上午的回答质量很好,下午就开始答非所问,到了晚上甚至出现"好的,我会按照您的要求拒绝回答该问题"这样的反常输出。排查后发现,这不是模型"犯困"——而是Chat Template 在特定条件下未被正确应用。上午的测试人员用的是OpenAI SDK,SDK自动应用了Chat Template;下午的业务方直接调HTTP API,裸传了messages数组,服务端因为没有正确的Chat Template配合,将system/user消息拼接成了一个畸形Prompt。晚上是第三方系统调用,用的base模型而非instruct模型,直接将user消息当作文本补全任务处理。痛点:LLM不是一个"输入什么就理解什么"的黑盒。Base模型、Instruct模型、Chat模型对输入格式的要求完全不同——Base模型期望原始文本,Instruct模型有特定格式模板(如|im_start|system\n...|im_end|),Chat模型通过Chat Template将messages结构转化为模型可理解的Prompt。模板错配的后果轻则回答质量下降,重则安全机制失效(因为system prompt可能没被正确注入)。本章将深入剖析Prompt的构成、Chat Template的加载与匹配机制、多轮对话的上下文管理策略,并通过对比实验直观展示有无模板、正确/错误模板三种情况下