一个AI助手的"人格分裂"
某公司的AI客服有两个"人格":在System Prompt中它被定义为"友好、有耐心的客服",但在回答复杂问题时,它突然变得"冰冷、机械、拒绝帮助"。用户困惑不已:“这个AI怎么像两个人?”
排查后发现,System Prompt中有一段:“如果用户的问题涉及法律或金融,你必须建议用户咨询专业人士。“AI在处理边缘案例时,把"退款政策"也归类为"金融问题”,于是拒绝了所有涉及钱的对话。
一个看似合理的约束,导致了灾难性的用户体验。 这就是System Prompt设计的"蝴蝶效应”——一个小小的措辞,可能在大量调用中被放大为严重的问题。
System Prompt的本质:AI的"运行环境"
System Prompt不是"给AI的指令",而是"AI的运行环境"。就像操作系统的内核定义了应用程序可以做什么、不能做什么,System Prompt定义了AI的角色、能力、边界和行为模式。
理解了这个本质,你就会明白:System Prompt设计不是"写作",而是"系统架构"。 你不能把System Prompt当成一篇文章来写,而应该把它当成一个系统来设计。
System Prompt的模块化架构
一个工程化的System Prompt应该包含以下模块:
模块一:身份定义(Identity)。 “你是一个[角色],你的职责是[核心职责]。”
- 作用:为AI建立"自我认知",锚定知识范围和语言风格
- 常见错误:角色定义太模糊(“你是一个助手”)或太狭窄(“你只能做X”)
模块二:能力描述(Capabilities)。 “你能做[A]、[B]、[C]。你特别擅长[X]。”
- 作用:明确AI的能力边界,减少"我不知道"或"我瞎编"的情况
- 常见错误:过度承诺能力(“你什么都能做”)或过度限制(“你只能做这些”)
模块三:行为准则(Behavioral Guidelines)。 “当[触发条件]时,你应该[具体行为]。”
- 作用:定义AI在特定场景下的行为模式,确保一致性
- 常见错误:准则之间相互冲突,或准则过于绝对导致"过度拒绝"
模块四:输出规范(Output Specification)。 “你的输出应该遵循[格式要求]、[风格要求]、[长度要求]。”
- 作用:确保输出的格式和质量一致性
- 常见错误:规范过于复杂,模型无法完全遵循
模块五:安全约束(Safety Constraints)。 “你绝对不能[禁止行为]。当用户要求[敏感请求]时,你应该[处理方式]。”
- 作用:防止有害输出,保护用户和公司
- 常见错误:约束过于宽泛导致"过度审查",或约束遗漏导致安全漏洞
System Prompt设计的五个原则
原则一:优先级排序。 最重要的约束放在最前面和最后面——模型对Prompt开头和结尾的信息最敏感。中间的约束可能被"遗忘"。
原则二:正向表述。 不要写"不要做X",写"当遇到这种情况时,做Y"。正向表述比负向表述更容易被模型遵循。“不要"开头的指令,模型的遵循率比"请"开头的指令低30%。
原则三:具体化。 不要写"保持专业”,写"使用正式的语言,避免俚语和口语化表达,引用权威来源时注明出处"。模糊的指令给了模型太多的"解释空间"。
原则四:一致性检查。 写完后,逐条检查所有约束是否一致。是否有"A说要做X但B说不做X"的矛盾?是否有"既要专业又要亲切"的不可能要求?
原则五:渐进式设计。 不要一次性写完System Prompt。先写最核心的身份定义,测试;再加入行为准则,测试;再加入输出规范,测试。每一步都测试,确保新加入的约束没有破坏已有的功能。
System Prompt的测试方法
用"对抗性测试"来验证System Prompt的鲁棒性:故意输入边缘案例、歧义请求、恶意请求,观察AI的行为是否符合预期。特别关注"过度拒绝"(该做的没做)和"过度纵容"(不该做的做了)两种情况。
一个深刻的洞察:System Prompt设计的最高境界,是让用户感受不到它的存在。 好的System Prompt像空气——用户不知道它的存在,但它默默地让一切正常运行。