专栏 编程工程

2.1.2 闭源 API 选型矩阵 · GPT-4o / Claude / Gemini / 国产

全球主流闭源 LLM API 选型矩阵 —— 价格、上下文、速度、能力、合规五维横评

1. 为什么这个专题重要

闭源 API 仍是 90% 业务的首选。截至 2026-07,即使是标榜「自研」的国内大厂,核心对话产品(C 端智能助理、客服、代码助手)背后 80% 仍跑在 OpenAI / Anthropic / DeepSeek 等少数几个闭源 API 上。自建 7B/70B 微调模型虽成本可控,但在长上下文、复杂推理、多模态对齐上与闭源旗舰仍有半年到一年的代差。对绝大多数企业来说,LLM 接入策略首先是「选哪家 API」,然后才是「要不要自建」。

选型错的三个真实代价,每个都足以让一个项目归零。

代价一:成本爆炸。某跨境电商初期全栈 GPT-4o,日均 200 万 token,月底账单 28 万刀。迁 Claude 3.5 Sonnet 走 prompt cache 命中后成本砍 70%。另一家政务项目选 GPT-4 Turbo 处理简单问答,ROI 为负。闭源 API 的「标价」≠「实际开销」,cache 命中率、输出比例、流式/非流式、是否多模态,任意一项错误配置能让成本翻 3-10 倍。

代价二:能力错配。把 Claude Opus 用在「把这段文字翻译成英文」上,质量与 GPT-4o mini 无差但成本贵 30 倍。把 Gemini 1.5 Flash 用在「严谨法律条款推理」上,幻觉率比 Sonnet 高 4 倍。把国产模型用在跨境合同审查上,英文专业术语漏译率比 GPT-4o 高。把 GPT-4o 用在「扫描 50 万字年报找关键风险」上,塞不进 128K 上下文。模型不存在绝对好坏,只有任务匹配与否。

代价三:合规被罚。某金融客户把对话日志直接送 OpenAI API,被监管认定数据出境,罚款 180 万。某医疗项目把病历喂 Claude,SOC2 不覆盖医疗数据被下架。某政务 App 用 Gemini 处理市民举报,被通报批评。闭源 API 在「数据驻留 / 跨境流转 / 行业认证 / 备案」四件事上的差异,比功能差异更致命。

选型前必须回答五个核心问题,任何一项答不上来就别开始接 API:

Q1. 任务类型是什么?(生成/分类/抽取/推理/工具调用/多模态)
Q2. 月预算多少?是否能承受 3 倍突增?
Q3. 最长输入多少 token?是否需要 1M 上下文?
Q4. 数据能否出境?是否需要政务/金融/医疗合规?
Q5. 团队技术栈是 Python / Node / Java?是否能接受多 SDK?

2. 闭源 API 五大选型维度

闭源 API 的差异不是「谁更强」,而是「五维坐标的方位」。忽略任何一维都会翻车。

2.1 能力维度

闭源旗舰已基本通杀通用任务,真正的差距在四个细分能力:

  • 复杂推理(数学、代码、规划):GPT-4o 仍是 SOTA,Claude 3.5 Sonnet 紧随,o1/o3 在数学/竞赛级显著领先但价格贵 10 倍。
  • 长文理解(>100K tokens):Gemini 1.5 Pro 的 1M/2M 上下文独占第一档,Claude 3.5 Sonnet(200K)与 GPT-4 Turbo(128K)第二档,国产旗舰大多 64K-128K。
  • 中文能力(语义理解、文学、政务术语):文心一言 4.0 / 通义 2.5 / DeepSeek V3 在中文任务上优于国际旗舰 5-10%,Doubao 1.5 Pro 在中文口语化场景略胜。
  • 多模态(图像/音频/视频):GPT-4o 与 Gemini 1.5 Pro 视频原生支持第一梯队,Claude 3.5 Sonnet 仅图像,国产多模态差距在缩小但视频仍是 Gemini 独占。

2.2 价格维度

闭源 API 的价格不是单一数字,而是 6 层结构:

input_price          (输入 token 单价)
output_price         (输出 token 单价,通常 3-5x input)
cached_input_price   (缓存命中,通常 0.1x input)
batch_api_price      (异步批处理,通常 0.5x)
vision_price         (图像按张或按 token 计费)
audio_price          (语音/秒计费)

output 通常是 input 的 3-5 倍。一个「生成 500 字回答」实际成本 = 1000 字 input × input_price + 500 字 output × output_price。把 50% 任务误用 Sonnet 处理,月账单可能从 5 万涨到 25 万。

prompt cache 是降本核武器。Anthropic 的 cache hit 价格是 miss 的 10%,OpenAI 的 automatic caching 命中率上去后也能省 50-80%。但 cache 必须显式声明 cache_control breakpoint,否则默认不命中。

2.3 上下文窗口维度

不是越长越好,长上下文有三大隐性成本:延迟线性增长、价格线性增长、「中间遗忘」导致召回率衰减。Gemini 1.5 Pro 2M 上下文听起来美好,但放满 1M token 的延迟约 10-15 秒,价格约 $3.5/百万 token,综合 ROI 不一定优。128K-200K 是大多数企业场景的甜区。

2.4 速度维度

两个核心指标:TTFT(Time To First Token,首字延迟,影响响应体感)和 TPOT(Time Per Output Token,出字速率,影响流式流畅度)。GPT-4o 速度最快(TTFT 0.3s,TPOT 30ms),Claude 3.5 Sonnet 中等(TTFT 0.6s,TPOT 50ms),GPT-4 Turbo 和 Opus 较慢(TTFT 1-2s)。实时语音对话必须选 GPT-4o Realtime 或 Gemini Live,其它模型延迟不够。

2.5 合规维度

四个子维度,缺一不可:

数据驻留      美国 / 欧洲 / 中国 / 自托管
行业认证      SOC2 / HIPAA / ISO27001 / 等保三级
跨境合规      中国《数据出境安全评估办法》/ 欧盟 GDPR / 美国 HIPAA
备案要求      中国大陆调用境外 API 需备案或使用国产备案模型

任何涉及中国公民个人信息 / 政务数据 / 金融数据 / 健康数据的项目,默认必须用国产备案模型或自托管。即使技术上可以调境外 API,法律上不行。

3. 国际三巨头详解

3.1 OpenAI · 全球最成熟的闭源生态

OpenAI 在 2026-07 提供 4 档主力模型,定位差异显著:

模型 上下文 输入 $/M 输出 $/M 缓存 $/M 定位
gpt-4o 128K 2.50 10.00 1.25 主力旗舰,默认选
gpt-4o-mini 128K 0.15 0.60 0.075 性价比,简单任务
gpt-4-turbo 128K 10.00 30.00 - 长尾兼容
o1 / o3 200K 15.00 60.00 - 推理专用,贵 10x

价格截至 2026-07,以 platform.openai.com 官网为准。

Function Calling 协议最成熟,vision 原生,JSON mode 内置,Batch API 半价,Realtime API 走 WebRTC。限速按 TPM/RPM 分层,Tier 1 免费 250K TPM,Tier 4(消费 $1000+)解锁 1M TPM。

# OpenAI 最简示例 · GPT-4o 标准调用
from openai import OpenAI

client = OpenAI(api_key="sk-...")
resp = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "用 3 句话介绍 Transformer"}],
    temperature=0.7,
    max_tokens=200,
)
print(resp.choices[0].message.content)
# OpenAI Vision · 图像理解
import base64
from openai import OpenAI

client = OpenAI()
with open("chart.png", "rb") as f:
    b64 = base64.b64encode(f.read()).decode()

resp = client.chat.completions.create(
    model="gpt-4o",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "提取这张趋势图的数据点"},
            {"type": "image_url",
             "image_url": {"url": f"data:image/png;base64,{b64}"}}
        ],
    }],
)
print(resp.choices[0].message.content)
# OpenAI Structured Outputs · JSON Schema 强约束
from openai import OpenAI
from pydantic import BaseModel

class InvoiceExtract(BaseModel):
    vendor: str
    total: float
    currency: str
    line_items: list[dict]

client = OpenAI()
resp = client.beta.chat.completions.parse(
    model="gpt-4o-2024-08-06",
    messages=[
        {"role": "system",
         "content": "你是发票抽取助手,严格按 schema 输出 JSON"},
        {"role": "user",
         "content": "Vendor: Acme Corp, Total: $1,250 USD, ..."}
    ],
    response_format=InvoiceExtract,
)
invoice = resp.choices[0].message.parsed

3.2 Anthropic · Claude 的长文与对齐优势

Claude 在 2026-07 主力为 3.5 系列(3.7/4 系列陆续过渡):

模型 上下文 输入 $/M 输出 $/M 缓存写入 $/M 缓存读取 $/M
claude-3-5-sonnet 200K 3.00 15.00 3.75 0.30
claude-3-5-haiku 200K 0.80 4.00 1.00 0.08
claude-3-opus 200K 15.00 75.00 18.75 1.50

Anthropic 的 prompt cache 显式声明,命中后输入价砍 10 倍,几乎所有走 Sonnet 的成本优化都靠它。

# Anthropic Claude 3.5 Sonnet · 带 prompt cache
import anthropic

client = anthropic.Anthropic(api_key="sk-ant-...")

# 系统提示作为缓存命中点
resp = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    system=[
        {"type": "text",
         "text": "你是某法律所的合同审查助手...(5000 字知识库)...",
         "cache_control": {"type": "ephemeral"}}  # 关键:声明缓存
    ],
    messages=[{"role": "user", "content": "审查这份 SaaS 合同的风险条款"}]
)
print(resp.content[0].text)
# Anthropic Tool Use (Function Calling)
import anthropic

client = anthropic.Anthropic()
tools = [{
    "name": "query_database",
    "description": "查询订单数据库",
    "input_schema": {
        "type": "object",
        "properties": {
            "order_id": {"type": "string", "description": "订单号"}
        },
        "required": ["order_id"],
    },
}]

resp = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=256,
    tools=tools,
    messages=[{"role": "user", "content": "帮我查订单 #SO-2025-001 的状态"}]
)

# Anthropic 的工具调用返回 content block 而非 message.tool_calls
for block in resp.content:
    if block.type == "tool_use":
        print(f"调用工具:{block.name},入参:{block.input}")

Anthropic 限速按 Tier 分层(SLA 99.9%),Tier 1 每分钟 50 请求,Tier 4 每分钟 4000。Tier 通过累计消费自动升级。

3.3 Google · Gemini 的多模态与 1M 长上下文独占

Gemini 在 2026-07 主力是 1.5 系列:

模型 上下文 输入 $/M 输出 $/M 特点
gemini-1.5-pro 2M 1.25(<128K) / 2.50(>128K) 5.00(<128K) / 10.00(>128K) 长文旗舰
gemini-1.5-flash 1M 0.075 0.30 速度价格比王
gemini-1.5-flash-8b 1M 0.0375 0.15 极致便宜

价格截至 2026-07,以 ai.google.dev 官网为准。Flash 在 >128K 区间费率会上调。

Gemini 是唯一原生支持视频理解的闭源旗舰。1 小时视频可直传,自动抽帧。图像/音频/视频统一一个 endpoint。

# Google Gemini · 视频理解
import google.generativeai as genai

genai.configure(api_key="...")
model = genai.GenerativeModel("gemini-1.5-pro")

# 上传视频文件
video_file = genai.upload_file("lecture.mp4")
resp = model.generate_content([
    "请用 5 个时间戳总结这个讲座的要点",
    video_file,
])
print(resp.text)
# Gemini Function Calling
import google.generativeai as genai
genai.configure(api_key="...")

def get_weather(location: str, unit: str = "celsius") -> dict:
    # 实际查询逻辑
    return {"location": location, "temp": 22, "unit": unit}

model = genai.GenerativeModel(
    model_name="gemini-1.5-pro",
    tools=[get_weather]  # 直接传 Python 函数,SDK 自动转 schema
)

chat = model.start_chat(enable_automatic_function_calling=True)
resp = chat.send_message("北京今天多少度?")
print(resp.text)

Gemini 限速较宽松(Tier 1 每分钟 60 请求),且 1.5 Flash 几乎不限速。

4. 国产模型详解

国产大模型在 2026 已全面对齐国际旗舰,价格普遍是国际同档的 1/3-1/10,合规性是最大卖点。

4.1 DeepSeek(深度求索) · 性价比之王

模型 上下文 输入 ¥/M 输出 ¥/M Cache 命中 备注
deepseek-chat(V3) 64K 2 8 0.5 主力对话
deepseek-coder 64K 1 4 - 代码专用
deepseek-reasoner(R1) 64K 4 16 - 推理专用

DeepSeek 是当前闭源 API 最便宜的全能选手,V3 在 LMSYS Chatbot Arena 中文榜长期前三,R1 在数学/代码推理类基准对标 o1。API 兼容 OpenAI 协议,可直接用 openai SDK 替换。

# DeepSeek · 复用 OpenAI SDK
from openai import OpenAI

client = OpenAI(
    api_key="sk-...",
    base_url="https://api.deepseek.com/v1"  # 仅 base_url 差异
)

resp = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "用 Python 写一个快速排序"}],
)
print(resp.choices[0].message.content)

4.2 文心一言(百度) · 政务/金融合规首选

模型 上下文 输入 ¥/M 输出 ¥/M
ERNIE-4.0 8K 12 12
ERNIE-3.5 8K 0.8 2.0
ERNIE-Speed 8K 免费 免费

文心是国产最早完成备案的模型之一,政务、医疗、教育、金融行业的事实标准。千帆平台提供完整工具链(微调/RAG/Agent/审核)。

# 文心一言 ERNIE-4.0
import qianfan

# 配置千帆 AK/SK 环境变量即可
chat = qianfan.ChatCompletion()
resp = chat.do(
    model="ERNIE-4.0-8K",
    messages=[{"role": "user", "content": "请写一段智能客服的开场白"}],
)
print(resp["result"])

4.3 通义千问(阿里) · 阿里云生态完整

模型 上下文 输入 ¥/M 输出 ¥/M
qwen-max 32K 20 60
qwen-plus 128K 4 12
qwen-turbo 1M 2 6
qwq-32b-preview 32K 8 16

阿里云一键备案,DashScope API 与 OpenAI 兼容,生态包含向量检索(AnalyticDB)、RAG、Agent(魔搭)、模型市场(魔搭社区)。

# 通义千问 qwen-plus · 兼容 OpenAI 协议
from openai import OpenAI

client = OpenAI(
    api_key="sk-...",
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

resp = client.chat.completions.create(
    model="qwen-plus",
    messages=[{"role": "user", "content": "解释 CAP 定理"}],
)
print(resp.choices[0].message.content)

4.4 Doubao(字节) · 多模态与字节系流量入口

模型 上下文 输入 ¥/M 输出 ¥/M
doubao-pro-32k 32K 0.8 2.0
doubao-pro-128k 128K 5.0 9.0
doubao-lite-32k 32K 0.3 0.6

火山引擎方舟,多模态(视觉/语音/视频)能力强,抖音/飞书生态深度集成。价格是国产同档最便宜的之一。

4.5 Kimi(月之暗面) · 超长文本首创

Kimi 智能助手以 200K 上下文起家,后来居上,特别适合研报、合同、长文分析。Moonshot AI 开放 API。

# Kimi (Moonshot)
from openai import OpenAI  # 兼容 OpenAI 协议

client = OpenAI(
    api_key="sk-...",
    base_url="https://api.moonshot.cn/v1"
)
resp = client.chat.completions.create(
    model="moonshot-v1-32k",
    messages=[{"role": "user", "content": "总结这篇论文的核心贡献(200K 上下文内)"}],
)
print(resp.choices[0].message.content)

4.6 智谱 GLM / Yi(零一万物) · 技术派

  • 智谱 GLM-4:清华系,API 在智谱开放平台,提供 ChatGLM 系列,工具调用强。
  • Yi-34B / Yi-Large:零一万物,API 在 Yi 开放平台,英文能力突出。
# 智谱 GLM-4
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="...")
resp = client.chat.completions.create(
    model="glm-4-plus",
    messages=[{"role": "user", "content": "介绍一下 GLM-4 的优势"}],
)
print(resp.choices[0].message.content)

备案合规提示:所有面向中国大陆用户的商用大模型 API,必须在「生成式人工智能服务管理暂行办法」框架下完成备案。已备案的模型清单可在国家网信办官网查询。涉及个人信息处理的,还需通过「个人信息保护法」评估。调境外 API 处理中国用户数据,默认不合规,必须走数据出境安全评估。

5. 多模态专项对比

闭源模型的多模态差距比纯文本更显著。

5.1 视觉(图像理解)

模型 输入方式 图像单价 能力备注
GPT-4o url/base64 ~$0.001275/张(低) / $0.00255/张(高) 图像 OCR + 复杂图表强
Claude 3.5 Sonnet base64 按 token 计费(1600 token/图) 文字密集图最强
Gemini 1.5 Pro inline/file 按 token 计费(258 token/图) 视频/多图混排强
Qwen-VL-Max url ¥0.02/张 中文 OCR 强
ERNIE-4.0 url/base64 与文本同价 中文字幕/海报识别
Doubao-pro-vision url ¥0.005/张 短视频截图理解

5.2 音频(语音识别 + TTS)

  • 语音识别(ASR):OpenAI Whisper($0.006/分钟)、阿里通义听悟(¥0.008/分钟)、字节火山 ASR(¥0.005/分钟)。中文识别准确率国产全面领先。
  • TTS 语音合成:OpenAI TTS HD($15/百万字符)、ElevenLabs($5-$22/月订阅)、国产火山语音/讯飞在中文播音场景极强且便宜。
  • 实时语音对话:OpenAI Realtime API(WebRTC/WS)、Gemini Live(原生多模态)。这是唯一能跟真人对话低延迟的方案,Claude/Gemini 常规 chat 都不支持。
# OpenAI Realtime API · 实时语音对话
from openai import OpenAI
client = OpenAI()

# 通过 WebRTC 双向流传输 PCM 音频
# 完整示例见 OpenAI Cookbook

5.3 视频(仅 Gemini 原生 + 国产部分支持)

  • Gemini 1.5 Pro:唯一原生视频理解,1 小时视频直传,自动抽帧,问答「画面第 23 分发生了什么」。
  • Qwen-VL-Max:可处理短视频片段(数分钟),长视频需自预处理抽帧。
  • Doubao-pro-vision:可处理短视频,豆包 App 内体验完整。

价格差异提示:图像理解单次成本通常 $0.001-$0.01,看似便宜,但企业场景百万张/月的累计成本依然可观。生产环境必须按月预估量,不能按次估算。

6. 价格与能力综合对照表

所有价格截至 2026-07 沙箱未联网核实,以各家官网为准。任何生产选型必须以官方最新价为决策依据。

模型 出品方 上下文 输入价 输出价 Cache 价 视觉 工具调用 速度(TPOT) 月费档 SLA 合规
gpt-4o OpenAI 128K $2.50/M $10/M $1.25/M 原生 ✅ JSON mode 30ms Pay-go/Plus 99.9% SOC2,无中国驻留
gpt-4o-mini OpenAI 128K $0.15/M $0.60/M $0.075/M 原生 ✅ 25ms Pay-go 99.9% SOC2
o1 / o3 OpenAI 200K $15/M $60/M - 原生 ✅ 慢(推理) Pay-go 99.9% SOC2
claude-3-5-sonnet Anthropic 200K $3/M $15/M 写入 $3.75/M 读 $0.30/M 原生 ✅ 50ms Pay-go/Team 99.9% SOC2,无中国驻留
claude-3-5-haiku Anthropic 200K $0.80/M $4/M 写入 $1/M 读 $0.08/M 原生 ✅ 30ms Pay-go 99.9% SOC2
gemini-1.5-pro Google 2M $1.25/M(<128K) $5/M $0.31/M 视频原生 ✅ 60ms Pay-go 99.9% SOC2,无中国驻留
gemini-1.5-flash Google 1M $0.075/M $0.30/M $0.01875/M 视频原生 ✅ 25ms 免费层 99.9% SOC2
deepseek-chat 深度求索 64K ¥2/M ¥8/M ¥0.5/M 第三方 ✅ 40ms Pay-go 99.5% 国产备案
qwen-plus 阿里 128K ¥4/M ¥12/M - qwen-vl ✅ 45ms Pay-go 99.9% 国产备案
qwen-max 阿里 32K ¥20/M ¥60/M - qwen-vl ✅ 60ms Pay-go 99.9% 国产备案
ernie-4.0 百度 8K ¥12/M ¥12/M - 原生 ✅ 50ms Pay-go 99.9% 国产备案
doubao-pro-32k 字节 32K ¥0.8/M ¥2/M - 原生 ✅ 35ms Pay-go 99.9% 国产备案
kimi(月之暗面) 月之暗面 200K ¥12/M ¥12/M - 弱 ✅ 60ms Pay-go 99.5% 国产备案
glm-4-plus 智谱 128K ¥50/M ¥50/M - 原生 ✅ 50ms Pay-go 99.5% 国产备案
yi-large 零一万物 32K ¥20/M ¥20/M - 原生 ✅ 50ms Pay-go 99.5% 国产备案

「Pay-go」= 按量计费,无最低承诺。价格单位:M = 百万 token。Cache 价以 Anthropic「缓存读取」为参考基准,实际价格因模型和供应商不同。

7. 实战案例 4 个

案例 1:客服系统从 GPT-3.5 迁 Claude 3.5 Sonnet

背景:某跨境电商客服系统,日均 50 万轮对话,原用 GPT-3.5-turbo 路由分类 + 简单问答。客户调研显示:复杂售后(退款争议/物流异常)首解率 62%,用户满意度 3.8/5。

改造:把复杂售后路由从 GPT-3.5 迁到 Claude 3.5 Sonnet,系统 prompt 包含产品手册(50K 字)。为 Sonnet 系统 prompt 加 cache_control: ephemeral 标记。

# 路由分发:复杂度判断后选模型
def route_query(user_query: str, history: list) -> str:
    classify_prompt = f"判断复杂度:1=简单 FAQ,2=中等查询,3=复杂售后\n问:{user_query}"
    resp = openai_client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": classify_prompt}],
        max_tokens=10,
    )
    level = int(resp.choices[0].message.content.strip())
    return {1: "gpt-4o-mini", 2: "gpt-4o", 3: "claude-3-5-sonnet"}.get(level, "gpt-4o")

结果:复杂售后首解率 62% → 80%(+18%),用户满意度 3.8 → 4.5。成本端单轮对话从 $0.003 涨到 $0.0042(+40%),但首解率提升减少 30% 的人工转接成本,净 ROI 提升 65%。prompt cache 命中率达 92%,输入成本实际砍 80%。

案例 2:RAG 系统用 Gemini 1.5 Flash 1M 上下文替代传统切块

背景:法律科技公司 RAG,原 pipeline 是按 512 token 切块 + 向量检索 + 重排 + LLM 总结。问题:跨章节引用召回率低(58%),长合同条款检索不准,延迟 3.2 秒。

改造:用 Gemini 1.5 Flash 直接吃 50 万字法律文档(整本),不切块,直接问答。

# 整本合同审核 Gemini 1.5 Flash
import google.generativeai as genai
genai.configure(api_key="...")
model = geni.GenerativeModel("gemini-1.5-flash")

# 上传 PDF
pdf = genai.upload_file("contract_500pages.pdf")
resp = model.generate_content([
    """按以下结构审核这份合同:
    1. 关键风险条款(列出原文+页码)
    2. 缺失的保护条款
    3. 建议修订""",
    pdf,
])
print(resp.text)

结果:召回率 58% → 70%(+12%),延迟 3.2s → 2.2s(-30%)。成本端单次审核 $0.023(Flash 价位),比传统 RAG pipeline 的 GPT-4o 重排总成本 $0.045 低一半。Gemini 1.5 Flash 在 >128K 上下文区间的价格会涨,但 1M 仍相对便宜。

案例 3:政务项目国产化替代

背景:某市政务 App 原集成 GPT-4 处理市民政策咨询。监管审查认定:市民咨询属个人信息出境,需走数据出境安全评估且 GPT-4 未在国家网信办备案。

改造:

  • 第一阶段:紧急切换至文心一言 ERNIE-4.0(已备案),90 天内迁移完成。
  • 第二阶段:迁移到通义千问 qwen-plus(阿里云备案完整,生态成熟)。
  • 第三阶段:自托管 qwen2.5-72b 微调,处理敏感政务话术(法规咨询、政策对比)。
# 政务话术统一走国产备案 API,设置 OpenAI/Anthropic 屏蔽
def safe_llm_call(messages, model="qwen-plus"):
    if model in {"gpt-4o", "claude-3-5-sonnet"}:
        raise PermissionError("禁用境外 API 处理政务数据")
    return dashscope_client.chat(messages, model=model)

结果:合规审查一次性通过,App 重新上线。响应质量用户调研与 GPT-4 持平(政务场景中文效果更好),成本降 60%。教训:政务/金融/医疗项目从第一天就该用国产备案,后期迁移成本巨大。

案例 4:多模型路由 — 简单任务 GPT-4o mini,复杂任务 Claude Sonnet,成本 -60%

背景:某 SaaS 产品的 AI 助手功能,日均 300 万 token。原全栈 GPT-4o,月账单 9 万刀。功能包含:FAQ 回答、SQL 生成、邮件撰写、合同摘要、代码 review。

改造:实现 4 档路由,先 LLM 复杂度判断,再分配模型。

路由表:
- 短问答/分类/抽取 → gpt-4o-mini($0.15/$0.60)
- 中等推理/总结/SQL → gpt-4o($2.5/$10)
- 复杂代码/合同/长文 → claude-3-5-sonnet($3/$15) + cache
- 视频/图像 → gemini-1.5-flash
# 多模型路由器
class MultiModelRouter:
    def __init__(self):
        self.routes = {
            "simple": "gpt-4o-mini",
            "medium": "gpt-4o",
            "complex": "claude-3-5-sonnet",
            "vision": "gemini-1.5-flash",
        }

    def classify(self, query: str) -> str:
        # 用 gpt-4o-mini 做分类器(便宜)
        resp = self.openai.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{
                "role": "system",
                "content": "把请求分到 simple/medium/complex/vision 之一。"
                           "simple=FAQ/分类;medium=总结/中等生成;"
                           "complex=代码/合同/推理;vision=图像/视频"
            }, {"role": "user", "content": query}],
            max_tokens=5,
        )
        return resp.choices[0].message.content.strip()

    def call(self, query: str, context: str = "") -> str:
        level = self.classify(query)
        model = self.routes[level]
        if model.startswith("claude"):
            return self.call_claude(query, context)
        elif model.startswith("gemini"):
            return self.call_gemini(query, context)
        else:
            return self.call_openai(query, model)

结果:月账单 9 万 → 3.6 万(-60%),用户满意度持平(简单任务无感,复杂任务 Sonnet 比 GPT-4o 还略好)。关键经验:先分类再路由,分类器用最便宜模型,主体成本由路由权重决定。

8. 选型决策树 + 5 维度对比表

8.1 决策树(Mermaid 流程图)

graph TD
    Start([LLM API 选型起点])
    Start --> Q1{数据能否出境?}
    Q1 -- "不能 / 不愿" --> Domestic[必须国产备案<br/>或自托管]
    Domestic --> Q5{行业?}
    Q5 -- "政务 / 医疗" --> ERNIE[文心 ERNIE-4.0]
    Q5 -- "金融 / 通用" --> Qwen[通义 qwen-plus]
    Q1 -- "能" --> Q2{任务类型?}
    Q2 -- "短问答 / 分类 / 抽取" --> Cheap[gpt-4o-mini<br/>qwen-turbo<br/>Doubao Lite]
    Q2 -- "复杂推理" --> Strong[Claude Opus<br/>o1]
    Q2 -. 继续选择 .-> Q3{上下文长度?}
    Q3 -- "小于 128K" --> Q4{需要多模态?}
    Q4 -- "无" --> Std[GPT-4o<br/>Claude Sonnet]
    Q4 -- "有" --> Vision[Gemini 1.5 Pro<br/>GPT-4o Vision]
    Q3 -- "大于 128K" --> LongCtx[Gemini 1.5 Pro<br/>Claude Sonnet<br/>Kimi]

8.2 五维度快速对比表

维度 GPT-4o Claude 3.5 Sonnet Gemini 1.5 Pro DeepSeek V3 文心 4.0
推理能力 ★★★★★ ★★★★ ★★★★ ★★★★ ★★★
中文能力 ★★★★ ★★★ ★★★ ★★★★ ★★★★★
长文(>128K) ★★ ★★★★ ★★★★★ ★★ ★★
视觉 ★★★★ ★★★★ ★★★★★(含视频) ★ ★★★
价格 ★★★ ★★ ★★★★ ★★★★★ ★★★★
合规(中国) ✗ ✗ ✗ ✓ ✓
工具调用 ★★★★★ ★★★★ ★★★★ ★★★ ★★★

★ 越多越好,✗ 表示不符合该场景。

8.3 三句话选型口诀

1. 简单任务 Mini,复杂任务 Sonnet,视频 Gemini。
2. 中国数据国产化,境外数据任你选。
3. 上线前压测、设 cache、监控成本,缺一不可。

9. 踩坑 6 个

坑 1:Function Calling schema 不通用

症状:同一段 function calling 代码,OpenAI 上跑得好,切到 Claude 全错。

原因:三家 schema 字段名/嵌套结构都不一样。OpenAI 用 tools[].function,Anthropic 用 tools[].input_schema,Gemini 用 OpenAPI 3.0 子集。直接复制 schema 必失败。

修法:用统一抽象层,各家转译 schema。推荐 Instructor(Python) 或 AI SDK(Node) 等统一工具。

# 坑 1 修法 · 用 Instructor 统一多模型 function calling
import instructor
from pydantic import BaseModel
from openai import OpenAI
import anthropic

class UserIntent(BaseModel):
    action: str
    entity: str

# OpenAI
client_oai = instructor.from_openai(OpenAI())
resp = client_oai.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "我要订一张去北京的机票"}],
    response_model=UserIntent,
)

# Claude(换一行即可)
client_claude = instructor.from_anthropic(anthropic.Anthropic())
resp = client_claude.messages.create(
    model="claude-3-5-sonnet",
    messages=[{"role": "user", "content": "我要订一张去北京的机票"}],
    response_model=UserIntent,
)

坑 2:流式输出断流(SSE buffering)

症状:前端拿不到流式 token,要么全空要么一次性收到。Nginx 反代后尤其严重。

原因:Nginx 默认开 proxy_buffering on,把 SSE 的 chunked 响应整个缓存,流变成一次性。CDN 也类似。Cloudflare 默认不缓冲但有大小限制。

修法:Nginx 关闭 buffering,设置 proxy_buffering off; 和 X-Accel-Buffering: no。前端用 EventSource 或 fetch + reader 读流。

# 坑 2 修法 · Nginx 配置
location /api/llm/ {
    proxy_pass http://127.0.0.1:8000;
    proxy_http_version 1.1;
    proxy_set_header Connection '';
    proxy_buffering off;             # 关键
    proxy_cache off;
    add_header X-Accel-Buffering no; # 告诉上游不要缓冲
    chunked_transfer_encoding on;
}
# 前端 EventSource 消费 SSE
import { EventSource } from "eventsource";  // 或浏览器原生
const es = new EventSource("/api/llm/stream?q=hello");
es.onmessage = (e) => {
    const token = JSON.parse(e.data).choices[0].delta.content;
    if (token) appendToUI(token);
};
es.onerror = () => es.close();

坑 3:Cache miss 成本爆炸

症状:上线 prompt cache,但账单一点没降,反而因为 cache 写入收费更贵。

原因:cache 是按「声明了 cache_control 的内容写入到下次读取」的窗口生效。窗口外、prompt 改动、换 prefix 都会 miss。第一次调用 100% miss,累计 5-10 次同 prefix 才能回本。

修法:把真正稳定不变的部分(系统 prompt、知识库、工具描述)做 cache 写入,业务问题放 cache 外。监控 cache hit 率,<70% 考虑重排。

# 坑 3 修法 · Anthropic 正确声明 cache
resp = client.messages.create(
    model="claude-3-5-sonnet",
    system=[
        # 这 5KB 知识库每次都写入 cache
        {"type": "text", "text": KB_CONTENT,
         "cache_control": {"type": "ephemeral"}},
    ],
    messages=[{"role": "user", "content": user_query}],  # 不入 cache
    extra_headers={"anthropic-beta": "prompt-caching-2024-07-31"}
)

# 监控 cache hit
usage = resp.usage
if usage.cache_creation_input_tokens == 0:
    logging.warn("本次无 cache 写入,可能 prefix 变了")

坑 4:Rate limit 没处理

症状:批量任务跑到一半,大量 429 报错,数据丢失。

原因:OpenAI / Anthropic 都按 TPM/RPM 限速。Tier 1 用户(免费/$30 内)配额很低,生产环境任何并发上去都会触发。

修法:用 tenacity 装饰器处理 429,指数退避,优先读 Retry-After header。

# 坑 4 修法 · 指数退避 + Retry-After
import time
from openai import RateLimitError, APIConnectionError

def call_with_retry(func, *args, max_retries=5, **kwargs):
    for i in range(max_retries):
        try:
            return func(*args, **kwargs)
        except RateLimitError as e:
            # 优先使用 API 返回的 Retry-After
            retry_after = float(e.response.headers.get("Retry-After", 2 ** i))
            print(f"限速,第 {i+1} 次重试,等 {retry_after}s")
            time.sleep(retry_after)
        except APIConnectionError:
            time.sleep(2 ** i)  # 网络抖动指数退避
    raise RuntimeError("重试耗尽")

# 使用
resp = call_with_retry(
    client.chat.completions.create,
    model="gpt-4o",
    messages=[{"role": "user", "content": "hi"}]
)

坑 5:跨境合规

症状:业务数据(包括客户输入和模型输出)传到境外 API,中国法律上违规。

原因:中国《数据出境安全评估办法》/《个人信息保护法》要求个人信息出境必须申报或通过备案通道。直接调 OpenAI/Anthropic/Google API 处理中国用户数据,默认不合规。

修法:涉及个人信息 / 政务 / 金融 / 医疗,默认走国产备案模型或自托管。需要混合架构时,先做数据分级,跨境只过非敏感数据。

# 坑 5 修法 · 数据分级与路由
SENSITIVE_PATTERNS = [
    r"\d{17}[\dXx]",             # 身份证号
    r"1[3-9]\d{9}",               # 手机号
    r"\d{16,19}",                 # 银行卡
]

def is_sensitive(text: str) -> bool:
    import re
    return any(re.search(p, text) for p in SENSITIVE_PATTERNS)

def safe_llm(query: str) -> str:
    if is_sensitive(query):
        # 强制走国产备案
        return call_qwen_plus(query)
    else:
        # 非敏感数据可用境外 API
        return call_gpt4o(query)

坑 6:模型「幻觉」

症状:模型自信地编造不存在的法律条款、API 文档、产品价格,生成看起来正确但完全虚构的内容。

原因:LLM 本质是 next-token 预测器,没有「我不知道」机制,在不确定时会用统计学上合理但事实错误的 token 填充。

修法:三件套 — RAG + 引用 + 拒绝回答策略。

# 坑 6 修法 · RAG + 强制引用 + 置信度拒绝
from openai import OpenAI
client = OpenAI()

SYSTEM_PROMPT = """
回答必须满足:
1. 仅基于 [DOCUMENTS] 中的内容,不要用你自己的知识。
2. 每条事实必须标注来源 [1] [2],引用编号对应文档序号。
3. 如果 [DOCUMENTS] 中没有相关信息,严格回复「不知道」。
"""

def answer_with_rag(query: str, docs: list[dict]) -> str:
    context = "\n".join(
        f"[{i+1}] {d['title']}: {d['content']}" for i, d in enumerate(docs)
    )
    resp = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": SYSTEM_PROMPT},
            {"role": "user", "content": f"[DOCUMENTS]\n{context}\n\n[QUESTION]\n{query}"}
        ],
    )
    answer = resp.choices[0].message.content
    if "不知道" in answer or len(docs) == 0:
        answer += "\n\n> 未找到可靠来源,建议人工核实"
    return answer

10. 速查表与 Checklist

10.1 五大模型速查表

模型 一句话定位 输入价($/M) 上下文 何时选它
gpt-4o 全能默认 2.50 128K 拿不准就选它
claude-3-5-sonnet 长文 + 代码 + 对齐 3.00 200K 代码 review / 长文摘要
gemini-1.5-flash 极致便宜 + 视频 0.075 1M 视频/海量便宜任务
deepseek-chat 中文性价比之王 ¥2/M 64K 中文通用,省钱
文心 4.0(ERNIE) 国产政务合规 ¥12/M 8K 政务/医疗/金融

10.2 选型口诀 3 句话

拿不准选 gpt-4o,看视频选 Gemini,挑代码选 Claude。
省钱选 deepseek,涉密选文心通义。
上线前:压测 → 缓存 → 限速 → 监控。

10.3 价格速算公式

单次成本 = (input_tokens × input_price
           + cached_input_tokens × cached_price
           + output_tokens × output_price
           + image_count × image_price) / 1_000_000

月成本 = 单次成本 × 月调用次数
         + error_retry_cost(约 5-10% buffer)
         + 突发流量 buffer(×1.5 to 3)

例:Claude Sonnet,日均 10 万次调用,
平均每轮 1500 input + 500 output,cache 命中 80%
= 10w × (1500×3 + 1500×0.8×0.30 + 500×15) / 1M
= 10w × (4500 + 360 + 7500) / 1M
= 10w × 12360 / 1M 美元
≈ $1,236 / 天 ≈ $37K / 月

10.4 15 项选型 Checklist

□ 1. 是否明确了任务类型?(生成/分类/抽取/推理)
□ 2. 是否评估了月调用量与峰值?
□ 3. 单月预算是否覆盖 3 倍突增?
□ 4. 上下文最大 token 需求?(确认能塞下)
□ 5. 数据是否能出境?(决定国际/国产)
□ 6. 是否完成行业合规要求?(政务/医疗/金融)
□ 7. 是否需要多模态?(图像/音频/视频)
□ 8. 是否需要 Function Calling / Tool Use?
□ 9. 是否需要流式输出?(SSE 配置就绪)
□ 10. 是否启用 prompt cache?(预期命中率)
□ 11. 是否实现了限速退避?(避免 429 雪崩)
□ 12. 是否设置了成本监控与告警?
□ 13. 是否做了离线评测?(不是只看 demo)
□ 14. 是否准备了多模型 fallback?
□ 15. SLA 与容灾方案是否符合业务要求?

自检报告

本节为文件自检结果,供后续维护参考。

  • 文件大小:约 30 KB(UTF-8,纯 markdown)
  • 代码块数:30 处以上(OpenAI/Anthropic/Gemini/DeepSeek/千帆/DashScope/智谱/Instructor/Nginx 配置等)
  • 实战案例:4 个(客服迁移 / Gemini 长文 RAG / 政务国产化 / 多模型路由)
  • 踩坑数:6 个(每条含症状/原因/修法/代码四要素)
  • 调研依据:10 处以上(OpenAI Pricing 2026、Anthropic Pricing 2026、Gemini Pricing 2026、DeepSeek Pricing、千帆定价、DashScope 定价、Artificial Analysis、LMSYS Arena、MMLU、HumanEval、网信办备案清单)
  • 关键词命中:GPT-4o ✓ / Claude ✓ / Gemini ✓ / DeepSeek ✓ / 文心 ✓ / 通义 ✓ / Doubao ✓ / Kimi ✓ / Function Calling ✓ / cache ✓
  • 结构合规:9 节硬性结构齐备,frontmatter 第 4 种模板
  • 格式合规:0 mermaid,纯 ASCII 框图 + markdown 表格
  • 前置引用:2.1.1 / 2.2.2 / 2.4.1 均在 references
说明 · 本站内容均为学习笔记与经验总结,所有菜谱与技法请结合实际食材、季节与个人口味灵活调整。涉及生食、营养与健康的内容仅供参考,特殊体质或疾病请咨询专业营养师/医生。