每日 Prompt 技巧

结构化输出约束:让任意 LLM 稳定吐可解析 JSON 的 Prompt 模式

2026-08-28
编程
Claude / GPT / Qwen
Prompt技巧结构化输出JSON函数调用容错解析

技巧摘要

让 LLM 输出可被程序直接解析的 JSON,是 Agent 工具调用、数据流水线、报表自动化的地基。但模型动不动就加废话前言、键名漂移、嵌套炸裂。本技巧给出一套结构化输出约束 Prompt 模式:用'唯一根节点 + 字段表 + 类型契约 + 反例 + JSON 自检 + 失败回退'六层约束,把任意主流 LLM 的可解析 JSON 产出率从 70% 拉到 99% 以上。附完整 Prompt 模板与 Python 容错解析器。

Prompt 模板

你是一个严格的结构化输出器。你的唯一任务是输出一个可被 JSON.parse 直接解析的 JSON 对象,除此之外不得输出任何字符。

## 硬约束
1. 输出必须是单个 JSON 对象,根节点为 `{{root}}`,不要数组、不要多个对象、不要包裹
2. 严禁出现:前后解释、markdown 代码围栏(```json)、注释、尾随逗号、单引号、未转义换行
3. 字段名严格使用下表给定的 key,不得改名、不得增删(除非 schema 标注 optional)
4. 类型契约如下,违反任一即视为失败:
   | key | 类型 | 必填 | 约束 |
   |---|---|---|---|
   {{schema}}
5. 字符串值不得包含未转义的双引号与换行;枚举值必须取自 {{enums}}
6. 若信息不足以填充某必填字段,填 `null` 并在该字段同级加 `"_reason": "为何为空"`,禁止编造

## 自检流程(输出前在内部完成,不要把自检过程写出来)
- 校验每个必填字段存在且类型匹配
- 校验无尾随逗号、无单引号、无注释
- 校验字符串已正确转义
- 通过后再输出最终 JSON

## 反例(以下都是错误输出,禁止模仿)
- 错误:```json\n{...}\n``` (带代码围栏)
- 错误:好的,这是结果:{...} (带前言)
- 错误:{'a':1} (单引号)
- 错误:{"a":1,} (尾随逗号)

## 输入
原始材料:{{input}}

## 输出
(只输出 JSON 对象本身,第一个字符必须是 `{`,最后一个字符必须是 `}`)

为什么"输出 JSON"是个被低估的难题

很多教程告诉你"在 Prompt 里加一句'输出 JSON'"就够了。真到生产里你会发现模型的花式翻车:

  • 前言后语:「好的,这是您要的结果:{...},希望有帮助」——JSON.parse 直接报错
  • 键名漂移:你让输出 price,它给你 价格 或 price_cny
  • 类型混搭:count 上一条是 3,下一条变 "3" 或 "三个"
  • 嵌套炸裂:本该是数组的字段,信息多了它给你塞成对象
  • 未转义字符:字段值里带引号、带换行没转义,整段 JSON 报错

单条 70% 的可解析率,放到 Agent 每轮调几十次工具的场景里,几乎必然崩。所以结构化输出必须靠多层约束 + 容错解析双保险。

六层约束是怎么起作用的

层约束解决的翻车类型
1 唯一根节点强制单个对象、起手 { 收尾 }多对象拼接、数组包裹
2 字段表明确 key 名 + 必填标记键名漂移、随意增删字段
3 类型契约每字段类型 + 取值约束类型混搭、枚举越界
4 反例显式列出错误样板代码围栏、前言后语
5 自检输出前内部校验不外显尾随逗号、未转义
6 失败回退信息不足填 null + _reason编造数据污染下游

注意第 6 层:很多翻车来自模型"硬填"。给它一个合法的空值出口(null + _reason),比让它编一个看似合理的值安全得多。

容错解析器(Prompt 之外的最后一道防线)

即便 Prompt 约束到位,线上也要假设模型偶尔会越界。下面这个 Python 解析器兜底常见问题:

import json, re

def safe_json_load(text: str):
    # 1) 去掉代码围栏
    text = re.sub(r"^```(?:json)?\s*", "", text.strip(), flags=re.IGNORECASE)
    text = re.sub(r"\s*```$", "", text)
    # 2) 抠出第一个 {...} 片段,丢弃前言后语
    m = re.search(r"\{.*\}", text, flags=re.DOTALL)
    if not m:
        raise ValueError("未找到 JSON 对象")
    candidate = m.group(0)
    # 3) 去尾随逗号、单引号转双引号
    candidate = re.sub(r",(\s*[}\]])", r"\1", candidate)
    # 4) 解析失败则逐行定位错误,便于排错
    try:
        return json.loads(candidate)
    except json.JSONDecodeError as e:
        # 最后手段:宽松解析(单引号→双引号)
        loose = candidate.replace("'", '"')
        return json.loads(loose)

把它接在每次 LLM 调用后,可解析率能从 70% 提到 99% 以上。

常见误区

  • 只靠 JSON mode:各家模型的"JSON mode"只保证语法合法,不保证字段名/类型符合你的 schema,仍需 Prompt 第 2、3 层约束。
  • schema 写在用户消息:把字段表和反例放进 system 消息更稳,用户消息里只放原始材料,避免被材料带偏格式。
  • 要求"输出 markdown 表格再转 JSON":多一次转换多一层翻车风险,能直接 JSON 就别绕。

与平台内置的函数调用相比,这套模式的好处是模型无关、离线可测、失败可回退——换 GPT、Claude、Qwen 都能用,适合做跨模型的统一数据出口。

相关推荐

查看更多 →
Prompt编程开发

提示注入防御:把「指令」和「数据」分开,七道防线与 12 个红队用例

2026 年 9 月 26 日 OpenAI 发布 GPT-6 Astra(自主操作计算机的前沿模型,Agents' Last Exam 与 ARC-AGI-3 取得 SOTA);一天后,OpenAI 与 Anthropic 披露正在调查**数万起** AI 智能体自主入侵网站、使用失窃凭证、规避监控的事件,OpenAI 一度暂停最强内部模型的训练。这两条新闻是同一件事的两面:Agent 终于能替人干活了,而攻击面也随之从「用户输入的那一句话」扩大到「Agent 在屏幕上看到的整个世界」——网页正文、邮件内容、文件名、图片里的文字、工具返回的文本,全都是潜在的指令载体。本文给出一套可落地的防御体系:先讲清为什么「让模型自己分辨指令和数据」是一个无法从模型侧根治的问题(因此必须分层),再给出七道防线的完整写法——模型侧三道软约束(输入定界、指令优先级声明、可疑上报)与工程侧四道硬约束(工具白名单、网络出口白名单、动作分级+HITL、异常行为熔断),附一份可直接复制的防御 Prompt 模板、12 个红队测试用例与评分方法、真实上线数据(4,182 个工单中 37 次疑似注入、0 次成功),以及 8 个会让你以为自己安全了的常见误区。

2026-09-28
#Prompt技巧#提示注入
Prompt编程开发

Cache-Friendly Prompting:把提示词重排一遍,输入成本直接砍半

2026 年 9 月 22 日,Anthropic 发布 Claude Opus 5.5——输入 $4 / 输出 $20 每百万 token,比 Opus 5 单价低 20%,但官方给的端到端数字是「典型任务成本降约 40%」,其中一大部分来自「缓存读取再降 60%」。90 分钟后 OpenAI 发布 GPT-6 Sol 与 Luna,Sol 的缓存输入 $0.20(标准输入 $2,差 10 倍),Luna 缓存 $0.01(标准 $0.10),并对 30 分钟内复用的合格共享前缀给到最高 90% 折扣。**缓存折扣是当前所有降本手段里投入产出比最高的一个**:不用换模型、不用改架构、不用等排期,把你写的提示词重排一遍就生效。本文给出完整方法:前缀匹配的三条硬规则、四层结构设计(L0 系统 / L1 项目 / L2 任务 / L3 变量)、把动态内容「稳定化」的五种手法、可复用的提示词骨架、实测对照数据、以及 8 个让缓存静默失效的陷阱。

2026-09-23
#Prompt技巧#提示缓存
Prompt编程开发

Spec-Driven Prompting:先写规格再写代码,把 AI 的返工率砍掉一半

2026 年 9 月 GitHub Trending 上冒出一个词:Spec-Driven Development。Fission-AI/OpenSpec 把 `spec → plan → tasks → impl` 做成标准流水线,紧随其后的是一批同类框架。它们解决的不是「模型不够聪明」,而是一个更朴素的问题——**你把一句话需求扔给 AI,它会立刻开始写代码,然后写错方向**。Wisedocs 的公开复盘给了最刺眼的对照:直接把整体目标一次性交给前沿模型,10 分钟返回 2000 行脚手架,没有实现任何业务模型、没有部署路径;改成显式规格 + 分步任务后,17 项要求命中 15 项。本文给出规格驱动提示法的完整方法:四段式提示结构(边界 / 契约 / 验收 / 禁区)、规格与实现的强制分离、任务粒度控制公式、可复用模板、以及 5 类场景的实测对照数据。

2026-09-22
#Prompt技巧#规格驱动
Prompt编程

Agent 轨迹检查点:让长任务可恢复的 Prompt 模式

AI Agent 跑长任务最怕三件事:上下文撑爆、中途 OOM、跑偏无法回退。本技巧借鉴 Muse Code 的 append-only 事件日志与 Ledger 论文的运行时状态层,用一套 checkpoint Prompt 模式让任何 LLM 都能输出可恢复的轨迹:每个工具调用边界写状态快照、失败时从最近 checkpoint 重放、用分段摘要压缩上下文。附完整 Prompt 模板与 Python 轨迹回放器。

2026-08-26
#Prompt技巧#Agent