作者丨正在学AI的小泉同学
上篇回顾
让 AI 乖乖听话:Structured Outputs 是什么?
Structured Outputs 三大好处:为什么非学不可?
Structured Outputs 两种用法:Function Calling 和 json_schema 怎么选?
上篇说了 Structured Outputs 的两种用法——Function Calling 让 AI 执行操作,json_schema 让 AI 输出更规整。有这两个招式,日常工作已经够用了。
但还有一些高阶技巧,能让你用得更爽、更专业。这篇全部讲透。
高阶玩法:思维链 + 结构化输出
什么是"思维链"?
就是让 AI 把解题过程一步步写出来,而不是直接给答案。
举个栗子🌰:
学生问:8x + 7 = -23,求 x
普通 AI 回答:
x = -3.75
学生:???怎么算的?
思维链 AI 回答:
第一步:把 7 移到右边
8x = -23 - 7 = -30
第二步:两边除以 8
x = -30 ÷ 8 = -3.75
最终答案:x = -3.75
学生:哦!我懂了!
怎么把思维链和结构化输出组合起来?
代码怎么实现?
from pydantic import BaseModel
class Step(BaseModel):
explanation: str # 这一步在干什么
output: str # 这一步算出了什么
class MathReasoning(BaseModel):
steps: list[Step] # 一整套解题步骤
final_answer: str # 最终答案
response = client.responses.parse(
model="gpt-4o-2024-08-06",
input=[
{"role": "system", "content": "You are a helpful math tutor. Guide step by step."},
{"role": "user", "content": "how can I solve 8x + 7 = -23"},
],
text_format=MathReasoning,
)
reasoning = response.output_parsed
AI 会返回:
{
"steps": [
{
"explanation": "把 7 移到右边",
"output": "8x = -30"
},
{
"explanation": "两边除以 8",
"output": "x = -3.75"
}
],
"final_answer": "x = -3.75"
}
你的 APP 可以把每个步骤渲染成一个卡片,学生一步步看,非常清晰。
Streaming(流式输出):实时接收
什么是流式输出?
普通方式(非流式):
你发请求 → 等 5 秒 → AI 全部生成完 → 一次性返回给你
就像:你去餐厅点餐,等厨师把所有菜都做好,一次性全端上来。
流式方式:
你发请求 → 立刻开始接收 → AI 一段一段发 → 你实时处理
就像:厨师做好一道菜就端上来一道,你可以边吃边等下一道。

代码怎么写?
with client.responses.stream(
model="gpt-4.1",
input=[...],
text_format=EntitiesModel,
) as stream:
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True) # 实时打印
效果:AI 说一句,你屏幕上就显示一句,像打字机一样。
JSON Schema 限制:这些不能用
OpenAI 结构化输出不是支持所有 JSON Schema,只支持一部分。
✅ 你可以放心用:
普通模型(gpt-4o、gpt-4o-mini):
支持字段校验,比如:
- 字符串必须匹配正则(pattern)
- 数字必须在一个范围内(minimum、maximum)
- 字符串长度限制(minLength、maxLength)
微调模型:
这些校验统统不支持! 你只能定义字段类型,不能加任何额外的限制条件。
结尾
高阶玩法讲完了——思维链让 AI 一步步推理,流式输出实时展示,Schema 限制让你知道哪些坑要绕着走。
不过光知道怎么用还不够,实际写代码的时候还有很多坑,一不小心就踩进去。
下篇收尾全攻略——拒绝回答怎么处理、避坑三则、重要规则,一条不落全告诉你。


