一、评测背景与意义
在大模型技术飞速发展的当下,API接口的响应速度已成为开发者选型的重要指标。本文通过严谨的测试实验,对DeepSeek、阿里通义千问、字节火山豆包、腾讯元宝四大主流模型的22个具体版本(含标准版、优化版、轻量版等)展开全面评测。通过400余次API调用实测数据,我们揭示不同模型在响应速度维度的真实表现。
我们采用标准化测试程序,通过20次重复测试取均值,重点关注总token处理速度(tokens/s)、提示处理速度(prompt tokens/s)和补全生成速度(completion tokens/s)三个核心指标。
二、评测方案设计
2.1 测试环境配置
-
测试工具:基于OpenAI SDK二次开发的自动化测试框架
-
测试样本:"请讲两个笑话"
-
测试时间:2025年3月23日
2.2 核心测试代码解析
def text_reply(content, config, model_type, stream=False, numtokens=0, syst='FGAI智能助手'):
# 令牌动态截取算法
while numtokens - max_prompt_tokens > 0:
dnum = (numtokens -max_prompt_tokens) // 2 + 100
content = content[dnum:]
# 分块处理机制
client = openai.OpenAI(
api_key=api_key,
base_url=base_url,
timeout=request_timeout
)
# 多维度指标采集
return usage.total_tokens, prompt_tokens, completion_tokens
2.3 测试参数设定
-
重复次数:每个模型20次连续请求
-
超时阈值:流式30秒/非流式无限制
-
上下文管理:自动截断超长文本
2.4 评测模型清单
厂商 | 模型分类 | 版本标识符 |
---|---|---|
阿里云 | 通义千问Max系列 | qwen-max-latest |
qwen-max-2025-01-25 | ||
通义千问Plus系列 | qwen-plus-latest | |
DeepSeek适配版 | qwen-deepseek-v3 | |
qwen-deepseek-r1-distill-qwen-32b | ||
qwen-deepseek-r1-distill-llama-70b | ||
轻量级版本 | qwen-turbo-latest | |
火山引擎 | 豆包Pro系列 | doubao-1-5-pro-32k-250115 |
doubao-1-5-pro-32k-character-250228 | ||
豆包Lite系列 | doubao-1-5-lite-32k-250115 | |
DeepSeek适配版 | doubao-deepseek-r1-250120 | |
doubao-deepseek-v3-241226 | ||
doubao-deepseek-r1-distill-qwen-32b-250120 | ||
腾讯云 | 混元加速版 | hunyuan-turbos-latest |
hunyuan-turbo-latest | ||
标准系列 | hunyuan-large | |
hunyuan-standard | ||
hunyuan-lite | ||
DeepSeek融合版 | hunyuan-deepseek-r1 | |
hunyuan-deepseek-v3 | ||
DeepSeek | 原生版本 | deepseek-v3 |
deepseek-r1 |
版本标识说明:
-
日期编码:如"250115"代表2025年1月15日发布的版本
-
参数标识:32b/70b标注模型参数量级
-
架构标记:
-
v3:第三代基础架构
-
r1:新一代优化架构
-
distill:知识蒸馏压缩版本
-
-
功能标记:
-
pro:专业增强版
-
lite:轻量化版本
-
turbo:快速响应版
-
该清单完整覆盖四大厂商的22个主流API版本,包含基础架构、优化版本、联合开发等不同类型,确保评测结果的行业代表性。
三、评测结果分析
3.1 速度梯队分布
梯队划分 | 速度范围(tokens/s) | 速度值分布 | 模型数量 |
---|---|---|---|
超高速阵营 | >70 | 90.22(qwen-turbo)、80.53(豆包Lite)、74.74(混元Lite) | 3 |
性能优化组 | 50-70 | 69.56(豆包Pro字符版)、55.9(混元Standard)、51.74(通义千问DeepSeek蒸馏32B) | 3 |
主流区间 | 30-50 | 44.82→40.91→38.25→33.96→33.31→31.83→31.09→30.29→30.12(覆盖9个主流版本) | 9 |
待优化区域 | <30 | 28.39→27.37→25.92→23.05→21.2→14.7→7.72(含腾讯混元DeepSeek系列及原生DeepSeek全系) | 7 |
3.2 厂商速度极值对比
厂商 | 峰值模型 | 峰值速度(t/s) | 谷值模型 | 谷值速度(t/s) | 性能差异倍数 |
---|---|---|---|---|---|
阿里云 | qwen-turbo-latest | 90.22 | qwen-deepseek-v3 | 25.92 | 3.48× |
火山 | doubao-1-5-lite-32k | 80.53 | doubao-deepseek-r1 | 31.83 | 2.53× |
腾讯 | hunyuan-lite | 74.74 | hunyuan-turbo-latest | 21.2 | 3.52× |
DeepSeek | deepseek-r1 | 14.7 | deepseek-v3 | 7.72 | 1.90× |
3.3 完整评测结果数据
[001] qwen-turbo-latest 90.22 10.93 79.29
[002] doubao-1-5-lite-32k-250115 80.53 15.62 64.91
[003] hunyuan-lite 74.74 8.14 66.6
[004] doubao-1-5-pro-32k-character-250228 69.56 11.86 57.7
[005] hunyuan-standard 55.9 6.26 49.64
[006] qwen-deepseek-r1-distill-qwen-32b 51.74 1.93 49.82
[007] doubao-1-5-pro-32k-250115 44.82 5.05 39.76
[008] hunyuan-large 40.91 5.45 35.45
[009] doubao-deepseek-r1-distill-qwen-32b-250120 38.25 2.03 36.22
[010] doubao-deepseek-v3-241226 33.96 3.2 30.75
[011] hunyuan-turbos-latest 33.31 3.08 30.23
[012] doubao-deepseek-r1-250120 31.83 1.07 30.76
[013] qwen-max-latest 31.09 5.65 25.44
[014] qwen-max-2025-01-25 30.29 5.57 24.72
[015] qwen-deepseek-r1-distill-llama-70b 30.12 1.01 29.1
[016] qwen-plus-latest 28.39 4.22 24.17
[017] hunyuan-deepseek-v3 27.37 3.47 23.9
[018] qwen-deepseek-v3 25.92 2.43 23.5
[019] hunyuan-deepseek-r1 23.05 1.14 21.91
[020] hunyuan-turbo-latest 21.2 2.74 18.46
[021] deepseek-r1 14.7 0.53 14.18
[022] deepseek-v3 7.72 0.72 7.01
四、完整评测程序
import time
import openai
import tiktoken
import configparser
import numpy as np
from tqdm import tqdm
def text_reply(content, config, model_type, stream=False, numtokens=0, syst='FGAI智能助手'):
try:
api_key = config.get(model_type, 'api_key')
base_url = config.get(model_type, 'base_url')
max_prompt_tokens = config.getint(model_type, 'max_prompt_tokens')
if numtokens == 0:
encoding = tiktoken.encoding_for_model(config.get('task', 'token_model'))
tokens = encoding.encode(content)
numtokens = len(tokens)
while numtokens - max_prompt_tokens > 0:
dnum = (numtokens -max_prompt_tokens) // 2 + 100
content = content[dnum:]
tokens = encoding.encode(content)
numtokens = len(tokens)
if stream:
request_timeout = 30
else:
request_timeout = None
client = openai.OpenAI(
api_key=api_key,
base_url=base_url,
timeout=request_timeout # 超时设置移至此处的客户端初始化
)
response = client.chat.completions.create(
model=config.get(model_type, 'model'),
messages=[
{'role': 'system', 'content': syst},
{'role': 'user', 'content': content}
],
temperature=config.getfloat(model_type, 'temperature'),
max_tokens=config.getint(model_type, 'max_tokens')-numtokens,
top_p=config.getint(model_type, 'top_p'),
frequency_penalty=config.getfloat(model_type, 'frequency_penalty'),
presence_penalty=config.getfloat(model_type, 'presence_penalty'),
stream=stream
)
except Exception as e:
print(str(e))
return False, 0, 0, 0, ''
if stream:
return True, 0, 0, 0, response
print(response.usage)
return True, response.usage.total_tokens, response.usage.prompt_tokens, response.usage.completion_tokens, response.choices[0].message.content
def test_time(model_type, config, content, repeat_times=20):
print(config.get(model_type, 'model'), config.get(model_type, 'api_key'))
t_tot = 0.0
t_prp = 0.0
t_cpl = 0.0
for i in tqdm(range(repeat_times)):
t0 = time.time()
flag, num_tot, num_prp, num_cpl, resp = text_reply(content, config, model_type, stream=False, numtokens=0, syst='FGAI智能>助手')
t1 = time.time() - t0
t_tot = t_tot + float(num_tot) / t1
t_prp = t_prp + float(num_prp) / t1
t_cpl = t_cpl + float(num_cpl) / t1
t_avg_tot = round(t_tot / repeat_times, 2)
t_avg_prp = round(t_prp / repeat_times, 2)
t_avg_cpl = round(t_cpl / repeat_times, 2)
return t_avg_tot, t_avg_prp, t_avg_cpl
if __name__ == "__main__":
cfg_path = 'cfg_llm.ini'
config = configparser.ConfigParser()
config.read(cfg_path, encoding='utf8')
content = '请讲两个笑话。'
model_types = ['qwen-max-latest', 'qwen-max-2025-01-25', 'qwen-plus-latest', 'qwen-deepseek-v3', 'qwen-deepseek-r1-distill-qwen-32b', 'qwen-deepseek-r1-distill-llama-70b', 'qwen-turbo-latest', 'doubao-1-5-pro-32k-250115', 'doubao-1-5-pro-32k-character-250228', 'doubao-1-5-lite-32k-250115', 'doubao-deepseek-r1-250120', 'doubao-deepseek-v3-241226', 'doubao-deepseek-r1-distill-qwen-32b-250120', 'hunyuan-turbos-latest', 'hunyuan-turbo-latest', 'hunyuan-large', 'hunyuan-standard', 'hunyuan-lite', 'hunyuan-deepseek-r1', 'hunyuan-deepseek-v3', 'deepseek-v3', 'deepseek-r1']
print(len(model_types))
t_avg_tots = []
t_avg_prps = []
t_avg_cpls = []
for model_type in model_types[:]:
t_avg_tot, t_avg_prp, t_avg_cpl = test_time(model_type, config, content, repeat_times=20)
t_avg_tots.append(t_avg_tot)
t_avg_prps.append(t_avg_prp)
t_avg_cpls.append(t_avg_cpl)
print(config.get(model_type, 'model'), t_avg_tot)
print('t_avg_tots: ', t_avg_tots)
print('t_avg_prps: ', t_avg_prps)
print('t_avg_cpls: ', t_avg_cpls)
results = []
ids = np.argsort(t_avg_tots)[::-1]
for i, mid in enumerate(ids):
result = f'[{(i+1):03d}] {model_types[mid]} {t_avg_tots[mid]} {t_avg_prps[mid]} {t_avg_cpls[mid]}\n'
print(result)
results.append(result)
# with open('t_avg_tot.txt', 'w', encoding='utf8') as f:
# f.writelines(results)
五、总结
在当前大模型技术快速发展的背景下,API响应速度已成为开发者选择模型的重要参考因素。本文通过对 DeepSeek、阿里通义千问、字节火山豆包、腾讯元宝 四大主流模型的 22个具体版本,从 总token处理速度、提示处理速度 和 补全生成速度 三个核心指标展开评测,涉及 400余次API调用 实验,以揭示不同模型在响应速度上的真实表现。测试采用标准化程序,取20次重复测试均值,确保结果的可靠性与科学性。需要强调的是,本次评测目前仅对 速度 进行了对比,而模型的实际选型还应综合考虑 准确性、稳定性、功能适配性等性能,后续我们将逐步补充相关评测内容。
此外,本评测将持续更新,欢迎大家留言提出关心的模型或版本,以便在未来的评测中纳入分析范围。本次评测结果来源于FGAI(FGAI 人工智能平台)https://www.botaigc.cn/,可将DeepSeek大模型与知识库直接接入微信公众号。速度在该场景下至关重要,这是因为公众号官方规定响应时间限制在5秒内,且仅3次重试机会,及总时间不超过15秒。