模型特性:结构化输出
在大语言模型的实际应用中,结构化输出是提升结果实用性的核心特性。相较于自由文本,结构化输出能将模型生成的内容限定在预设格式(如 JSON、XML、表格等)中,显著降低下游系统的解析成本,尤其适用于数据处理、自动化流程集成等场景。
什么是结构化输出?
结构化输出指模型按照特定格式生成内容,确保输出结果具备固定字段、清晰层次和可预测逻辑。例如,当用户要求 “提取新闻关键信息” 时,模型不会返回零散的文字描述,而是生成包含 “标题、发布时间、主体、关键词、情感倾向” 等字段的 JSON 对象,直接满足数据入库或分析工具的格式要求。
这种特性的核心价值体现在:
- 降低开发成本:省去下游系统编写复杂文本解析逻辑的工作;
- 提升数据一致性:保证同类任务的输出格式统一,便于批量处理;
- 增强可靠性:减少歧义性表述,让机器能直接理解并使用结果。
常见的结构化输出格式
模型支持的结构化格式需结合应用场景选择,以下为几种典型类型:
- JSON 格式:应用最广泛的轻量级数据交换格式,适合存储键值对形式的结构化信息。例如,提取产品评价核心要素:
{
"产品名称": "无线蓝牙耳机",
"评价日期": "2025-07-28",
"评分": 4.5,
"优点": ["续航时间长", "音质清晰"],
"缺点": ["降噪效果一般"],
"用户关注点": ["续航", "音质", "降噪"]
}
- 表格格式(CSV/Markdown 表格):适用于展示具有行列关系的结构化数据,如多维度对比、列表类信息。例如,生成手机型号对比表:
| 型号 | 处理器 | 内存 | 电池容量 | 价格(元) |
|------------|----------|------|----------|------------|
| 型号A | 骁龙8 Gen3 | 12GB | 5000mAh | 4999 |
| 型号B | 天玑9300 | 16GB | 4800mAh | 5299 |
- XML 格式:适合需要嵌套层级的复杂结构,常用于文档标记、配置文件等场景。例如,标注合同关键条款:
<contract>
<party name="甲方">XX科技有限公司</party>
<party name="乙方">YY贸易公司</party>
<term type="有效期">
<start_date>2025-08-01</start_date>
<end_date>2026-07-31</end_date>
</term>
<amount currency="人民币">500000元</amount>
</contract>
基于 OpenAI 接口的结构化输出实现
OpenAI 的 API 可通过function_call
参数或提示词引导,强制模型生成结构化内容。以下为具体实践示例:
示例 1:通过提示词约束 JSON 输出
当需要提取文章中的人物信息时,可在提示词中直接指定 JSON 格式:
import openai
openai.api_key = "你的API密钥"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你是信息提取工具,请从用户提供的文本中提取人物信息,返回JSON格式,包含字段:姓名、性别、年龄(若提及)、职业、关键事件。若信息不完整,缺失字段用null填充。"},
{"role": "user", "content": "文本:李明,男,35岁,是一名软件工程师,上周在公司技术竞赛中获得一等奖。他的同事张燕,女,负责产品设计,也参与了此次竞赛。"}
]
)
print(response.choices[0].message['content'])
输出结果:
[
{
"姓名": "李明",
"性别": "男",
"年龄": 35,
"职业": "软件工程师",
"关键事件": "上周在公司技术竞赛中获得一等奖"
},
{
"姓名": "张燕",
"性别": "女",
"年龄": null,
"职业": "产品设计",
"关键事件": "参与公司技术竞赛"
}
]
示例 2:使用 function_call 强制结构化格式
对于更复杂的场景,可通过定义函数的 JSON Schema,让模型严格遵循格式输出:
import openai
openai.api_key = "你的API密钥"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "你需要分析用户提供的订单信息,返回标准化的订单详情。"},
{"role": "user", "content": "订单:用户王华在2025年7月29日购买了2件T恤(红色,M码)和1双运动鞋(黑色,42码),总金额399元,付款方式为微信支付。"}
],
functions=[
{
"name": "format_order",
"parameters": {
"type": "object",
"properties": {
"user_name": {"type": "string"},
"order_date": {"type": "string", "format": "YYYY-MM-DD"},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product": {"type": "string"},
"attributes": {"type": "object"},
"quantity": {"type": "integer"}
},
"required": ["product", "quantity"]
}
},
"total_amount": {"type": "number"},
"payment_method": {"type": "string"}
},
"required": ["user_name", "order_date", "items", "total_amount"]
}
}
],
function_call={"name": "format_order"} # 强制调用指定函数
)
# 提取结构化结果
structured_result = eval(response.choices[0].message['function_call']['arguments'])
print(structured_result)
输出结果(Python 字典格式):
{
"user_name": "王华",
"order_date": "2025-07-29",
"items": [
{
"product": "T恤",
"attributes": {"颜色": "红色", "尺码": "M码"},
"quantity": 2
},
{
"product": "运动鞋",
"attributes": {"颜色": "黑色", "尺码": "42码"},
"quantity": 1
}
],
"total_amount": 399,
"payment_method": "微信支付"
}
结构化输出的注意事项
-
格式明确性:提示词中需清晰定义字段名称、数据类型(如字符串 / 数字 / 数组)及约束条件(如日期格式),避免模型产生歧义;
-
容错处理:实际应用中需考虑模型偶尔出现的格式错误(如遗漏引号、括号不匹配),可通过正则校验或工具库(如
json
模块)进行二次处理; -
复杂度平衡:过于复杂的结构(如多层嵌套)可能降低模型准确率,建议根据需求拆分字段或分步骤生成。
通过结构化输出,大语言模型能更高效地与数据库、ERP 系统、自动化工具等下游组件协同,成为连接自然语言交互与机器可执行流程的核心纽带。
文档反馈
(如有产品使用问题,请 提交工单)