我花了40小时为副业测试AI API基准

Dev.to ML 2026-07-07T09:13:40.357119

上周二,我最大的客户抛弃了我。好吧,"抛弃"有点苛刻。他们只是说我构建的聊天机器人感觉"迟钝",并要求退款。迟钝。一个词。两个音节。没了:4,800美元的经常性收入。我把整个东西建立在我认为很牢靠的模型上。结果模型没问题。延迟要了我的命。用户要盯着闪烁的光标超过一秒钟,第一个字才会出现。对他们来说,感觉像是坏了。对我来说,感觉像是看着钱蒸发。

所以我做了任何一个有点强迫症的自由职业者都会做的事:接下来两周,我通过Global API测试了我能接触到的每一个模型。我花了40个可计费小时却无法收费,自掏腰包,从两个大洲用相同提示词测试了15个模型。以下是我的发现,更重要的是,以下是我实际会为客户项目部署的方案。

为什么我不能相信营销页面

每个模型提供商都声称他们的API"速度飞快"且"可用于生产环境"。但没有一个会告诉你,当你的用户坐在俄亥俄州等待来自新加坡服务器农场的令牌时,这究竟意味着什么。登陆页面上声称的"高达200 tok/s"基本是虚构的,一旦你考虑TTFT(首次令牌时间)、网络跳数以及模型在持续负载下的实际表现。我需要真实数据。我需要在上午9点和下午5点获取数据,而不只是营销团队在半夜运行内部测试时。我需要知道我的客户的用户实际会看到什么。所以我写了一个小基准测试脚本,然后跑了很多次。

测试设置(无聊但必要)

下面是我确切的做法,你可以复制它,或者如果你觉得我篡改了数字,可以质疑我:

参数 我使用的值
日期范围 2026年5月20日
运行地点 美国东部(俄亥俄州)和亚洲(新加坡)
测试提示词 "用200字解释递归"
输出长度 每次运行约150个令牌
运行次数 每个模型10次,取平均值
是否流式? 是,SSE(服务器推送事件)
端点 Global API,地址 https://global-apis.com/v1

速度排行榜,毫不留情

我按从快到慢排序,以下是完整排名,包含TTFT(首个token用时,对用户体验最重要的指标)和持续每秒token数:

排名 模型 TTFT tok/s 提供商 $/M 输出
1 Step-3.5-Flash 120ms 80 StepFun $0.15
2 DeepSeek V4 Flash 180ms 60 DeepSeek $0.25
3 Hunyuan-TurboS 200ms 55 腾讯 $0.28
4 Qwen3-8B 150ms 70 Qwen $0.01
5 Qwen3-32B 250ms 45 Qwen $0.28
6 Doubao-Seed-Lite 220ms 50 字节跳动 $0.40
7 Hunyuan-Turbo 280ms 42 腾讯 $0.57
8 GLM-4-32B 300ms 38 智谱 $0.56
9 Qwen3.5-27B 350ms 35 Qwen $0.19
10 DeepSeek V4 Pro 400ms 30 DeepSeek $0.78
11 MiniMax M2.5 450ms 28 MiniMax $1.15
12 GLM-5 500ms 25 智谱 $1.92
13 Kimi K2.5 600ms 20 Moonshot $3.00
14 DeepSeek-R1 800ms 15 DeepSeek $2.50
15 Qwen3.5-397B 1200ms 10 Qwen $2.34

需要提一点:重推理模型(R1、K2.5、K2-Thinking)的TTFT惨不忍睹,因为它们在说话前会先思考。DeepSeek-R1的800ms并非网络延迟,而是模型在默默推演。对难题有用,对聊天体验却糟糕透顶。

我实际会用于客户工作的模型

这里要算算计费工时账。我按实际目标来分类我的选择。

“我需要它感觉瞬间响应”梯队(TTFT低于200ms):

"快速且精准"层级:

Step-3.5-Flash,120毫秒TTFT(首Token生成时间),胜出。对于简单的客服机器人、常见问题解答器,以及任何用户只想得到答案的场景,这就是最佳选择。每秒80个Token的速度意味着,用户还没读完问题,回答就已经生成完毕。按每百万输出Token 0.15美元的价格计算,处理一千张客服工单的API费用不到1美元。我可以向客户收取每张工单5美元的费用,赚取差价。

"既要聪明又要快"层级:

DeepSeek V4 Flash。180毫秒的TTFT仍在"即时"阈值以内,每秒60个Token的速度足够快,质量也确实不错。这几乎成了我处理所有任务的新默认选项。按每百万Token 0.25美元计算,我完全不用担心因为定价过高而失去任何一个合同。

"囤积狂兼极致性价比爱好者"层级:

Qwen3-8B,每百万Token只需0.01美元,每秒70个Token。让我再说一遍:每百万输出Token仅需一美分。我反复核对了三遍这个数字。对于批量处理任务、内容审核,以及任何只需要一个合理模型以规模化完成合理工作的场景,这个选择无与伦比。我一直用它运行内部数据分类管道,并没有发现与之前使用的贵四倍的模型相比,质量有明显下降。

"我追求质量,不在乎速度"层级:

GLM-5 或 Kimi K2.5。这些模型适用于代码审查、复杂分析,以及任何我宁愿等待2秒钟也要得到正确答案的场景。我会向客户为这类任务收取溢价,因为工作本身值这个价。

地理因素带来的成本差异

我在美国东部和新加坡两地进行了测试。差异真实存在,并且应该影响你对合同的定价方式:

模型 美国东部 TTFT 亚洲 TTFT 改善幅度
DeepSeek V4 Flash 180ms 150ms -30ms
Qwen3-32B 250ms 210ms -40ms
GLM-5 500ms 420ms -80ms
Kimi K2.5 600ms 480ms -120ms

模式很清晰:当你的用户靠近数据中心时,中国起源的模型(Qwen、GLM、Kimi)在延迟上能领先16-20%。如果我的客户主要面向亚洲用户群,我会为他们路由到 Qwen3-32B 而不是 DeepSeek,即使价格相同——因为对这些用户来说,体验明显更好。DeepSeek 在全球的分布最均衡。如果客户不知道用户在哪里,或者用户群遍布全球,那么 DeepSeek 是更稳妥的选择。

我贴在墙上的用户感知速查表

我打印了这张表,贴在了显示器旁边:

TTFT 用户会说出的话
低于 200ms "哇,真快!"
200-400ms "行,正在工作"
400-800ms "是不是坏了?"
800ms+ 直接关掉标签页

对于交互式聊天产品,我拒绝部署任何 TTFT 超过 400ms 的模型。参与度的下降非常严重,绝对会侵蚀客户正在关注的留存指标。我那 4800 美元的教训,核心就在 TTFT,而不是吞吐量。模型生成令牌的速度够快,但用户就是没能尽快看到第一个令牌。

我实际使用的代码

下面是我用来运行这些基准测试的 Python 脚本。我使用 openai 库,因为 Global API 兼容 OpenAI 接口,只需改一个字符串就能切换模型。所有上面的数据都是用同样的脚本、同样的提示词跑出来的:

import time
import statistics
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_GLOBAL_API_KEY",
    base_url="https://global-apis.com/v1"
)

def benchmark_model(model_name, iterations=10):
    ttft_list = []
    tps_list = []

    for _ in range(iterations):
        start = time.perf_counter()
        first_token_time = None
        token_count = 0

        stream = client.chat.completions.create(
            model=model_name,
            messages=[
                {"role": "user", "content": "用200字解释递归"}
            ],
            stream=True,
            max_tokens=200
        )
        for chunk in stream:
            if first_token_time is None:
                first_token_time = time.perf_counter() - start
            if chunk.choices[0].delta.content:
                token_count += 1

        total_time = time.perf_counter() - start
        ttft_list.append(first_token_time * 1000)  # to ms
        tps_list.append(token_count / (total_time - first_token_time))

    return {
        "model": model_name,
        "avg_ttft_ms": round(statistics.mean(ttft_list), 1),
        "avg_tok_per_sec": round(statistics.mean(tps_list), 1)
    }

# Run the actual benchmark
models = [
    "step-3.5-flash",
    "deepseek-v4-flash",
    "hunyuan-turbos",
    "qwen3-8b",
    "qwen3-32b",
]

for m in models:
    result = benchmark_model(m)
    cost_per_m = {"step-3.5-flash": 0.15, "deepseek-v4-flash": 0.25,
                  "hunyuan-turbos": 0.28, "qwen3-8b": 0.01,
                  "qwen3-32b": 0.28}[m]

    avg_output_per_request = 150
    requests_per_hour = 1000
    hourly_cost = (avg_output_per_request / 1_000_000) * cost_per_m * requests_per_hour

    print(f"{result['model']}: {result['avg_ttft_ms']}ms TTFT, "
          f"{result['avg_tok_per_sec']} tok/s, "
          f"cost: ${hourly_cost:.2f}/hour")

查看原文