作者注:用 curl 和 SDK 计时拆解 DNS、TLS、首 token 与整体耗时,4 步判断国内调用大模型 API 的瓶颈出在“跨境链路”还是“模型推理”。
“接口怎么这么慢?”这是国内开发者接入大模型 API 时最常说的一句话。问题在于,“慢”只是表面现象,它可能来自 DNS 解析、跨境 TLS 握手、模型排队,也可能只是模型本身在认真思考。本文将介绍一套 4 步测速定位法,帮你把一次请求的耗时拆开来看,准确判断国内调用大模型 API 慢的根源。
这不是一篇“换个节点试试”的玄学指南,而是基于真实接入咨询整理的可复现排查流程。我们常被问到:业务部署在美国服务器上,接入地址该怎么填?国内访问会不会因为跨境而卡顿?图片、视频这类大结果能不能完整回传?下文会逐一给出答案。
核心价值:读完本文,你将学会用 curl 和 Python SDK 分段计时,区分网络链路和模型推理的耗时,并根据部署区域选对 base_url。

国内调用大模型 API 慢的核心要点
在动手测速之前,先建立一个基本认知:一次大模型 API 调用的总耗时,是“网络耗时”和“模型耗时”叠加的结果。跨境延迟只影响前者,而很多人感觉到的“慢”,其实大部分来自后者。
| 步骤 | 测什么 | 工具 | 能回答的问题 |
|---|---|---|---|
| 第 1 步 | DNS、TCP、TLS 建连耗时 | curl -w 参数 |
跨境链路本身是否通畅 |
| 第 2 步 | 首 token 延迟(TTFT) | SDK 流式调用 | 模型开始响应要等多久 |
| 第 3 步 | 整体耗时与吞吐 | SDK 非流式 + 多轮统计 | 长输出、大响应体回传是否稳定 |
| 第 4 步 | 对照诊断 | 诊断矩阵 | 瓶颈在网络、模型还是代码 |
跨境延迟由哪几段构成
一个 HTTPS 请求从你的服务器发出,要依次经历 DNS 解析、TCP 三次握手、TLS 握手,然后才发送请求体。跨境场景下,TCP 和 TLS 握手都需要多次往返,物理距离带来的往返时延会被放大好几倍,这就是“建连慢”的来源。好在建连通常只发生在第一次请求,复用连接后这部分成本会大幅下降。
请求到达服务端后,进入模型推理阶段。对于对话模型,首 token 出现前的等待取决于模型大小、输入长度和当前负载;首 token 之后,输出速度取决于模型的生成速率。图片和视频生成则不同,它们往往是同步返回大体积结果,回程链路的带宽与稳定性会直接影响结果能否完整送达。
网络慢还是模型慢的判断原则
判断原则其实很简单:建连阶段慢,看网络;首 token 慢,看模型和输入;输出阶段慢且波动大,看回程链路和响应体大小。 只要把这三段数字测出来,大多数“慢”的问题都能在几分钟内定性。

4 步测速定位跨境延迟快速上手
下面的示例都以 OpenAI 兼容接口为例。无论你的服务部署在国内还是海外,只需要修改 base_url 即可接入,代码其他部分保持不变。
第 1 步:用 curl 拆解跨境链路建连耗时
curl 自带的 -w 参数可以输出每个阶段的时间点,是排查跨境延迟最快的工具。建议请求 /v1/models 这类轻量接口,避免模型推理时间干扰网络测量。
export API_KEY="YOUR_API_KEY"
curl -o /dev/null -s \
-H "Authorization: Bearer $API_KEY" \
-w "DNS解析: %{time_namelookup}s\nTCP连接: %{time_connect}s\nTLS握手: %{time_appconnect}s\n首字节: %{time_starttransfer}s\n总耗时: %{time_total}s\n" \
https://api.apiyi.com/v1/models
需要特别注意,curl 输出的每个值都是从请求开始累计的时间点,而不是单个阶段的独立耗时。各字段的含义和计算方式如下:
| curl 字段 | 含义 | 单段耗时计算 | 偏高时的常见原因 |
|---|---|---|---|
time_namelookup |
DNS 解析完成 | 直接读取 | 本地 DNS 慢、解析到较远节点 |
time_connect |
TCP 连接建立 | connect − namelookup | 跨境往返时延高、丢包 |
time_appconnect |
TLS 握手完成 | appconnect − connect | 链路抖动、握手多次往返 |
time_starttransfer |
收到首字节 | starttransfer − appconnect | 服务端处理、排队 |
time_total |
请求结束 | total − starttransfer | 响应体大、回程带宽不足 |
建议连续执行 5 到 10 次,观察数值是否稳定。如果 TCP 和 TLS 两段耗时波动很大,说明链路质量不稳定;如果数值稳定且处于可接受范围,网络大概率不是主要瓶颈。
第 2 步:用 SDK 流式调用测量首 token 延迟
建连没问题,下一步就要看模型开始响应的速度。首 token 延迟(Time To First Token,TTFT)是对话类应用体感最强的指标,用户盯着屏幕等第一个字出现,每一秒都很漫长。
import time
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.apiyi.com/v1" # 国内、海外部署均可使用
)
start = time.perf_counter()
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "用一句话介绍你自己"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(f"首 token 延迟: {time.perf_counter() - start:.2f}s")
break
拿到 TTFT 后,把它和第 1 步的建连耗时相减,剩下的部分基本就是模型排队与推理的时间。如果这部分占了绝大头,那么优化网络收效有限,更应该考虑换用更快的模型、缩短输入上下文或开启流式输出。
第 3 步:多轮统计整体耗时与大响应体回传
单次测量容易受偶发波动影响,生产环境评估应该做多轮统计,并关注中位数和最大值。下面的完整脚本会自动测量 DNS、TCP、TLS、TTFT 和整体耗时,并输出汇总结果。
查看完整测速脚本
import socket
import ssl
import statistics
import time
from urllib.parse import urlparse
import openai
BASE_URL = "https://api.apiyi.com/v1" # 统一接入地址
API_KEY = "YOUR_API_KEY"
MODEL = "gpt-4o-mini"
ROUNDS = 5
def measure_handshake(url: str) -> dict:
"""分段测量 DNS、TCP、TLS 耗时"""
host = urlparse(url).hostname
t0 = time.perf_counter()
ip = socket.gethostbyname(host)
t1 = time.perf_counter()
sock = socket.create_connection((ip, 443), timeout=10)
t2 = time.perf_counter()
ctx = ssl.create_default_context()
tls = ctx.wrap_socket(sock, server_hostname=host)
t3 = time.perf_counter()
tls.close()
return {"dns": t1 - t0, "tcp": t2 - t1, "tls": t3 - t2}
def measure_llm(client: openai.OpenAI) -> dict:
"""测量首 token 延迟与整体耗时"""
start = time.perf_counter()
ttft = None
chars = 0
stream = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": "写一段 200 字左右的产品介绍"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
if ttft is None:
ttft = time.perf_counter() - start
chars += len(chunk.choices[0].delta.content)
total = time.perf_counter() - start
return {"ttft": ttft or total, "total": total, "chars": chars}
def summarize(name: str, values: list) -> None:
print(f"{name:<8} 中位数 {statistics.median(values):.3f}s "
f"最大 {max(values):.3f}s 最小 {min(values):.3f}s")
def main():
client = openai.OpenAI(api_key=API_KEY, base_url=BASE_URL, timeout=120)
records = {"dns": [], "tcp": [], "tls": [], "ttft": [], "total": []}
for i in range(ROUNDS):
hs = measure_handshake(BASE_URL)
llm = measure_llm(client)
for k in ("dns", "tcp", "tls"):
records[k].append(hs[k])
records["ttft"].append(llm["ttft"])
records["total"].append(llm["total"])
print(f"第 {i + 1} 轮完成,输出 {llm['chars']} 字")
print("\n===== 测速汇总 =====")
for k, v in records.items():
summarize(k.upper(), v)
if __name__ == "__main__":
main()
对于图片接口,需要额外关注一点:图片生成通常是同步调用,最终返回的响应体比文本大得多。如果整体耗时远大于首字节时间,或者偶发连接中断,问题往往出在回程链路上,而不是模型生成慢。这时应适当调大客户端超时时间,并对中断做幂等重试。
第 4 步:对照诊断矩阵判断瓶颈
拿到前三步的数据后,用下面的矩阵对号入座,基本就能定位问题。
| 现象 | 最可能的瓶颈 | 优先处理方式 |
|---|---|---|
| DNS 阶段明显偏高 | 本地 DNS 解析 | 更换稳定的 DNS 服务、启用解析缓存 |
| TCP、TLS 偏高且波动大 | 跨境链路质量 | 复用连接、选择有线路优化的接入服务 |
| 建连正常、TTFT 很高 | 模型推理或输入过长 | 换更快模型、精简上下文、开启流式 |
| TTFT 正常、整体耗时长 | 输出过长或生成速率低 | 限制 max_tokens、拆分任务 |
| 图片视频偶发中断 | 大响应体回传不稳 | 调大超时、幂等重试、异步轮询 |
| 首次慢、后续快 | 冷启动建连 | 使用长连接、全局复用 client |
🚀 快速开始:如果你想马上跑一遍上面的测速脚本,推荐先在 API易 apiyi.com 注册获取 API Key,新用户有免费测试额度,足够完成多轮测速对比,不需要额外部署任何代理。
不同部署区域如何选择 base_url
很多开发者会纠结:业务部署在海外和部署在国内,是否需要填写不同的接入地址?答案是不需要。API易 的服务器本身位于美西,海外服务直接访问链路天然较短;同时平台为国内访问做了回国线路加速,重点保障图片、视频这类大响应体业务的回传稳定性。因此无论部署在哪里,统一使用同一个 base_url 即可。

| 部署位置 | 链路特点 | 测速关注重点 | 接入建议 |
|---|---|---|---|
| 美国 / 美西 | 与服务端同区域,往返时延低 | 重点看 TTFT 与模型耗时 | 直接使用统一接入地址 |
| 欧洲 / 亚太海外 | 跨洋但国际链路通常稳定 | 关注 TLS 握手与连接复用 | 统一接入地址 + 长连接 |
| 中国大陆 | 跨境链路,已有回国线路加速 | 关注建连波动和大响应体回传 | 统一接入地址 + 合理超时 |
| 混合部署 | 多区域同时调用 | 分区域分别测速对比 | 同一份代码,无需分支配置 |
这种设计的好处是,同一份代码可以在测试环境(国内)和生产环境(海外)之间无缝迁移,不用维护多套配置。真正需要做的,是在各自的部署环境里跑一遍前面的 4 步测速,确认实际表现符合业务预期。
大响应体跨境调用的优化建议
图片和视频接口对跨境链路最敏感,建议在代码层面做好以下几件事:
- 全局复用 client:避免每次请求都重新建连,跨境场景下能省掉大量握手时间。
- 按业务类型设置超时:文本对话可以较短,图片生成和视频结果拉取应给足余量。
- 对中断做幂等重试:使用指数退避,避免短时间内重复提交生成任务。
- 视频任务采用异步轮询:提交任务后定期查询状态,结果就绪再下载,降低长连接中断风险。
- 记录分段耗时日志:把 TTFT 和整体耗时写入监控,出问题时能快速回溯。
常见问题 FAQ
Q1:什么是跨境延迟,它和模型推理延迟有什么区别?
跨境延迟是请求在国内与海外服务器之间传输产生的网络耗时,主要体现在 TCP、TLS 建连和数据回传阶段。模型推理延迟则是服务端生成内容所花的时间,体现在首 token 等待和输出速度上。两者需要分开测量,才能找准优化方向。
Q2:业务部署在美国服务器上,调用 API易 该填哪个地址?
直接使用 `https://api.apiyi.com/v1` 即可。API易 的服务器位于美西,美国部署的业务访问链路很短,无需额外配置。具体接入步骤可以参考 API易 apiyi.com 文档中心的快速开始说明,三步就能完成。
Q3:服务器在美西,为什么国内访问也比较流畅?
因为平台针对国内访问做了回国线路加速,主要用于保障图片、视频这类大响应体业务的回传稳定性。你可以用本文第 1 步的 curl 命令在国内服务器上实测,观察 TCP 和 TLS 阶段的耗时与波动情况。
Q4:首 token 延迟很高,是不是网络有问题?
不一定。先看 curl 测出的建连耗时,如果建连正常,那么 TTFT 高通常是模型本身较大、输入上下文过长或推理较复杂导致的。此时可以尝试换用轻量模型、精简提示词,或者开启流式输出改善用户体感。
Q5:如何快速对比不同模型的响应速度?
推荐使用支持多模型的聚合接口进行测试:
1. 在 API易 apiyi.com 注册账号并获取 API Key
2. 使用本文完整测速脚本,只修改 `MODEL` 变量
3. 对每个模型跑相同轮次,比较 TTFT 和整体耗时的中位数
由于一个 Key 即可调用 OpenAI、Claude、Gemini 等多种模型,对比时网络条件保持一致,结论更可信。
Q6:图片 API 偶尔连接中断怎么排查?
图片接口是同步调用,响应体较大,中断多发生在结果回传阶段。建议先调大客户端超时,再观察 curl 的 `time_total` 与 `time_starttransfer` 差值。如果差值大且不稳定,说明回程链路是瓶颈,可加入幂等重试并避开高峰时段批量提交。
Q7:这套测速方法有哪些局限?
测速结果只反映测量时刻和测量位置的网络状态,不同运营商、不同时段可能差异明显。另外,模型负载会随时间变化,单次 TTFT 不能代表长期表现。建议在生产环境长期记录分段耗时,用趋势而非单点数据做决策。
国内调用大模型 API 测速核心要点 Key Takeaways
- 先拆分再优化:总耗时等于网络耗时加模型耗时,必须分段测量。
- curl 测建连:用
-w参数拿到 DNS、TCP、TLS 累计时间点。 - SDK 测 TTFT:流式调用记录首 token 时间,判断模型响应速度。
- 多轮看中位数:单次结果易受波动影响,至少统计 5 轮以上。
- 大响应体看回程:图片视频关注整体耗时与首字节的差值。
- 统一接入地址:通过 API易 apiyi.com 接入,国内海外共用同一 base_url。
总结
国内调用大模型 API 慢的排查核心要点:
- 4 步定位法:建连测速、首 token 测速、整体耗时统计、诊断矩阵对照,层层缩小范围。
- 区分两类延迟:跨境延迟靠连接复用和线路优化解决,模型延迟靠选型和精简输入解决。
- 大响应体单独关注:图片、视频业务要配置合理超时、幂等重试和异步轮询。
- base_url 无需按区域区分:海外直连美西机房,国内有回国线路加速,一套配置即可。
与其凭感觉判断“慢”,不如花几分钟跑一遍测速脚本,让数据告诉你瓶颈在哪里。推荐通过 API易 apiyi.com 获取免费测试额度,在自己的部署环境中完成实测,再决定模型选型和超时策略。
📚 参考资料
- API易 文档中心:接入地址与三步接入流程说明
- 链接:
docs.apiyi.com -
说明:包含 OpenAI 兼容模式配置、图片 API 调用须知与连接中断排查
-
curl 官方手册:
-w写出变量完整说明 - 链接:
curl.se/docs/manpage.html -
说明:查阅
time_namelookup、time_appconnect等计时字段的权威定义 -
OpenAI Python SDK:官方开源仓库
- 链接:
github.com/openai/openai-python - 说明:流式调用、超时与重试参数的使用方式
作者:APIYI 技术团队
技术交流:测速过程中遇到问题,欢迎在 API易 网站首页联系我们,更多接入资料可访问 docs.apiyi.com 文档中心
