Skip to content

高频面试题

如何让 AI 输出指定格式的内容,比如 JSON、表格、Markdown?

这道题考察你是否知道格式控制是 Prompt、模型能力和程序校验共同完成的,不是靠一句“不要输出多余内容”。

适合阶段:LLM 应用开发核心能力:格式约束 · Schema 校验 · 失败恢复

面试官角度分析,想考什么

  • 为什么模型明明被要求输出 JSON,还是会多写解释?
    考概率生成和格式约束边界。
  • Prompt 里怎么描述输出格式?
    考字段、类型、枚举、示例和禁止项。
  • 生产中如何保证格式可用?
    考结构化输出、校验、重试和降级。
  • Markdown 表格、JSON、自然语言有什么不同风险?
    考下游解析意识。

可直接抄走的 30 秒参考答案

text
让 AI 输出指定格式,不能只写“严格输出 JSON”。我会在 Prompt 里给清楚的字段、类型、枚举、空值策略和示例;如果平台支持 structured output 或 function calling,就优先用模型侧约束;拿到结果后再做 JSON parse、Schema 校验和业务校验。失败时把校验错误反馈给模型修复,超过重试次数就降级。

面试回答详解,知其所以然

格式控制的核心不是“提醒模型听话”,而是把输出变成可验证协议。

1. Prompt 层怎么写

text
输出要求:
- 只输出 JSON,不要解释文字
- 字段必须包含 title、summary、risk_level
- risk_level 只能是 "low" | "medium" | "high"
- 如果信息不足,summary 为空字符串,risk_level 为 "unknown"

写格式要求时要明确字段名、类型、枚举、是否必填、空值策略和额外文本处理。

2. 给示例锁定格式

json
{
  "title": "登录失败",
  "summary": "用户无法使用验证码登录。",
  "risk_level": "medium"
}

示例适合展示字段顺序、嵌套结构、空值和边界样例。复杂格式最好给一个正常样例和一个信息不足样例。

3. 不同格式的注意点

  • JSON:适合机器解析,要配合 schema validation,避免漏字段、类型错和额外文本。
  • Markdown:适合人读,但表格和代码块容易被截断,下游解析要谨慎。
  • 表格:适合少量结构化比较,不适合字段很长的复杂内容。
  • 纯文本:适合客服回复、摘要和口语回答,但难以自动校验。

4. 模型能力优先级

如果 API 支持 structured outputs、JSON schema、function calling 或 tool calling,应优先使用这些能力。Prompt 约束适合补充语义要求,但程序不能把模型文本当成可信序列化结果。

5. 生产闭环

text
生成 -> parse -> schema 校验 -> 业务校验 -> 失败重试 -> 降级/人工处理

校验失败时,可以把错误反馈给模型让它只修复格式;多次失败后应停止重试,走降级逻辑,避免无限消耗 token。

面试官追问3个问题

追问一:JSON mode 和 function calling 有什么区别?

  • 考察点:是否理解格式约束和工具调用语义。
  • 回答方向:JSON mode 偏生成合法 JSON,function calling 偏让模型选择工具并生成参数,两者都需要业务校验。

追问二:模型输出 Markdown 表格但列数错怎么办?

  • 考察点:是否有失败恢复设计。
  • 回答方向:用解析器检查列数和表头,不通过就让模型按错误修复;重要数据优先输出 JSON,再渲染成表格。

追问三:为什么合法 JSON 仍可能不能用?

  • 考察点:是否区分语法正确和业务正确。
  • 回答方向:字段类型合法不代表值可信,还要校验范围、权限、存在性、引用一致性和安全风险。

扩展知识

格式要求模板

text
输出格式:
- 类型:JSON
- 顶层必须是 object
- 不允许 markdown code fence
- 字段:
  - name: string,必填
  - tags: string[],可为空数组
  - confidence: number,0 到 1

为什么 Markdown 也要约束

Markdown 面向人类阅读,不是严格数据格式。涉及表格、链接、代码块和列表嵌套时,要说明标题层级、列名、代码语言和空值写法。

基于 MIT 协议开源