你想要”温暖、口语化、有人情味”的输出,同时要”按这些精确 key 的严格 JSON”。JSON 有固定结构,温暖只能寄生在 prose 里。两边都要等于让模型同时满足两个矛盾规范。你拿到的,看哪个约束当天赢:要么是平板无趣但通过 schema 的 JSON;要么是带类 JSON 标签的温暖 prose,把你的 parser 弄挂。模型不是找不到中间地带,“严格结构”和”无约束 prose”之间根本没中间地带。
本文讲为什么风格和格式在底层就冲突,以及怎么挑一个或拆两遍。
常见原因
1. 固定 key schema 里要温暖
JSON key 没温度。Enum 值没温度。唯一能装温度的是 string 型 prose 字段,而且还受长度和周围结构约束。
如何判断:你要 JSON 还要语气温暖。
2. 创意语气 + 机器可读目标
营销文案要创意语气。ETL 流水线要机器可读结构。一次满足两边就是牺牲两边的强约束。
如何判断:输出既给人看又给脚本消费。
3. 冲突时没声明赢家
不说”格式赢”或”风格赢”,模型平均。两边消费者都失望。
如何判断:风格和格式之间没优先级。
4. 价值在 nuance 的任务非要严格 JSON
让 JSON 把 sentiment 分 positive/negative/neutral,就丢掉了”沮丧但理解”这种细微。瓶颈是 schema,不是模型。
如何判断:JSON shape 无法表达你真正需要的。
5. Prompt 里有矛盾线索
同 prompt 既说”口语化”(温暖)又说”只返回合法 JSON”(结构)。模型没法调和。
如何判断:prompt 同时存在两个指令而无解决。
动手前先确认
- 标真实消费者:parser、人,还是都要?
- 都要:定主要。
- 标你绝不能丢的那个(温暖 or 结构)。
- 决定一遍能否两边都满足,还是需要流水线。
- 计划必要时彻底放弃弱约束。
需要收集的信息
- 同时含风格和格式要求的当前 prompt。
- 满足不了一边或两边的输出。
- 下游消费者(具体 parser、具体读者)。
- 哪个约束不可让步。
- 模型 + system prompt。
最短修复路径
Step 1:定主要消费者
消费者 = parser(JSON 下游):
格式赢。prompt 里彻底删"温暖"。
消费者 = 人读:
风格赢。用 markdown(表 + 评论)代替严格 JSON。
消费者 = 两者(UI 显示 + 走分析管道):
两遍。见 Step 5。
Step 2:schema 有 prose 字段时把温度限在那里
{
"category": "billing", // 严格 enum 无温度
"priority": "high", // 严格 enum 无温度
"summary": "<prose、温暖语气、≤50 字>", // 这里允许温度
"escalation_needed": true // boolean 无温度
}
显式标哪些字段是 prose、哪些是机械。温度只在 prose 字段。
Step 3:纯人读用混合格式
结构化部分用 markdown 表:
| 类别 | 优先级 | 状态 |
|---|---|---|
| 账单 | 高 | 需升级 |
表下面评论(温度在这里):
"客户沮丧但理解——3 年老用户。
值得一通私人电话回访,而不是模板回复。"
两半模型都能自然做。
Step 4:禁 schema 膨胀
JSON 约束:
- 不要加 schema 没列的字段。
- JSON 内不要写解释注释。
- JSON 外不要包 prose 前缀("以下是 JSON:")。
模型爱”改进”你的 schema 加解释字段。禁。
Step 5:两边都要时用两遍工作流
Pass 1(内容):以 prose 产温暖、细微的分析。
Pass 2(结构):把 Pass 1 的 prose 抽到此 JSON schema。
Pass 1 抓 nuance;Pass 2 强结构。各干一件事都成功。
Step 6:API 层用结构化输出
严格格式用 JSON mode、带 schema 的 tool use、constrained decoding。模型物理上无法产无效结构。那时温暖(如果有)只能在 prose 字段,没风险破 parser。
怎么确认已经修好
- 输出下游一次过解析。
- prose 字段(如果有)有你想要的温度。
- 没 schema 膨胀或多余字段。
- 跑 3 次,3 个形态一致。
- 适用的话,人读觉得能用。
如果还是没修好
- 两个约束可能根本不兼容——砍一个。
- 两边都必须时用两遍流水线(Step 5)。
- 还没切就切到 API 层结构化输出。
- 降 temperature;格式稳定性提升。
预防建议
- 风格和格式分开关注,写 prompt 前先排序。
- 默认:机器消费者用干净 schema,不要风格。人读用 markdown。
- 多消费者流水线拆两遍。
- “温暖 JSON” 只用在显式 prose 字段;key 和 enum 不行。
- 审生产 prompt 风格 + 格式冲突;多数靠删一个解决。
- 不确定消费者时反问:“这输出先给谁?“
相关阅读
标签: #排查 #Prompt #Prompt 质量 #风格漂移