最近发现不少小伙伴在折腾 AI 的时候遇到一个挺让人挠头的问题:明明用的也是 Claude,但感觉它“变笨”了——倒不是智商下降,而是那个标志性的、看着它“苦思冥想”的思考过程直接消失了,只剩下冷冰冰的最终结果。

这通常是发生在使用一些第三方反向代理服务(比如大家口中提到的某些镜像站或中转服务)的时候。很多人第一反应是:我是不是被坑了?或者是这账号有什么限制?

其实这大概率不是智商问题,而是技术实现细节的问题。今天我们就来扒一扒:为什么反代出来的 Claude 没有思考过程,以及怎么解决它。

展示流式响应中 <thinking> 标签被过滤的示意图

流式响应过滤机制示意图

一、 核心原因:流式响应的过滤机制

我们要明白 Claude 的“思考过程”是怎么展示的。

官方的 Claude 界面之所以能看到那个 <thinking> 板块,是因为 API 返回的内容里包含了两部分:一部分是 <thinking> 标签包裹的内部推理链,另一部分才是真正的回复正文。这两个部分是混在流式响应里的。

当你在使用反向代理时,情况就变了。很多反代服务为了优化传输速度,或者为了兼容某些并不支持“思考展示”的客户端(比如旧版 OpenAI 格式适配器),会在中间层做一个“清洗”动作。

Claude 官方界面与反代界面对比

Claude 官方界面与反代界面对比

简单来说,反代程序识别到了 <thinking> 标签,判定这是“非最终输出”,于是直接把它过滤掉了,只把结果部分转发给你。这就是你感觉它“没有思考”的根本原因——它想了,但中间的“快递员”把信纸给扔了,只给了你信封。

二、 模型版本的差异

除了反代过滤的问题,还有一个容易被忽视的因素:模型版本

目前 Claude 3.7 Sonnet 等版本才正式引入并强化了扩展思考功能。如果你通过反代调用的是旧版模型 ID,或者反代商在映射时指向了一个非思考版本的模型,那么请求本身就根本不会触发思考模式。

三、 扒一下“Kiro们”的实现逻辑

这就涉及到了具体的服务端实现。虽然每个站点的代码不同,但逻辑大同小异。通常在反代的处理逻辑中,会有类似这样的一段判断:

  1. 检测请求头或参数中是否包含 model=claude-3.7-sonnet
  2. 检测是否有开启思考的参数(虽然在某些 API 变种中,只要模型对就会默认触发)。
  3. 关键步骤:在处理 SSE(Server-Sent Events)流时,如果数据块包含 <thinking>,是选择透传还是剔除?

很多开源的反代项目(如某些 New API 的魔改版本)默认配置为了“净化模式”,防止 <thinking> 污染下游非原生客户端的显示结果。

四、 实操解决方案:怎么找回思考过程?

如果你就是想看着它思考,有以下几条路可以走:

1. 切换客户端或接入点

不要使用只能适配 OpenAI 格式的通用客户端,尽量使用支持 Claude 原生协议的客户端接入反代。如果客户端支持解析流式数据中的思考标签,而反代是透传的,那你就能看到了。

2. 检查反代配置(如果你是站长)

如果你是自己搭的反代,检查一下后端代码,确保没有对 thinking 类型的文本块进行正则过滤。你需要确保后端是“透明代理”,把 API 肥回来的所有字节原封不动地吐给前端。

3. 尝试 Prompt 激活

虽然这取决于后端是否硬性屏蔽,但有时候在 Prompt 里明确要求:“请展示你的思考过程”,或者在支持模型参数的情况下,将 max_tokens 设置得足够大,以及确保 betas 参数(如果是通过非官方方式调用)正确开启。

4. 最笨但有效的办法:官方直连

如果反代始终无法解决,且你极度依赖思考链来优化 Prompt 或工作流,那只能回归官方 API 原生请求,或者寻找承诺“完全无损透传”的优质中转服务。

结语

反代服务虽然方便,但它本质上多了一层“中间商”。这层中间商为了保证兼容性或性能,往往会牺牲掉一些高级特性。Claude 的“思考过程”就是最容易被这一层截留的牺牲品。

下次再遇到这种情况,别急着怪 Claude 变笨了,先看看是不是连接它的“管道”出了问题。希望这篇分析能帮你理清思路,找到合适的方法来享受 AI 的完整推理过程。

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭