速度优化
最后更新: 2026-09-18
觉得 GLM 响应慢?先区分两种「慢」:
- 首 Token 慢(发出请求到收到第一个字)——多半和缓存命中率、输入量、上下文长度、客户端、高峰算力有关,这部分你能优化。
- 生成速度慢(吐字速度)——取决于模型本身的生成速率与思考强度,优化空间在「换模型 / 调强度」。
本文分两部分:前半讲如何优化首 Token(一六),后半讲生成速度相关(七九,含模型选择)。
#一、提高缓存命中率(最关键)
#原因
GLM 系列对前缀复用做了强缓存:当本次请求的前缀(系统提示、历史消息、工具定义等)与之前某次请求完全一致时,智谱侧会直接命中缓存、跳过重新计算这部分上下文,首 Token 因此大幅缩短。
反之,一旦前缀有任何一个 token 不同,缓存就无法命中,模型需要重新计算全部上下文,首 Token 会明显变长——这正是「同一会话里有时快有时慢」「新会话慢」的根因。
#排查步骤
- 看控制台的缓存读取量:在 LINDE AI 的请求日志里查看
Cache Read(缓存读取)的 Token 数。命中率高时,输入 Token 里很大一部分会落在Cache Read列;命中率低时该列接近 0。 - 对比「同会话续聊」与「新会话首句」:同一会话里连续多轮通常稳定命中缓存(快);新开会话的第一句话由于无历史前缀可复用,必然 miss(慢),这是正常现象。
- 确认前缀是否被破坏:排查系统提示、工具定义、历史消息是否在每轮请求里被客户端整体改写(顺序变动、字段增删、重新序列化)。
#检查
- 命中率高:首 Token 通常在 几百毫秒 ~ 5 秒。
- 命中率低 / 新会话首句:首 Token 可能达到 10 ~ 20+ 秒。
如果你的常态是后者,请重点排查下面三节:输入量、上下文长度、客户端选择与插件篡改。
#二、减少输入 Token 量
首 Token 的等待时间,和输入的 Token 数量直接相关——模型要先读完你的全部上下文才能开始产出,输入越长,首 Token 越慢。除了靠缓存命中复用前缀,主动减少每次请求的输入量同样有效。
开发过程中,善用以下工具可以从源头压缩输入 Token、间接提升首 Token 速度:
- CodeGraph:用代码知识图代替「读大量文件」式的探索。一次查询就能拿到相关符号的源码与调用关系,避免把整个代码库的原始字节塞进上下文,显著减少探索阶段的 Token 消耗。
- RTK(Rust Token Killer):对 git、build、test、lint 等常见命令的输出做 Token 优化(60-90% 压缩),避免冗长的 CLI 原始输出占用上下文窗口,把 Token 额度留给真正的代码与对话。
输入端的 Token 越精简,留给缓存复用与推理的空间就越大,首 Token 与整体响应都会更轻快。这和缓存命中率是相辅相成的两件事:一个管「复用」,一个管「减量」。
#三、控制上下文长度(编码场景的关键)
「减少输入 Token」讲的是每一轮请求的瞬时输入量,而「上下文长度」讲的是整段会话累计的上下文规模——两者都会直接抬升首 Token。会话越长,模型每次回复前都要重新处理整段历史,首 Token 随之拉长。因此,除了压缩单次输入,还要主动控制会话的整体上下文长度。
GLM-5.3 / GLM-5.2 支持最高 1M(100 万)Token 的上下文窗口,这对编码场景听起来很诱人,但实际并非越大越好:
- 编码任务的最佳区间是 200K ~ 400K:绝大多数代码改动、调试、重构所需的上下文都落在这个范围内,足够覆盖一个中型项目的相关模块与依赖。超过这个量级后,额外上下文带来的收益迅速递减。
- 超长上下文的副作用:当上下文堆到 600K 甚至接近 1M 时,幻觉率明显上升——模型更容易凭「历史会话里的记忆」回答当前问题,而不是去真正读取、查询最新的代码与数据。你会看到它「自信地编造」已经不存在的接口、过期的实现。
- 长上下文拖慢首 Token:上下文越长,模型在产出第一个字之前需要预填(prefill)的 Token 越多,首 Token 时间随之线性增长。1M 上下文的首 Token 可能比 200K 慢上数倍。
- 默认用 200K 或 400K 上下文,这是速度、成本与质量的最佳平衡点,覆盖几乎所有日常编码需求。
- 只在确有必要时才开 1M:例如需要让模型一次通读整个大型仓库做架构梳理、跨多仓库追踪调用链等极少数场景。用完记得切回。
- 拆会话优于堆上下文:与其把一个超长任务塞进一个 1M 会话,不如按模块/子任务拆成多个短会话,每个会话只带它真正需要的上下文。这样每个会话都更快、更准、更省。
- Claude Code 用户可以通过
CLAUDE_CODE_DISABLE_1M_CONTEXT=1关闭 1M 模式,强制回到 200K;详见 Claude Code 相关问题。
把上下文控制在「够用就好」的区间,是编码场景里性价比最高的一项提速手段——既压低首 Token,又抑制幻觉,还能省下可观的 Token 消耗。
#四、选对客户端
不同客户端对缓存上下文的管理能力差异巨大,直接影响你的缓存命中率:
- 缓存管理出色:Claude Code、Codex。它们的上下文组织稳定,前缀复用率高,缓存命中表现最好。
- 缓存管理一般:ZCode、OpenCode。这两者的缓存策略相对固定,命中率不如上述两者。
- 缓存率很低:Hermes、OpenClaw。它们的上下文经常在客户端侧被重新组织或更换,前缀难以稳定复用,导致缓存命中率低、首 Token 偏长。
如果你的工作流对首 Token 敏感,优先使用 Claude Code 或 Codex。客户端的缓存管理质量,往往比网络或中转层更能决定你的实际等待时间。
#五、排查插件篡改上下文(重点:记忆类插件)
除了客户端本身,你为客户端安装的个别插件也可能在请求发出前修改、注入或重排上下文,破坏前缀一致性、降低缓存命中率,间接拉长首 Token。
记忆类插件(memory / 长期记忆 / 自动摘要等)是首要嫌疑对象。
这类插件的工作方式本身就是「上下文注入」——它们会在每轮请求里把记忆内容(笔记、摘要、历史片段)拼接到系统提示或消息前部。由于记忆内容会随会话不断变化、增长、重排序,前缀几乎每轮都不一样,缓存几乎无法命中,首 Token 因此明显变长。
简单说:记忆插件靠改写前缀工作,而前缀一变,缓存就失效——这是它最容易「搞坏」缓存命中率的根本原因。
#排查方法
- 优先禁用记忆类插件:逐个临时关闭 memory / 记忆 / 自动摘要类插件,观察首 Token 与缓存读取量是否回升。
- 再查其他改写类插件:任何会自动改写系统提示、注入规则、整理或重排历史消息的插件,同样会破坏前缀。
- 对比命中前后:找到可疑插件后停用或调整其行为,在控制台对比禁用前后的
Cache Read数值变化。
记忆类插件带来的是「跨会话记忆」的便利,代价是缓存命中率下降、首 Token 变慢。如果你对速度敏感,可以关闭这类插件,或改用不侵入前缀的记忆方案(如手动引用关键上下文,而非自动注入)。
#六、Claude Code 缓存优化代理(可选)
claude-code-cache-fix 是一个第三方开源代理工具,通过优化请求结构和缓存标记,帮 Claude Code 提高缓存命中率、减少额度消耗。
- 这是第三方工具,非 LINDE AI 官方维护,安装前请自行审查源码
- 不建议在 Windows 原生环境使用,请在 WSL Linux 环境中配置
- 它只能优化缓存命中率,不能降低模型本身的价格
#安装并启动代理
npm install -g claude-code-cache-fix
CACHE_FIX_PROXY_UPSTREAM=https://ai.lindecdn.com cache-fix-proxy server
#配置
编辑 ~/.claude/settings.json,将 ANTHROPIC_BASE_URL 指向本地代理:
{
"env": {
"ANTHROPIC_BASE_URL": "http://127.0.0.1:9801",
"ANTHROPIC_AUTH_TOKEN": "placeholder",
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "1"
}
}
#验证
另开终端检查代理状态:
curl http://127.0.0.1:9801/health
返回 {"status":"ok"} 后,运行 claude 能正常对话即配置成功。
#后台常驻
手动启动只适合临时验证。长期使用建议配置为系统服务(Linux 用 systemd,macOS 用 launchd),避免每次手动启动。具体配置方式可以参考 项目 README 或让 AI 根据你的系统生成。
#七、高峰期与算力上限
LINDE AI 使用的是智谱的高等级账户,请求会被优先处理。但即便如此,仍然受制于智谱侧的算力上限与高峰期速度压制——这部分是上游因素,任何中转都无法绕过。
- 每日高峰:北京时间 14:00 - 18:00(实际感知可能持续到 20:00 左右)。
- 高峰期表现:容易出现 429(限流),且首 Token 的实际等待时间会明显增加。
对延迟敏感的任务,尽量避峰使用——在上午或夜间调用,可以获得明显更快的响应。
#八、生成速度是流式透传
前六节都在优化首 Token。如果你觉得慢的是「吐字速度」(首 Token 已到,但后续字蹦得很慢),那是另一回事——从这节起聊聊生成速度。
token 的生成速度(吐字速度)是流式透传的:你在 LINDE AI 这里的吐字速度,和你直接用官方 API 大致相同,差别只有连接握手那几百毫秒。也就是说——token 生成的速度是相同的,中转层不会拖慢生成速率。
真正会拉开差距的是首 Token(受缓存与算力影响),而非生成速率。把缓存命中率提上去、避开高峰,是优化首 Token 体验最有效的两件事。
#九、合理控制思考强度
思考(thinking)会显著影响首 Token 与生成速度:模型在产出答案前先进行内部推理,思考越深,等待越久。对 GLM-5.3 / GLM-5.2 而言,思考不只是开/关,还能调强度。
GLM-5.3 / GLM-5.2 及以上支持通过 reasoning_effort 参数控制思考强度(更早的模型只有开/关两档)。可选值与实际效果:
| reasoning_effort | 实际效果 | 速度 |
|---|---|---|
none / minimal |
放弃思考(等同关闭) | 最快 |
low / medium |
映射为 high(降级处理,并非真·低强度) |
较快 |
high |
增强推理 | 较慢 |
xhigh |
映射为 max |
慢 |
max(默认且推荐) |
深度推理 | 最慢 |
也就是说:真正能拉开速度差距的是「不思考(none/minimal)」与「思考(high/max)」之间;而 low/medium 会被映射成 high,xhigh 会被映射成 max,并不提供独立的中间档。
- 追求极速、任务简单:直接关闭思考(
thinking.type = disabled,或reasoning_effort = none/minimal),首 Token 最快。 - 日常编码、一般推理:
high足够,是速度与质量的平衡点。 - 复杂架构、长链条难题:用
max,但接受更长的首 Token 与耗时——这是它最慢的代价。
max 是默认值,质量最高但也最慢。如果你的常态是首 Token 偏长,且任务并不需要极限推理,把强度降到 high 甚至关闭思考,往往能拿到立竿见影的提速。
LINDE AI 在 OpenAI 兼容接口默认开启了思考。若需调整强度或关闭思考,可在支持自定义参数的客户端里设置 reasoning_effort 或 thinking.type = disabled。
#十、GLM-5.3 / GLM-5.2 的生成速度与模型选择
即使缓存命中、避开高峰、生成速度流式透传,模型本身的生成速率仍是一个硬上限——而 GLM-5.3 / GLM-5.2 的生成速度本身并不快。
- 智谱官方 GLM-5.3 / GLM-5.2 的吐字速度并不稳定:有时约 100 token/s,有时只有 40 ~ 60 token/s,随上游负载波动。
- 这是旗舰推理模型的固有取舍——它把算力倾注在推理质量上,吐字速度不是它的强项。
如果你对**生成速度(吐字速度)**有强诉求,不应该要求 GLM-5.3 / GLM-5.2 这种高质量模型具备 Turbo / Flash 级别的速度——这违背它的定位。应当直接选择为速度优化的模型:
| 模型 | 定位 | 速度 |
|---|---|---|
| GLM-5-Turbo | 旗舰 + 速度均衡 | 快 |
| GLM-5.3-Flash | 极速、超高性价比 | 最快 |
| GLM-5.3 / GLM-5.2 / GLM-5.1 | 旗舰推理、高质量 | 较慢(质量优先) |
需要极速响应时,优先用 GLM-5-Turbo 或 GLM-5.3-Flash;需要最强推理质量时,再用 GLM-5.3 或 GLM-5.2。