昨晚刷到 OpenAI 又发新模型了——GPT-5.4 mini 和 nano。说实话看到名字的时候我内心毫无波澜,毕竟这两年 OpenAI 的命名已经让人麻木了。但仔细一看参数:nano 每百万 token 才 $0.20,mini 比 GPT-5 mini 快 2 倍以上,SWE-Bench 直接干到 54.4%——这就有点东西了。
于是连夜把两个模型都跑了一遍,分享一下真实体验。
先说结论
| 指标 | GPT-5.4 nano | GPT-5.4 mini | GPT-5 mini(旧) |
|---|---|---|---|
| 输入价格 | $0.20/1M | $0.75/1M | $0.40/1M |
| 输出价格 | $1.25/1M | $4.50/1M | $1.60/1M |
| 上下文窗口 | 200K | 400K | 128K |
| SWE-Bench Pro | - | 54.4% | 45.7% |
| 首 token 延迟 | ~150ms | ~300ms | ~600ms |
| 适合场景 | 分类/提取/子任务 | 通用编码/推理 | 可以退休了 |
一句话总结:nano 是目前性价比最高的 "干活模型",mini 是 "又快又聪明的主力"。GPT-5 mini 基本可以淘汰了。
为什么要关注这俩小模型?
不是所有场景都需要请出 GPT-5.4 这尊大佛的。我日常开发中 70% 的 AI 调用都是这些:
- 从用户消息里提取结构化数据
- 判断一段文本的情感/意图分类
- 做 Agent 里的子任务分发
- 批量处理日志/文档的摘要
这些任务用 GPT-5.4 简直是杀鸡用牛刀,账单看了心疼。nano 出来之后,同样的活儿成本直接砍到原来的 1/10。
实测:3 个典型场景跑分
场景 1:JSON 结构化提取
从一段客户反馈里提取关键信息,这是最常见的需求。
from openai import OpenAI
client = OpenAI(
api_key="your-api-key",
base_url="https://api.openai.com/v1" # 国内可用聚合接口替代
)
prompt = """从以下客户反馈中提取信息,返回 JSON:
- sentiment: positive/negative/neutral
- product: 提到的产品名
- issue: 核心问题(一句话)
- urgency: high/medium/low
反馈:用了你们的语音机器人三天了,识别率还行但是转人工的逻辑有问题,
客户说了好几次"转人工"都没反应,这个比较急需要尽快修复。"""
# 用 nano 跑
response = client.chat.completions.create(
model="gpt-5.4-nano",
messages=[{"role": "user", "content": prompt}],
response_format={"type": "json_object"}
)
print(response.choices[0].message.content)
返回结果:
{
"sentiment": "negative",
"product": "语音机器人",
"issue": "转人工逻辑异常,用户说转人工无响应",
"urgency": "high"
}
nano 的表现:完全准确,耗时 0.8 秒,花费约 0.003,贵了 30 倍但结果一模一样。
场景 2:代码生成——写一个 FastAPI 中间件
response = client.chat.completions.create(
model="gpt-5.4-mini",
messages=[{
"role": "user",
"content": "写一个 FastAPI 中间件,功能:记录每个请求的耗时,超过 2 秒的打 warning 日志,支持排除 /health 路径"
}]
)
mini 生成的代码:
import time
import logging
from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware
logger = logging.getLogger(__name__)
class RequestTimingMiddleware(BaseHTTPMiddleware):
def __init__(self, app, exclude_paths: list[str] | None = None, slow_threshold: float = 2.0):
super().__init__(app)
self.exclude_paths = exclude_paths or ["/health"]
self.slow_threshold = slow_threshold
async def dispatch(self, request: Request, call_next):
if request.url.path in self.exclude_paths:
return await call_next(request)
start = time.perf_counter()
response = await call_next(request)
duration = time.perf_counter() - start
if duration > self.slow_threshold:
logger.warning(
f"Slow request: {request.method} {request.url.path} "
f"took {duration:.2f}s"
)
else:
logger.info(
f"{request.method} {request.url.path} - {duration:.2f}s"
)
response.headers["X-Process-Time"] = f"{duration:.4f}"
return response
# 使用
# app.add_middleware(RequestTimingMiddleware, exclude_paths=["/health", "/ready"])
说实话这代码质量相当不错:用了 perf_counter 而不是 time.time(),异常路径排除、自定义阈值都考虑到了,还加了个 X-Process-Time header。mini 在代码生成上真的接近 GPT-5.4 正式版水平了。
场景 3:多模型 Agent 编排(mini + nano 配合)
这是我觉得最有意思的用法——用 mini 做 "大脑",nano 做 "手脚":
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key="your-api-key")
async def plan_tasks(user_request: str) -> list[str]:
"""mini 负责拆解任务"""
resp = await client.chat.completions.create(
model="gpt-5.4-mini",
messages=[{
"role": "system",
"content": "将用户请求拆解为独立的子任务列表,每个任务一行,不要编号"
}, {
"role": "user",
"content": user_request
}]
)
return resp.choices[0].message.content.strip().split("\n")
async def execute_task(task: str) -> str:
"""nano 负责执行单个子任务"""
resp = await client.chat.completions.create(
model="gpt-5.4-nano",
messages=[{
"role": "system",
"content": "简洁地完成以下任务,直接给出结果"
}, {
"role": "user",
"content": task
}]
)
return resp.choices[0].message.content
async def main():
tasks = await plan_tasks("帮我分析这段 Python 代码的性能问题并给出优化建议")
print(f"拆解为 {len(tasks)} 个子任务")
# 并发执行所有子任务
results = await asyncio.gather(*[execute_task(t) for t in tasks])
for task, result in zip(tasks, results):
print(f"\n### {task}")
print(result)
asyncio.run(main())
这个模式的妙处在于:mini 理解能力强,负责规划;nano 便宜快速,负责执行。一个复杂请求拆成 5 个子任务并发跑,总成本可能还不到 $0.001,延迟也就 1-2 秒。
踩坑记录
坑 1:nano 的 JSON 模式偶尔翻车
nano 在开启 response_format: json_object 时,大概有 5% 的概率输出的 JSON 会多一个尾部逗号。解决办法:
import json
def safe_parse(text: str) -> dict:
try:
return json.loads(text)
except json.JSONDecodeError:
# 处理尾部逗号
cleaned = text.rstrip().rstrip(",").rstrip()
if not cleaned.endswith("}"):
cleaned += "}"
return json.loads(cleaned)
坑 2:mini 的 400K 上下文不是随便用的
虽然 mini 支持 400K context,但实测发现超过 200K token 后响应质量明显下降,特别是在长文档的中间部分提取信息时容易遗漏。建议还是控制在 100K 以内。
坑 3:国内直连的延迟问题
直连 OpenAI API 在国内的延迟大概在 2-5 秒的首 token 时间,这对于追求低延迟的场景是不可接受的。我后来改用了兼容 OpenAI 协议的聚合接口(比如 ofox.ai),走国内节点后首 token 延迟降到了 300ms 左右,体验完全不同:
# 只需要改 base_url,其他代码完全不用动
client = OpenAI(
api_key="your-ofox-key",
base_url="https://api.ofox.ai/v1"
)
和竞品的横向对比
| 模型 | 价格(输入/1M) | 编码能力 | 推理能力 | 延迟 |
|---|---|---|---|---|
| GPT-5.4 nano | $0.20 | ★★★ | ★★★ | 极快 |
| GPT-5.4 mini | $0.75 | ★★★★ | ★★★★ | 快 |
| Claude Haiku 4.5 | $0.80 | ★★★★ | ★★★☆ | 快 |
| Gemini Flash-Lite | $0.075 | ★★★ | ★★☆ | 极快 |
| DeepSeek V3 | ¥1.0 | ★★★★ | ★★★★ | 中等 |
nano 在这个价位段几乎没有对手——Gemini Flash-Lite 虽然更便宜但推理能力差一截,DeepSeek V3 能力强但价格和延迟都高不少。
小结
GPT-5.4 mini/nano 的发布其实透露了一个很明确的信号:OpenAI 在把 AI 推向 "子任务时代"。以后的 AI 应用不会只用一个大模型解决一切,而是像微服务一样——大模型做编排,小模型干活。
对于开发者来说,现在最值得做的事就是把现有的 AI 调用分一下层:哪些是必须用大模型的,哪些可以换成 nano 省钱。我把自己项目里 60% 的调用换成了 nano,月账单直接从 40 左右。
这波模型降价潮还没完,接下来 Claude 和 Gemini 肯定会跟进。开发者的好日子,来了。