大数跨境

Structured Outputs 两种用法:Function Calling 和 json_schema 怎么选?

Structured Outputs 两种用法:Function Calling 和 json_schema 怎么选? 泉塘坞
2026-06-05
2
导读:作者丨正在学AI的小泉同学上篇回顾让 AI 乖乖听话:Structured Outputs 是什么?

作者丨正在学AI的小泉同学


上篇回顾

让 AI 乖乖听话:Structured Outputs 是什么?

Structured Outputs 三大好处:为什么非学不可?

上篇说了 Structured Outputs 的三大好处——类型安全、拒绝识别、提示词简化,每一条都是硬需求。

这篇我们来实战:具体怎么用?什么时候用哪种?

Structured Outputs 有两种用法,分别对应不同场景。


01

用法一: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 帮你干了。

ChatGPT Image 2026年5月7日 15_48_53.png


02

用法二: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 放在提示框里

用户界面整齐、专业、易读。


03

代码示例:让 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"]

ChatGPT Image 2026年5月7日 16_32_25.png


04

两种用法对比

一句话选法:

想让 AI 帮你做事 → Function Calling

只想让 AI 回答更好看 → json_schema


结尾

两种用法讲完了——Function Calling 让 AI 帮你执行操作,json_schema 让 AI 输出更规整,各有各的用武之地。

基础用法掌握了,下面来点硬核的。

下篇讲高阶玩法——思维链让 AI 一步步推导、Streaming 实时流式输出、JSON Schema 那些你必须知道的大小限制,技术含量拉满,来吧。



#AI#OpenAI#结构化输出#JSON#AIGC
#教程#StructuredOutputs#PromptEngineering

【声明】内容源于网络
0
0
泉塘坞
1234
内容 22
粉丝 0
泉塘坞 1234
总阅读0
粉丝0
内容22