作者丨正在学AI的小泉同学
上篇回顾
让 AI 乖乖听话:Structured Outputs 是什么?
Structured Outputs 三大好处:为什么非学不可?
上篇说了 Structured Outputs 的三大好处——类型安全、拒绝识别、提示词简化,每一条都是硬需求。
这篇我们来实战:具体怎么用?什么时候用哪种?
Structured Outputs 有两种用法,分别对应不同场景。
用法一:Function Calling(函数调用)
适用场景:让 AI 帮你操作程序、调接口、查数据库
举个栗子🌰:
你做了一个"查天气"小程序,用户说"北京今天天气怎么样"。
传统做法:
1. 你自己写代码识别用户想查哪个城市
2. 自己调天气 API
3. 自己把结果展示给用户
用 Function Calling:
你定义一个"查天气函数":
def get_weather(city: str):
"""查询指定城市的天气"""
# 调用天气 API
return weather_data
然后把函数扔给 AI,用户说"北京天气",AI 会自动:
1. 识别城市是"北京"
2. 调用你的 get_weather("北京") 函数
3. 拿到结果后组织语言回答用户
你不用写识别城市的代码,AI 帮你干了。

用法二:json_schema 结构化文本输出
适用场景:只是想让 AI 的回答格式规整,不调任何程序
举个栗子🌰:
你做了一个"数学辅导 APP",想让 AI 帮学生解题。
你希望 AI 这样回答:
【题目解析】
这道题考察的是一元一次方程的解法...
【解题步骤】
第一步:移项...
第二步:计算...
【最终答案】
x = -3.75
【易错点提醒】
移项时记得变号...
而不是 AI 瞎写一通,你还得自己排版。
怎么做到?
你定义结构:
class MathAnswer(BaseModel):
analysis: str # 题目解析
steps: list[str] # 解题步骤
answer: str # 最终答案
tips: str # 易错点提醒
AI 会严格按这个结构返回,你的 APP 就可以:
- 把 analysis 渲染在"题目解析"卡片里
- 把 steps 渲染成步骤列表
- 把 answer 高亮显示
- 把 tips 放在提示框里
用户界面整齐、专业、易读。
代码示例:让 AI 自动拆解你的话
场景:从一句话里提取活动信息
用户说: "Alice 和 Bob 周五要去科学展"
你希望 AI 返回:
{
"name": "science fair",
"date": "Friday",
"participants": ["Alice", "Bob"]
}
代码怎么写?
from openai import OpenAI
from pydantic import BaseModel
client = OpenAI()
# 定义"快递单"格式
class CalendarEvent(BaseModel):
name: str # 活动名称
date: str # 日期
participants: list[str] # 参与者列表
# 调用 API
response = client.responses.parse(
model="gpt-4o-2024-08-06",
input=[
{"role": "system", "content": "Extract the event information."},
{"role": "user", "content": "Alice 和 Bob 周五要去科学展"},
],
text_format=CalendarEvent, # 告诉 AI 按"快递单"格式填
)
# 拿到结构化结果
event = response.output_parsed
# 直接用,不用担心格式错误
print(event.name) # "science fair"
print(event.date) # "Friday"
print(event.participants) # ["Alice", "Bob"]

两种用法对比
一句话选法:
- 想让 AI 帮你做事 → Function Calling
- 只想让 AI 回答更好看 → json_schema
结尾
两种用法讲完了——Function Calling 让 AI 帮你执行操作,json_schema 让 AI 输出更规整,各有各的用武之地。
基础用法掌握了,下面来点硬核的。
下篇讲高阶玩法——思维链让 AI 一步步推导、Streaming 实时流式输出、JSON Schema 那些你必须知道的大小限制,技术含量拉满,来吧。

