目录

一、报错信息

二、问题描述

三、解决流程

四、总结

五、二更&评论区QA整理

5.1、升降版本操作流程

VSCode升级

VSCode中claude code降级+禁止更新

CCSwitch升级

powershell中claude降级+禁止版本更新

2026-05-29

2026-06-01


一、报错信息

2026-05-29报错完整信息:

API Error: 400 Failed to deserialize the JSON body into the target type: messages[1].role: unknown variant `system`, expected `user` or `assistant` at line 1 column 560

二、问题描述

        我因为2026-05-29凌晨研究Clash Verge的Tun模式下能否下载npm install -g authropic-ai/claude-code,打开TUN模式之后Claude就跑不起来了;

        因为问题比较新所以国内外解决这个问题的帖子没有太多,大多帖子都是提问该问题而非解决该问题。

三、解决流程

        所以后来想了一个办法:用powershell打开opencode,让opencode搭deepseek-v4-pro帮我检查错误并修复,opencode给我的反馈如下:

(1)问题出在了哪

        DeepSeek Anthropic API 兼容性问题: DeepSeek 的 /anthropic 端点不支持 Anthropic 格式中的 system 角色消息。

        DeepSeek API 支持 Anthropic 顶层的 system 参数,但不支持 messages 数组里出现 system 角色。Claude Code 把 system prompt 放在了 messages 数组里导致报错。所以:

        方案一是写一个本地代理,把 Claude Code 发出的请求做一次转换——将 messages 数组中的 system 角色消息提取到 Anthropic 顶层的 system 参数。

        opencode在我的C:\Users\zzz17\.claude中加入了一个名为deepseek-proxy.py的文件,具体内容如下:

import json
import sys
import requests
from flask import Flask, request, Response

TARGET_URL = "https://api.deepseek.com/anthropic/v1/messages"
API_KEY = "sk-(你的API key)"

app = Flask(__name__)

@app.route("/v1/messages", methods=["POST"])
def proxy():
    data = request.get_json(force=True)

    messages = data.get("messages", [])
    system_parts = []
    filtered = []
    for msg in messages:
        if msg.get("role") == "system":
            content = msg.get("content", "")
            if isinstance(content, list):
                parts = [c.get("text", "") for c in content if c.get("type") == "text"]
                system_parts.append("\n".join(parts))
            else:
                system_parts.append(str(content))
        else:
            filtered.append(msg)
    if system_parts:
        data["system"] = "\n\n".join(system_parts)
    data["messages"] = filtered

    headers = {
        "Content-Type": "application/json",
        "x-api-key": API_KEY,
        "anthropic-version": "2023-06-01",
    }

    stream = data.pop("stream", False)
    resp = requests.post(
        TARGET_URL,
        json=data,
        headers=headers,
        stream=stream,
        timeout=300,
    )

    if stream and resp.status_code == 200:
        return Response(
            resp.iter_content(chunk_size=1024),
            status=resp.status_code,
            content_type=resp.headers.get("Content-Type", "text/event-stream"),
            headers={k: v for k, v in resp.headers.items()
                     if k.lower() not in ("content-encoding", "transfer-encoding")},
        )
    else:
        return Response(
            resp.content,
            status=resp.status_code,
            content_type=resp.headers.get("Content-Type", "application/json"),
            headers={k: v for k, v in resp.headers.items()
                     if k.lower() not in ("content-encoding", "transfer-encoding")},
        )

if __name__ == "__main__":
    port = int(sys.argv[1]) if len(sys.argv) > 1 else 8765
    app.run(host="127.0.0.1", port=port, debug=False)

在我的 C:\Users\Adimin\Documents\WindowsPowerShell\中添加了Microsoft.PowerShell_profile.ps1脚本。

# Auto-start Claude Code DeepSeek proxy
$proxyScript = "$env:USERPROFILE\.claude\deepseek-proxy.py"
$proxyRunning = Get-Process -Name python -ErrorAction SilentlyContinue | Where-Object { $_.CommandLine -like "*deepseek-proxy.py*" }
if (-not $proxyRunning) {
    Start-Process -WindowStyle Hidden python -ArgumentList $proxyScript, "8765"
}

并将 C:\Users\Admin\.claude\settings.json中的BASE_URL指向本地代理 http://127.0.0.1:8765。

后来我和opencode讲了我是改成了Tun模式才导致这样的情况,并让opencode帮我分析原因,它认为原因可能有2:

这很可能是巧合,Clash TUN 模式本身不会修改请求体中的 JSON 内容。
真正的原因更可能是:
1. Claude Code 自动更新到了 v2.1.154(构建时间 2026-05-28,就是昨天),新版本改变了 system prompt 的发送格式——把它放在了 messages 数组里作为 system 角色,而 DeepSeek API 不接受这种格式。这和 TUN 模式碰巧同时发生,让你误以为是 TUN 导致的。
2. 另一种可能:TUN 模式改变了路由。直连时请求命中的是 DeepSeek 国内节点,走 Clash 代理后命中了 DeepSeek 海外节点,两个节点的 API 校验严格程度不同——海外节点对 system 角色更严格。

所以,方案二就是回退到ClaudeCode的上一个版本并阻止其自动更新。

在powershell中运行:

npm install -g @anthropic-ai/claude-code@2.1.153

并在C:\Users\Admin\.claude\settings.json中,添加

  "ANTHROPIC_MODEL": "deepseek-v4-pro",(已有不用添加,添加下一行)
  "CLAUDE_CODE_DISABLE_AUTOUPDATER": "1"

就可以了。

四、总结

        Claude Code在2026-05-28更新了,DeepSeek API 支持 Anthropic 顶层的 system 参数,但不支持 messages 数组里出现 system 角色,而Claude Code 把 system prompt 放在了 messages 数组里导致报错。

        操作方式就是让Claude Code回退到上一个版本,并禁止其自动更新。

Powershell运行:

npm install -g @anthropic-ai/claude-code@2.1.153

settings.json中添加 "CLAUDE_CODE_DISABLE_AUTOUPDATER": "1"。

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "sk-***************************",
    "ANTHROPIC_BASE_URL": "http://127.0.0.1:8765",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1M]",
    "ANTHROPIC_DEFAULT_OPUS_MODEL_NAME": "deepseek-v4-pro",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1M]",
    "ANTHROPIC_DEFAULT_SONNET_MODEL_NAME": "deepseek-v4-pro",
    "ANTHROPIC_MODEL": "deepseek-v4-pro",
    "CLAUDE_CODE_DISABLE_AUTOUPDATER": "1"
  },

引入opencode解决问题的方法见下一篇博客

【Claude】Win11系统VSCode环境中Claude+Deepseek报错的全自动解决方式

五、二更&评论区QA整理

5.1、升降版本操作流程

VSCode升级

VSCode中claude code降级+禁止更新

CCSwitch升级

powershell中claude降级+禁止版本更新

见上文。

2026-05-29

ly13757760312要一直禁止更新吗,什么时候接触

青山入墨雨如画作者要一直禁止更新,等新版本稳定了再说吧

ly13757760312方案2运行npm install -g @anthropic-ai/claude-code@2.1.153没有用欸

青山入墨雨如画作者需要同时升级VSCode、CCSwitch版本,降低powershell中的claude版本(即运行上述代码),并将VSCode中的claude插件版本降低,然后重启电脑

PINKIZE确实可以解决,但是好像没法禁止自动更新,每次打开都要重新回退版本

青山入墨雨如画作者VSCode中的claude code插件可以禁止自动更新;powershell全局claude禁止自动更新需要给全局settings.json(C:\Users\Admin\.claude\settings.json)中添加settings.json中添加: "CLAUDE_CODE_DISABLE_AUTOUPDATER": "1"。

man_cth禁止自动更新好像没生效,有其他手段吗?

成殇Sir最后一行改成这个"DISABLE_AUTOUPDATER": "1"。

m0_71162461降级是可以解决的,降到153就行。此外需要注意如果使用vscode则需要看claude code for VS是否也自动更新到156了,如果也更新了则需要同步降级。

琎850vscode的这个怎么降级啊。

gznsjx到那个扩展里面,卸载右边那个向下的箭头有安装指定版本。

2401_86136646感谢兄弟和楼主,解决了,后来的兄弟们,如果用vscode按照这位楼主和我回复的这位兄弟操作就可以了。

gznsjx在编辑器用的,把编辑器的claude code插件自动更新给关了,然后重新下回153版本。

2403_89457125怎么阻止自动更新啊,回退到153版本后,我把powershell关掉重启然后又是新版本了。

青山入墨雨如画作者问问AI(比如opencode)看看能不能让它强制操作一下。

unkind_0218把Claude code放vscode里面了,原来是拓展也自动更新了,我说怎么方法二不好使,还要让vscode里面的拓展恢复之前的版本。

1a.vida上午九点多还能用,十点多就不行了。试了方法二,npm降级Claude,vs扩展用上个版本,都不行。最后也是让opencode写了本地代理的脚本ok了。

2301_81516641我直接按总结里搞得,但是过一会就又跳400了,再在powershell里执行npm install -g @anthropic-ai/claude-code@2.1.153就行了,有兄弟知道怎么回事吗?

2401_86676924因为自动更新没有关闭成功,版本回退后你试试在setting.json文件里再加一句"DISABLE_AUTOUPDATER": "1"。

JQi~当我回退 Claude Code v2.1.153时。使用vscode新建终端.cmd指向claude版本v2.1.153没问题,再次新建终端 .cmd指向变成claude版本v2.1.156 很奇怪。

2501_92039708我回退到153之后用了一会也自动更新到156了,但是依旧能正常用,报错没有了,这是什么原因?

青山入墨雨如画作者可能是ClaudeCode自动更新,可以在全局settings.json中加一行禁止自动升级的代码试试看~

JQi~方法一(推荐):禁用扩展自动更新 + 删除新版本扩展

# 1. 删除 v2.1.156 扩展目录
Remove-Item -Recurse -Force "$env:USERPROFILE\.vscode\extensions\anthropic.claude-code-2.1.156-win32-x64"

# 2. 回退 npm 全局包到 v2.1.153
npm install -g @anthropic-ai/claude-code@2.1.153

# 3. 重启 VS Code,确认版本
claude --version

m0_50544004退到150版本了,还是报错

m0_50544004电脑重启了下就好了

gxt19950304回退到2.1.153可以解决,那么接下来就看deepseek会不会更新来适配了

le120698我是只用了VS的插件加CC Switch。怎么处理?

weixin_73485221vs插件页面找到Claudecode,取消勾选自动更新。之后点击Claudecode插件下的设置按钮,选择“安装特定版本...",之后选个v2.1.155及之前的版本重新安装就行。

CIZI_把VS code里面的自动更新取消勾选,然后终端运行code --install-extension anthropic.claude-code@2.1.153就行了。

VRG_327但是把claude的默认编辑器改成vscode后,env里会有"EDITOR": "code",这时需要把 "CLAUDE_CODE_DISABLE_AUTOUPDATER": "1"加在"EDITOR": "code"后面,不然不知道为什么还是会自动更新。

weixin_41044245大神,采用您的方案一,需要回退版本吗?
1.我的CC v2.1.153版本有个content[].thinking的报错;
2.在v2.1.156版本messages[1]的报错,role: unknown variant
`system`.
请问这种情况下,您的方案一能一次性解决这2个BUG吗?

青山入墨雨如画作者我其实没打算推荐方案一,因为当时想的这个文章的性质是“attempt records”嘛,所以就把方案一也写上了,推荐用方案二。

2026-06-01

@-@怎么去拥有一道彩虹现在更新到2.1.159好像又可以了==,不知道是claude还是deepseek做了新操作

1a.vida好嘛,我真无语了,好不容易调好的又不能用了又得重新改回去

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐