让AI按格填空:提示词结构化输出实战指南(含JSON与Markdown模板)

让AI按格填空:提示词结构化输出实战指南(含JSON与Markdown模板) 在上一篇文章里我们聊了为什么要把结构化表格塞给 AI——讲道理、谈逻辑、看场景结论其实就一句话你不给它格子它就给你写散文。今天这篇是“下篇”直接上硬货怎么一步步让 AI 从“自由发挥”变成“按格填空”以及我在实际项目中踩过的坑和总结出来的一套可复用的模板。文章会涉及提示词编写、格式化输出、JSON 输出、Agent 场景下的结构化约束适合被 AI 输出问题折磨过的数据分析师、产品经理、开发者和所有重度 AI 用户。没有太多空话全是可以直接拿去抄的作业。1. 为什么 AI 总爱“自由发挥”先理解输出失控的底层原因1.1 Token 的“最省力原则”是万恶之源很多人第一次用大模型的时候都会有一种感觉这玩意儿怎么这么能说我想要个表格它给我写了两大段文字我想要个结论它给我列了七八条建议。你越说“详细一点”它越来劲。这里面的底层逻辑其实不复杂。大模型的生成过程是一个 token 一个 token“预测”出来的它每一步都在根据前文选择概率最高的下一个词。训练过程中它见过太多“自然语言”的文本所以默认情况下它输出自然语言的能力是满级的输出结构化数据的能力反而需要额外“激活”。注意我说的这个“激活”——模型本身是具备格式化输出能力的但如果你不给它明确的格式预期它就会沿着最自然的语言惯性走。这就像你让一个特别会聊天的人帮你填表结果他坐下来跟你唠了半小时表格还是空的。你要做的不是怪他话多而是把表格放在他面前让他填。1.2 真正的问题你没有把“格式”当成硬需求我们在实际使用中遇到的 90% 的输出失控情况其实不是模型不行而是提示词里根本没有规定“格式”这件事。比如你写“帮我分析一下这段用户反馈的意见”AI 会输出什么大概率是分点论述、加粗标题、甚至再来个总结。你觉得它“自由发挥”了但在模型眼里它挺正常的因为你只说了“分析”没说“分析完填到哪张表里”。所以从今天开始我建议你把“格式”视作提示词的第一需求而不是附加需求。你要在任务描述里明确告诉AI我不是让你写作文我是让你做填空题。这样输出的结果才是稳定、可靠、可复用的。2. 建立“按格填空”的提示词骨架先学会写模板2.1 一个好模板必备的四个区我把一套好用的结构化提示词拆成四个区角色区、任务区、结构区、边界区。角色区是告诉 AI 你是谁比如“你是一名资深数据分析师”。任务区是描述你要做什么比如“根据以下用户反馈提取关键信息”。结构区是核心你要具体定义输出的格式、字段、顺序、样式。边界区是兜底的比如“如果没有相关信息填‘无’不要编造”。这四个区不是说每条都要写满但结构区和边界区绝对不能省。很多人写提示词只写了角色和任务漏了结构结果 AI 又飞了。记住一个公式角色 任务 结构 边界 可复现的输出。2.2 一个可以直接抄的模板这里直接分享一个我每篇结构化提示词都会用的基础模板标题都能直接替换的那种角色你是一名严谨的内容结构化助手。 任务根据我提供的原始内容提取关键信息并严格按照我规定的表格格式输出。 输出结构要求 - 必须输出一个 Markdown 表格列名必须严格使用我下面给出的列名不得修改或者增删。 - 每一行数据都要从原始内容中提取不得自行补充原始内容中不存在的信息。 - 如果某一项在原始内容中找不到请填写“无”。 列名编号 | 项目名称 | 核心问题 | 建议方案 | 优先级 原始内容 在这里粘贴文本 请先确认你理解了要求然后直接输出结果不要输出任何解释。这个模板我个人用了很久效果非常稳定。它的关键是最后那句话不要输出任何解释。很多人写提示词没有这句话AI 就会先来一段“好的我已经理解了您的要求”然后才开始干活。浪费 token 是一回事破坏格式统一是更严重的问题。2.3 “格式示例”比“格式描述”更管用还有一个经验是在模板里直接给出一个“格式示例”。这不是可选项是必选项。你光说“请输出一个表格”AI 可能给你列一个 3 列的表你说“请按我下面的表头输出”它就老实很多。如果还能给出一行示例数据命中率会更高。原因是示例相当于给模型一个具体的锚点它会在生成的时候模仿示例的结构这就是成熟的 one-shot/few-shot 思路。我自己在写提示词时通常会抄一段希望 AI 输出的表格格式放在结构区里哪怕只给列名和一行样例效果也比纯文字描述高很多。这个技巧在复杂格式场景下尤其有效值得成为你所有提示词的习惯。3. 三种落地姿势纯文本表、Markdown 表和 JSON3.1 给人类看的Markdown 表格先说最常用的场景让 AI 输出给人看的内容这个时候 Markdown 表格几乎是无脑首选。Markdown 表格的优势是既有结构又易读在主流聊天工具里都会直接渲染复制到文档里也方便。缺点则是程序解析起来比较麻烦如果你后面要接代码自动化流程不建议用它。一个写得好的提示词示例大概是这样的请用 Markdown 表格输出以下内容表头为日期 | 事件 | 影响程度 | 处理建议这里有一个小细节表头顺序一定要写清楚。你如果只说“输出一个表格”AI 有可能会把“日期”“影响程度”的顺序调换。但你把表头按顺序写死了它一般会乖乖按着来。怕它乱改还可以补一句“严格按给定的表头顺序输出”。3.2 给程序用的JSON 输出如果你的下游是代码不是人眼那我强烈建议你用 JSON。这是目前大模型格式化输出里程序兼容性最好的格式。用 JSON 的时候提示词的写法要稍微变一变。核心原则有两个第一定义好 JSON 的字段名包括字段的含义和你期望的类型第二声明“只输出 JSON不要输出解释性文字”。请提取原始内容中的信息并输出成 JSON 格式。JSON 的字段和类型如下 { summary: string一句话总结, keywords: string[]关键词列表, risk_level: string可选值低/中/高, actions: string[]建议措施列表 } 要求 - 只输出 JSON不要输出解释、不要包裹在 Markdown 代码块里。 - 如果某个字段无法判断填写 null。 原始内容......这里最常遇到的问题就是 AI 会给你输出一个 Markdown 代码块包裹的 JSON或者输出一段话再接一个 JSON。解决方案是几乎每条都要加一句“不要用 Markdown 代码块包裹直接输出纯 JSON 文本”。做了这一步的稳定性提升非常明显。3.3 进阶玩法用 JSON Schema 和接口参数把格子焊死聊到 JSON不能跳过“结构化输出”这个概念。现在很多主流模型的 API 已经支持在接口层强制 JSON 格式这在 AI Agent 开发里也特别常用。具体点说你可以用请求参数里的response_format指定输出格式比如设置成{ type: json_object }亦或在函数调用Function Calling里传入 JSON Schema 定义参数结构。这样模型在生成的时候被要求在底层就遵守结构而不是靠提示词“自觉”。我用这个方案做了不少自动化脚本主要用于把 AI 的输出直接喂给下游程序不用再做额外清洗。如果你现在只是聊天场景可以不学这么深但如果你写代码调用 AI这块建议认真研究。它解决的痛点是提示词写得再好也存在意外接口层强制约束才是真正意义上的“按格填空”。4. 实战演示把一段自由文本培训成七行表格4.1 场景设定把产品需求变成需求评审表为了让你看得更明白我拿一个实际场景走一遍。假设你是一个产品经理或者技术负责人团队每天在群里发各种需求你希望用 AI 把这些需求整理成一张结构化的需求评审表字段包括需求ID、来源、需求描述、优先级、工作量预估、状态、备注。原始输入是群聊里一段很随意的文字比如“小明说登录页最近老有人反馈验证码看不清想放大一点最好能支持点击刷新。这个还挺急的感觉一个小版本就能做掉。另外运营那边希望分享海报加个二维码这个排到下个月吧。”这段文字很口语化、没有结构但如果直接丢给 AI 说“帮我整理成需求表”它大概率会给你输出一段总结性文字而不是表格。现在我们来按格填空。4.2 编写提示词的完整过程我的提示词会这样写你是一名严谨的需求管理助理。请根据我提供的原始沟通记录提取需求信息并输出为一个 Markdown 表格。 表格必须包含以下列且列名不得修改 需求ID | 来源 | 需求描述 | 优先级 | 工作量预估 | 状态 | 备注 要求 1. 如果原始内容提到了多条不同的需求请拆分为多行。 2. 没有提到的字段填写“无”不要编造。 3. 优先级只能填紧急、高、中、低。 4. 直接输出表格不要输出任何说明或建议。 原始内容 小明说登录页最近老有人反馈验证码看不清想放大一点最好能支持点击刷新。这个还挺急的感觉一个小版本就能做掉。另外运营那边希望分享海报加个二维码这个排到下个月吧。这里我把“优先级只能填紧急、高、中、低”作为边界条件写进去了。为什么因为如果不限定可选值AI 可能会填“高优先级”“较高”这类不统一的描述导致后面统计困难。枚举字段提前锁死是表格输出稳定性的一个关键操作。4.3 输出效果对比自由发挥 vs 按格填空如果我不做结构约束直接问 AI“帮我整理一下这些需求”它的输出往往长这样“根据反馈登录页验证码存在不清晰的问题建议进行优化同时增加点击刷新功能该需求较为紧急运营部门提出了新的二维码需求可以安排在后续版本中……”这句话信息量没错但它不是表你没法直接往下游用。而用上面那套“按格填空”的提示词实际输出就是一个干净的表格需求ID来源需求描述优先级工作量预估状态备注1小明登录页验证码放大、支持点击刷新紧急小版本可完成无无2运营分享海报增加二维码中无无下月排期差别是不是非常直观左边那版只能拿来读右边这版可以直接复制进 Excel 或者需求管理工具里流转。这就是“从自由发挥到按格填空”的本质价值。4.4 实际操作时要注意的几个小点第一个小点是用分隔符把原始内容和其他指令区开。我习惯用三个引号包住原始文本能有效降低 AI 混淆指令和内容的概率。第二个小点是当原始内容里有多条信息时要提前告诉 AI“按行拆分”否则它会自作主张合并成一段话。第三个小点是输出后如果发现字段不符合预期不要直接放弃用追问修复比重新生成省很多 token。5. 常见翻车现场与排查清单5.1 症状一AI 拒绝按格填空自己加戏这种表现是提示词里明明写了“只输出表格”结果 AI 还是在表格前面加了一段“根据您的要求我整理如下”后面再来一段“希望对您有帮助”。遇到这种情况先别怪 AI而是检查提示词里有没有写“不要输出任何解释性文字”。另一个原因是温度参数可能设得偏高。如果你调的 API可以把 temperature 降到 0 或接近 0输出会更稳定。我自己的经验是对结构化输出场景温度超过 0.5 就容易出幺蛾子。如果用的是聊天界面记得每次都在提示词里明确说“直接输出结果不要解释”。5.2 症状二字段漏了、多了、顺序乱了字段相关问题是最常见的。排查时首先确认你给的表头有没有写死。如果你只说了“输出一个需求表”AI 凭经验给你加一列“负责人”这不怪它怪你没写死。你可以加上一句“严格使用以下列名不得增删列”能解决 90% 的字段漂移问题。如果字段还是乱建议给一个“示例行”。这一步我不是每次都会做但一旦发现字段频出问题就果断加示例。模型对示例的模仿能力比对规则的理解能力更强这是我做多次实验后的体会。5.3 症状三长文本输出被截断搜索热词里有人提到“已达到输出 token 上限回答被截断”这在大模型处理长文档时极其常见。模型单次输出长度有限你让它把一篇几万字报告转成一张几十行的表它可能写到一半就断了。处理方案有两种。一种是拆把长文先切块多轮调用每次只处理一部分最后合并。另一种是要求 AI 分批汇总比如先要求“按自然段逐段输出结构化结果”再把多段结果合并。我在做长文档批量处理时通常要求 AI 只输出核心字段不输出完整原文摘要能极大降低 token 消耗和截断概率。5.4 症状四JSON 输出解析失败JSON 输出最常见的问题有三个被 Markdown 代码块包裹、字段值带了多余逗号、中文上下文中混入了注释。写提示词时加上“直接输出纯 JSON不要包裹在代码块中”是第一道防线。如果还失败开发阶段可以加一个简单的后处理清洗函数用正则去掉首尾的代码块标记。如果用 API 的response_format配合 JSON Schema基本能从根上杜绝这类问题。下面把常见问题整理成一张速查表方便你之后快速定位问题可能原因解决方法输出带解释和开场白未限制解释性输出提示词加“不要输出任何解释”列名被改动或乱序表头未写死提示词加“严格使用列名不得增删列”字段内容编造缺少边界条件提示词加“找不到填无不要编造”格式不稳定时好时坏缺少示例增加一行示例数据作为格式锚点长文本输出被截断超出 token 上限拆分输入分批处理合并结果JSON 解析失败代码块包裹或多余注释提示词说明或用 response_format 强制 JSON真正把这个方法体系跑通之后你会发现 AI 输出的稳定性提高了一个量级。以前是抽盲盒现在像是填表格心里很有底。我自己现在写提示词的步骤基本固定先在纸上画一遍想要的格子把列名确定下来然后用“角色 任务 结构 边界”四件套去写输出前如果条件允许再补一个示例。这套流程用了很久实测下来比任何“万能提示词”都可靠。最后再分享一个小技巧如果你希望 AI 长期稳定地按某种格式输出可以把这套格式要求单独存成一段“格式守则”在每次对话开始前粘贴进去。不要嫌麻烦这比每次现写要稳定得多。毕竟 AI 协作这件事驯得越细用得越顺。