场景参考
结构化输出
通过 JSON 模式或工具调用获得程序可解析结果,并在应用侧严格校验。
当模型结果需要进入数据库、工作流或接口时,不要依赖自然语言格式。使用模型支持的 JSON 模式或工具调用,并在应用侧校验。
JSON 模式示例
import json
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["APIQIK_API_KEY"],
base_url="https://api.dimleap.cn/v1",
)
response = client.chat.completions.create(
model="glm-5.1",
messages=[
{
"role": "system",
"content": (
"只返回 JSON 对象,字段为 language、sentiment、summary。"
"sentiment 只能是 positive、neutral 或 negative。"
),
},
{
"role": "user",
"content": "评价:接口接入很简单,但第一次响应有点慢。",
},
],
response_format={"type": "json_object"},
temperature=0,
)
data = json.loads(response.choices[0].message.content)
print(data)先确认模型支持
response_format的支持情况取决于具体模型。若模型不支持 JSON 模式,可使用工具调用描述字段结构。
必须做的校验
- 捕获 JSON 解析错误,不直接信任模型文本。
- 检查字段是否缺失、类型是否正确、枚举是否在允许范围内。
- 限制字符串长度、数组数量和嵌套深度。
- 业务关键字段失败时重新生成或转人工,不使用猜测默认值。
- 不要把模型生成的 SQL、代码或 URL 直接执行。
JSON 模式还是工具调用
| 方式 | 适合场景 | 注意事项 |
|---|---|---|
| JSON 模式 | 分类、抽取、配置生成等单个结构化结果。 | 通常保证可解析 JSON,但字段仍需业务校验。 |
| 工具调用 | 需要选择动作、调用多个函数或执行工作流。 | 模型只提出调用,应用决定是否执行。 |
| 纯提示词 | 模型不支持上述能力时的降级方案。 | 格式可靠性较低,需要更强的解析和重试。 |