🧠AI Prompt 与上下文
System User Tool消息分工
面试回答
常见问法
System、User、Tool 这几类消息各自该放什么?为什么分工很重要?
回答
这几类消息的价值不只是“格式不同”,而是职责不同:
- System:定义角色、边界、规则、总体行为
- User:表达当前任务和输入
- Tool:承载外部工具返回的结构化结果
如果把这些角色混在一起,系统容易出现:
- 指令冲突
- 上下文污染
- 工具结果被模型误解
追问
- 为什么不建议把所有规则都塞进 User message
- Tool 返回内容为什么通常不该伪装成 User
- System Prompt 和业务 Prompt 冲突时怎么处理
原理展开
一个常见稳定设计是:
messages = [
{"role": "system", "content": "你是一个客服助手,必须基于工具结果回答。"},
{"role": "user", "content": "帮我查一下订单状态"},
{"role": "tool", "content": '{"order_id": "123", "status": "shipped"}'},
]
这样模型更容易理解:
- 哪些是系统原则
- 哪些是用户诉求
- 哪些是外部事实
面试里最好点出来: “消息分工本质上是在做上下文治理,不是为了消息字段好看。”
易错点
- 把业务规则、工具结果、用户输入全拼成一大段
- Tool 结果格式不稳定,导致模型难以消费
- System Prompt 太长太散,反而压不住行为
记忆技巧
记住一句:
- System 定边界
- User 提任务
- Tool 给事实