OpenAI 的 Structured Outputs 和 Ollama 的 结构化输出;OpenAI结构化输出的两种调用方式;system与user的权重优先级;schema中的字段默认值
1.OpenAI 的 Structured Outputs 和 Ollama 的 结构化输出
实现机制的差异
OpenAI (约束性解码/CFG):
OpenAI 采用的是一种名为“受限采样”的技术。他们在模型生成每一个 token 时,
会根据你提供的 JSON Schema 动态调整 token 的概率。
这意味着模型在物理上不可能输出不符合格式的字符。它不是“事后校验”,而是“边写边纠正”。
Ollama (格式引导与语法约束):
Ollama 同样支持基于 JSON Schema 的约束,它通常通过底层推理框架(如 llama.cpp)的 Grammar (GBNF) 机制来实现。
它会强制模型只在符合 JSON 语法的候选词中进行选择。
OpenAI 是“格式警察”,它通过算法保证括号一定对齐,通过语义理解保证描述被遵循。
Ollama 是“语法护栏”,它保证 JSON 结构不崩,但内容的逻辑准确度高度依赖于你提供的 System Message。
2.OpenAI结构化输出的两种调用方式
OpenAI API 中提供了两种形式的结构化输出:
使用函数:如果您要将模型连接到系统中的工具、函数、数据等,则应使用函数调用;
如果您希望在模型响应用户时对其输出进行结构化处理,则应使用结构化数据(response_format)。
3.system与user的权重优先级
在大多数 LLM(尤其是 Ollama / 本地模型)中:
system 的指令优先级 > user 的指令优先级
【系统规则层】 system
↓
【任务输入层】 user
↓
【生成输出层】 assistant
4.schema中的字段默认值
一句话终极结论,LLM 结构化抽取中:
“未知” ≠ 空字符串
“未知” = None
✅Optional[str] = Field(description="起草人")
浙公网安备 33010602011771号