结构化输出的重要性
在日常使用 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 结果真正可用的关键技巧:
- 选择合适格式:JSON 适合程序处理,Markdown 适合展示,YAML 适合配置
- 明确字段定义:越详细的格式说明,输出越准确
- 提供示例辅助:用实例展示期望格式比纯描述更有效
- 处理错误情况:考虑格式可能出错的情况
- 验证输出结果:程序化使用时必须验证格式正确性
掌握结构化输出技巧,能够大大提升 AI 在实际工作流中的应用价值。
相关文章
评论
加载中...
评论
加载中...