国内调用大模型 API 慢?4 步测速定位跨境延迟的实操指南

国内调用大模型 API 慢?4 步测速定位跨境延迟的实操指南

作者注:用 curl 和 SDK 计时拆解 DNS、TLS、首 token 与整体耗时,4 步判断国内调用大模型 API 的瓶颈出在“跨境链路”还是“模型推理”。

“接口怎么这么慢?”这是国内开发者接入大模型 API 时最常说的一句话。问题在于,“慢”只是表面现象,它可能来自 DNS 解析、跨境 TLS 握手、模型排队,也可能只是模型本身在认真思考。本文将介绍一套 4 步测速定位法,帮你把一次请求的耗时拆开来看,准确判断国内调用大模型 API 慢的根源。

这不是一篇“换个节点试试”的玄学指南,而是基于真实接入咨询整理的可复现排查流程。我们常被问到:业务部署在美国服务器上,接入地址该怎么填?国内访问会不会因为跨境而卡顿?图片、视频这类大结果能不能完整回传?下文会逐一给出答案。

核心价值:读完本文,你将学会用 curl 和 Python SDK 分段计时,区分网络链路和模型推理的耗时,并根据部署区域选对 base_url。

china-llm-api-latency-4-step-diagnosis-image-0


国内调用大模型 API 慢的核心要点

在动手测速之前,先建立一个基本认知:一次大模型 API 调用的总耗时,是“网络耗时”和“模型耗时”叠加的结果。跨境延迟只影响前者,而很多人感觉到的“慢”,其实大部分来自后者。

步骤 测什么 工具 能回答的问题
第 1 步 DNS、TCP、TLS 建连耗时 curl -w 参数 跨境链路本身是否通畅
第 2 步 首 token 延迟(TTFT) SDK 流式调用 模型开始响应要等多久
第 3 步 整体耗时与吞吐 SDK 非流式 + 多轮统计 长输出、大响应体回传是否稳定
第 4 步 对照诊断 诊断矩阵 瓶颈在网络、模型还是代码

跨境延迟由哪几段构成

一个 HTTPS 请求从你的服务器发出,要依次经历 DNS 解析、TCP 三次握手、TLS 握手,然后才发送请求体。跨境场景下,TCP 和 TLS 握手都需要多次往返,物理距离带来的往返时延会被放大好几倍,这就是“建连慢”的来源。好在建连通常只发生在第一次请求,复用连接后这部分成本会大幅下降。

请求到达服务端后,进入模型推理阶段。对于对话模型,首 token 出现前的等待取决于模型大小、输入长度和当前负载;首 token 之后,输出速度取决于模型的生成速率。图片和视频生成则不同,它们往往是同步返回大体积结果,回程链路的带宽与稳定性会直接影响结果能否完整送达。

网络慢还是模型慢的判断原则

判断原则其实很简单:建连阶段慢,看网络;首 token 慢,看模型和输入;输出阶段慢且波动大,看回程链路和响应体大小。 只要把这三段数字测出来,大多数“慢”的问题都能在几分钟内定性。

china-llm-api-latency-4-step-diagnosis-image-1


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 即可。

china-llm-api-latency-4-step-diagnosis-image-2

部署位置 链路特点 测速关注重点 接入建议
美国 / 美西 与服务端同区域,往返时延低 重点看 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 慢的排查核心要点:

  1. 4 步定位法:建连测速、首 token 测速、整体耗时统计、诊断矩阵对照,层层缩小范围。
  2. 区分两类延迟:跨境延迟靠连接复用和线路优化解决,模型延迟靠选型和精简输入解决。
  3. 大响应体单独关注:图片、视频业务要配置合理超时、幂等重试和异步轮询。
  4. base_url 无需按区域区分:海外直连美西机房,国内有回国线路加速,一套配置即可。

与其凭感觉判断“慢”,不如花几分钟跑一遍测速脚本,让数据告诉你瓶颈在哪里。推荐通过 API易 apiyi.com 获取免费测试额度,在自己的部署环境中完成实测,再决定模型选型和超时策略。


📚 参考资料

  1. API易 文档中心:接入地址与三步接入流程说明
  2. 链接:docs.apiyi.com
  3. 说明:包含 OpenAI 兼容模式配置、图片 API 调用须知与连接中断排查

  4. curl 官方手册:-w 写出变量完整说明

  5. 链接:curl.se/docs/manpage.html
  6. 说明:查阅 time_namelookup、time_appconnect 等计时字段的权威定义

  7. OpenAI Python SDK:官方开源仓库

  8. 链接:github.com/openai/openai-python
  9. 说明:流式调用、超时与重试参数的使用方式

作者:APIYI 技术团队
技术交流:测速过程中遇到问题,欢迎在 API易 网站首页联系我们,更多接入资料可访问 docs.apiyi.com 文档中心

延伸阅读

类似文章