提示工程 | | 约 13 分钟 | 5,189 字

结构化输出提示

掌握结构化输出技巧,让AI返回JSON、Markdown、YAML等标准格式

结构化输出的重要性

在日常使用 AI 的过程中,我们经常需要 AI 返回的结果能够被程序解析、处理或展示。结构化输出就是让 AI 按照预定义的格式返回内容,确保输出的一致性和可解析性。

结构化输出广泛应用于:

  • 数据提取和信息抽取
  • 程序化调用 AI 的结果处理
  • 报告和文档的自动生成
  • API 响应格式的模拟

JSON Schema 指定格式

1. 基础 JSON 格式

最常用的结构化输出格式,适合机器处理。

请以 JSON 格式返回用户信息,包含以下字段:
- name: 用户名(字符串)
- email: 邮箱(字符串)
- age: 年龄(数字)
- interests: 兴趣标签(字符串数组)

返回示例格式即可。

2. 详细 Schema 定义

提供完整的 JSON Schema,让模型更精确地理解输出要求。

请返回产品信息,格式如下:

{
  "type": "object",
  "properties": {
    "productName": {
      "type": "string",
      "description": "产品名称"
    },
    "price": {
      "type": "number",
      "description": "价格,单位元"
    },
    "category": {
      "type": "string",
      "enum": ["电子产品", "服装", "食品", "图书"],
      "description": "产品分类"
    },
    "inStock": {
      "type": "boolean",
      "description": "是否有库存"
    },
    "tags": {
      "type": "array",
      "items": {"type": "string"},
      "description": "产品标签"
    }
  },
  "required": ["productName", "price", "category"]
}

请为一个智能手表生成符合上述格式的信息。

3. 嵌套结构

处理复杂的多层嵌套数据。

请以 JSON 格式返回公司组织架构:

{
  "company": "公司名称",
  "departments": [
    {
      "name": "部门名称",
      "head": "部门负责人",
      "employeeCount": 人数,
      "teams": [
        {
          "name": "团队名称",
          "lead": "团队负责人",
          "members": ["成员1", "成员2"]
        }
      ]
    }
  ]
}

4. 带注释的 Schema

用自然语言描述字段含义,帮助模型理解。

返回一篇分析报告,包含:

1. 基本信息
   - title: 报告标题
   - author: 作者
   - date: 日期 (格式:YYYY-MM-DD)

2. 核心发现(数组,每项包含)
   - 发现编号
   - 发现内容描述
   - 重要程度 (high/medium/low)

3. 建议措施(数组)
   - 具体建议
   - 预期效果
   - 实施难度 (easy/medium/hard)

请分析以下内容:[内容]

Markdown 表格格式

1. 基础表格

适合返回列表类、比较类信息。

请用 Markdown 表格对比以下三款手机:

| 特性 | 手机A | 手机B | 手机C |
|------|-------|-------|-------|
| 价格 | ? | ? | ? |
| 处理器 | ? | ? | ? |
| 内存 | ? | ? | ? |
| 存储 | ? | ? | ? |
| 电池 | ? | ? | ? |

2. 复杂表格

包含多级表头、合并单元格等复杂结构。

用 Markdown 表格展示 2024 年各季度营收数据:

| 区域 | Q1 | Q2 | Q3 | Q4 | 全年 |
|------|-----|-----|-----|-----|------|
| 华东 | 120 | 135 | 150 | 180 | 585 |
| 华南 | 100 | 110 | 125 | 140 | 475 |
| 华北 | 90 | 95 | 110 | 130 | 425 |
| 西部 | 60 | 70 | 85 | 95 | 310 |
| **合计** | **370** | **410** | **470** | **545** | **1795** |

3. 表格+说明

表格与文字结合,适合报告类输出。

分析这三款产品的市场表现:

## 产品对比表

| 产品 | 市场份额 | 增长率 | 用户满意度 | 竞品差距 |
|------|----------|--------|------------|----------|
| 产品A | 35% | 15% | 4.5/5 | 领先 |
| 产品B | 25% | 20% | 4.2/5 | 追赶 |
| 产品C | 20% | 8% | 3.8/5 | 落后 |

## 关键发现

1. 产品A市场份额最高,但增长率放缓
2. 产品B增长最快,有望超越
3. 产品C需要重新定位

## 建议

- 产品A:维持优势,注重用户体验
- 产品B:加大投入,扩大优势
- 产品C:考虑差异化或退出

4. 多表格组合

处理需要多维度展示的信息。

请分析一个软件项目的开发情况,返回以下表格:

表1:项目成员及职责
| 角色 | 姓名 | 主要职责 |
|------|------|----------|
| PM | ? | 项目管理 |
| 前端 | ? | UI开发 |
| 后端 | ? | 接口开发 |
| 测试 | ? | 质量保证 |

表2:各模块开发进度
| 模块 | 进度 | 状态 | 负责人 |
|------|------|------|--------|
| 登录 | 100% | 已完成 | ? |
| 首页 | 80% | 进行中 | ? |
| 详情页 | 60% | 进行中 | ? |
| 支付 | 30% | 待开发 | ? |

YAML 格式

1. 基础 YAML

适合配置文件、结构化描述,格式清晰易读。

请用 YAML 格式描述这个项目的配置:

项目名称: AI学习助手
版本: 1.0.0
作者: 开发团队
配置:
  语言: zh-CN
  时区: Asia/Shanghai
  日志级别: info
功能模块:
  - 名称: 用户管理
    状态: 已完成
  - 名称: 内容推荐
    状态: 进行中
  - 名称: 数据分析
    状态: 规划中

2. 复杂嵌套 YAML

适合多层级的配置或描述信息。

服务器配置:
  web:
    host: 0.0.0.0
    port: 8080
    workers: 4
    timeout: 30
  database:
    primary:
      host: db1.example.com
      port: 5432
      name: production_db
    replica:
      host: db2.example.com
      port: 5432
      name: production_db
  cache:
    type: redis
    host: cache.example.com
    port: 6379
    db: 0

部署:
  环境: production
  策略: rolling
  健康检查:
    路径: /health
    间隔秒: 10

3. YAML + 说明

YAML 格式配合解释性文字。

请用 YAML 描述这个招聘岗位的要求:

# 招聘岗位:高级后端工程师

岗位要求:
  学历: 本科及以上
  经验: 3-5年
  技能要求:
    - 精通Go或Java
    - 熟悉微服务架构
    - 了解Docker/K8s
    - 有大规模系统经验
  加分项:
    - 开源项目贡献
    - 技术博客
    - 英文流利

薪资范围:
  最低: 30K
  最高: 50K
  福利: 六险一金、弹性工作、年度旅游

请为这个岗位生成完整的描述。

结构化输出的最佳实践

1. 明确格式要求

在提示中清晰说明输出格式,越具体越好。

❌ 返回一些数据
✅ 返回 JSON 格式,包含 name、age、city 三个字段,都是字符串类型

2. 提供示例

用示例展示期望的输出格式,比纯文字描述更有效。

返回格式如下:
{"name": "张三", "age": 30}

现在请返回你的信息。

3. 处理格式错误

考虑 AI 可能输出格式错误,添加容错处理。

请返回 JSON 格式。如果无法完全符合格式,请返回最接近的有效 JSON。

4. 验证输出

程序化使用时,务必验证输出格式。

5. 组合多种格式

根据需要组合使用不同格式。

先用 JSON 返回结构化数据
再用 Markdown 表格进行对比分析
最后用纯文本总结要点

常见问题处理

1. JSON 格式错误

  • 减少嵌套层级
  • 使用更简单的数据结构
  • 提供更详细的格式说明

2. 表格列对齐问题

  • 明确列数和列名
  • 使用代码块包裹表格
  • 避免过长或过短的单元格内容

3. YAML 缩进错误

  • 使用一致的缩进(建议2或4空格)
  • 避免混用 tab 和空格
  • 提供对照示例

结构化输出模板

提取任务

从以下文本中提取信息,返回 JSON 格式:

{
  "entity": "实体名称",
  "attributes": {
    "属性1": "值",
    "属性2": "值"
  },
  "relations": ["关联实体1", "关联实体2"]
}

文本:[待处理文本]

转换任务

将以下数据从 [格式A] 转换为 [格式B]:

[格式A 示例]

预期输出:
[格式B 示例]

实际数据:[待转换数据]

分类任务

对以下评论进行情感分类,返回 JSON:

{
  "sentiment": "positive/negative/neutral",
  "score": 0.0-1.0,
  "key_phrases": ["关键词1", "关键词2"],
  "reason": "分类理由"
}

评论:[评论内容]

总结

结构化输出是让 AI 结果真正可用的关键技巧:

  1. 选择合适格式:JSON 适合程序处理,Markdown 适合展示,YAML 适合配置
  2. 明确字段定义:越详细的格式说明,输出越准确
  3. 提供示例辅助:用实例展示期望格式比纯描述更有效
  4. 处理错误情况:考虑格式可能出错的情况
  5. 验证输出结果:程序化使用时必须验证格式正确性

掌握结构化输出技巧,能够大大提升 AI 在实际工作流中的应用价值。

评论

加载中...

相关文章

分享:

评论

加载中...