智谱 GLM 没有 provider profile:下游只能手写 extra_body,能力表与推理对账静默失效 #20
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
DEFAULT_PROFILES里没有智谱(GLM)。下游把glm-5.3-flash/glm-5.3挂在provider=openai这个兜底段名下,而 openai 的thinking_on/thinking_off都是None(未知),所以一配ENABLE_THINKING就在装配期报错——这是 issue #5 之后的正确行为,本身没问题。问题在于下游因此只剩一条路:在
EXTRA_BODY里手写{"reasoning_effort": "none"}。这条路能把参数发出去(_build_payload里payload.update(source.extra_body)),但它绕过了本库为这件事准备的三道机制,而且是静默绕过:ThinkingCapability查不到。下游不知道某个型号能不能关推理,只能自己去撞。resolve_thinking的装配期报错不触发。关不掉的型号照样开跑。_warn_on_thinking_mismatch的运行期对账不成立。source.enable_thinking是None,reconcile_thinking认为调用方没有声明、也就没有矛盾可报。第 3 条的实际后果最值得说:遥测的
thinking_observation列一直老老实实记着observed,库确实观测到了推理,但因为没有声明可以对账,这个信号谁也没看见。下游带着「我关掉了推理」这个错误前提跑了几千次调用,是靠人工直连渠道复测才发现的。实测
测法:直连中转渠道(自建 new-api,OpenAI 兼容端点),绕开本库,
httpxtrust_env=False。提示词「23 乘以 47 等于多少?只回答一个数字,不要解释。」,temperature=0.6。判据取usage.completion_tokens_details.reasoning_tokens(该渠道对 GLM 系稳定上报,usage_source=measured)。取数日期 2026-09-04。表一,五种写法各 N=1(
rt= reasoning_tokens,ct= completion_tokens;答案本身 4 个 token):reasoning_effort:nonethinking:{type:disabled}reasoning_effort:mediumthinking:{type:enabled}表二,
none与medium各 N=8:none的 rtmedium的 rt两个结论:
reasoning_effort对 GLM 系有效,档位语义与 minimax 一致;thinking:{"type":"disabled"}同样有效。建议选reasoning_effort,因为它有档位、能表达thinking_on,而thinking只有开关两态。一条限制:长上下文下
none压不干净拿一条真实的 26 轮、5552 输入 token 的 agent 做题上下文重放,同样配置各 N=3:
none的 rtmedium的 rt短提示词下
none稳定在 0–7,长上下文下会跳到上百。所以can_disable该登记为True,但 evidence 要写明这个限制——它对按 token 记账的调用方有实际影响。建议
thinking_on取medium与 minimax 那条保持同一约定(五档里语义最接近「厂商正常强度」的一档,精确控制走extra_body)。能力登记:
没有覆盖到的
glm-5.2的数据不可信,不建议据此登记。 这个渠道对glm-5.2的请求,响应里的model字段回报glm-5.3(遥测里 5 次历史调用加 1 次现测,6/6 全部如此),怀疑被路由到了glm-5.3。所以我测到的「glm-5.2」行为可能根本是 glm-5.3 的。这是渠道侧的问题,不是本库的,写在这里只是说明为什么第三个型号缺席。high/low/minimal三档。strip_think_tags取False是按响应里content字段干净、推理走reasoning_content观察到的,没有专门构造用例验证。本 issue 由 1.3.3 交付并关闭。
你抱怨的三道机制,现在各自恢复了
合并前的独立验证用真实工厂路端到端跑过,
zhipu段与你原本误挂的openai兜底段两种拼法结果一致——能力表按 model 查、与 provider 无关,所以覆盖面比本 issue 建议的「补一条 zhipu profile」更宽:ThinkingCapability查不到get_capability('glm-5.3')返回('low','high','max')并带出处REASONING_EFFORT=none(不配ENABLE_THINKING)的源,观测到推理时如实喊出「未被满足」并附 evidence第 ② 条的文案特意设计成必带出路——本 issue 的成因正是「报错不给出路,下游只能退回
extra_body」。核心争议:glm-5.3 确实关不掉
T10 经 new-api 对 26 个模型做了约 500 次真实调用。请求
none后 4/5 轮仍在推理,你记录的 rt≈1.2 是短提示词下的采样噪声。三个独立源(智谱官方文档、cherry-studio、OpenRouter)与实测一致。真正让这个结论站住的是
glm-5.3-flash:短提示词 5/5 轮看着像关掉了,长上下文 3 轮里 2 轮露馅。只跑短提示词它会被判成「可以关」——这正是你当初中招的形态,所以实测判据里「短提示词的『关掉了』必须过长上下文复核」是硬性的。因此
can_disable=True没有按本 issue 的建议登记;glm-5.3/glm-5.3-flash登记为不可关闭,而这是 1.3.3 里唯一会打断存量配置的变更——升级后当场失败的下游,正是一直在静默烧推理 token 的那些。你记的渠道串台仍在
本 issue 提到「glm-5.2 的请求 6/6 回报 model=glm-5.3」。实测复现且范围更大:
glm-5/glm-5.1/glm-5.2三个型号 5/5 轮全部被路由到glm-5.3,这三条的能力表因此只能维持文档推定(evidence 已逐条写明原因)。这是渠道侧问题,库这边补不了,需要网关修路由。glm-5.2有个具体的下游陷阱:库按文档推定放行none,而真正服务请求的glm-5.3关不掉推理,运行期对账只能事后告警。CHANGELOG 已就此写明。顺带产出
zhipu/moonshot/anthropic/google四个 provider 段reasoning_effort,「不同档位是不是真有用」这类压测在数据侧终于能分组auto在on_base={}的 provider 上表达不了「开」)、#22(单源 + 上游 429 无Retry-After时挂满 stall window)发布: https://gitea.iomgaa.online/iomgaa/PolyGateway/releases/tag/v1.3.3