惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
MIT News - Artificial intelligence
腾讯CDC
IT之家
IT之家
Microsoft Azure Blog
Microsoft Azure Blog
M
Microsoft Research Blog - Microsoft Research
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
L
LangChain Blog
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
Recent Announcements
Recent Announcements
S
SegmentFault 最新的问题
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
T
The Blog of Author Tim Ferriss
罗磊的独立博客
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
D
DataBreaches.Net
爱范儿
爱范儿
Schneier on Security
Schneier on Security
P
Palo Alto Networks Blog
Spread Privacy
Spread Privacy
Hugging Face - Blog
Hugging Face - Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
P
Privacy & Cybersecurity Law Blog
博客园_首页
T
Threat Research - Cisco Blogs
I
InfoQ
有赞技术团队
有赞技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recorded Future
Recorded Future
量子位
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
Cyberwarzone
Cyberwarzone
B
Blog
C
Check Point Blog
P
Proofpoint News Feed
S
Securelist
A
Arctic Wolf

博客园_首页

[翻译] 为什么我要用 C# 构建数据库引擎 云原生 CI/CD 平台架构设计 模板方法模式实战:重构Agent工具审批,告别重复代码 Ubuntu修改主机名操作指南 [MAF的Agent管道详解-03]连接LLM的IChatClient对象 《HelloGitHub》第 122 期 AI Agent 到底是做什么的?优势在哪里? 完整学习LLM(六):上下文窗口是什么,为什么模型会忘东西 和AI一起搞事情#6. 如何实现AI生图文字可编辑? 洛谷-P11105 [ROI 2023] 解密 题解 入门:我的第一个Vibe Coding实践程序 【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (2)--- On-Policy Distillation OpenHuman、OpenClaw、Hermes Agent 傻傻分不清楚?一篇说清三者定位 一个前端股票行情 SDK 的开源进化:从周刊收录到 v1.10.0 Claude Code 装了一堆 Skill,用了三个月,我删掉了 80% Claude Code Skill的介绍与使用 AI 漫剧账号运营教程 Hadoop(CDH6、CDP7)在Qwen3.7大模型训练中的作用,(含部署、运行操作步骤) Dify — 创建聊天机器人 -- 知识库 未来十年的数据工程:从 Modern Data Stack 到 Data Engineering Harness Java 泛型解析太痛苦?你可能需要一枚「蛋」 RAG系列:#5 RAG中的11种分块策略 看完《低智商犯罪》,学习Cypher构建知识图谱 临时邮箱的实现原理 记录一下我的 Gradle 开发环境配置过程 使用容器提供postgresql RESTful API服务 在Vue/Nuxt、React/Next/TanstackStart、RazorPages折腾一圈后,还是回到了Blazor,但这回有SSR+HTMX+Alpine的加持 把坏运气关在门外:哈希的随机化之路 agent工作模式之ReAct实战 元数据驱动开发 - 面向对象编程思想的补充 计算机科学/数据科学/人工智能/安全笔记 2026.3 前端包管理咋选?我从npm叛逃到pnpm的血泪史(附避坑指南) 深入 .NET AI Agent 开发:利用 Microsoft.Agents.AI 提取思考、调用工具与执行脚本 vibe coding(二)Where you go:一个微型 windows 桌面覆盖工具 [MAF的Agent管道详解-02]IChatClient管道如何完美连接大模型? [送码] 用 AI Coding 做了一个 App,谈谈 AI Coding 的真实体验 Claude Code 9 大神级 Skills,开发效率直接翻倍(安装、使用场景、踩坑经验) Claude Code 如何压缩上下文:Microcompact、Prompt Cache 与 cache_edits 工程拆解 Docker--Docker引擎与镜像相关命令 AScript定制left/right join查询语法 - rockey627 【学习笔记】《Python编程 从入门到实践》第3章:Python列表完全指南——创建、修改、删除与排序 - lunzi_fly PolyMarket Ghost Fills(幽灵订单)探究 - ACai_sec 面试官:说一下 Agent 的常见范式,如何选型? - 一枫说码 基于ONNXRuntime C#实现的高性能YOLO推理框架 基于 SkiaSharp 的 WPF & AvaloniaUI 极简动图播放方案 贩卖焦虑的时代,我终于接住了真实的焦虑 西安交大最新综述!一文带你读懂大模型智能体及其组网与安全 【Application Insights】采样率对Function App日志收集的影响和解决方法 Excel考勤公式-上班与休息日 完整学习LLM(五):Embedding是什么,为什么文本能变成向量 深度拆解 OpenCoWork:一个本地多智能体桌面平台的架构设计与实现 在影子里验证比较对象:随机指纹和哈希的数学原理 mysql备份恢复详解 HAProxy 学习总结 Mysql事物的持久性及原子性 应用内隐私信息被窥视?防窥保护自动感知一键防护 uni-app 实现视频聊天、屏幕分享,支持Android、HarmonyOS、iOS 做共享目录实时同步,踩过这些坑 华为公司发布半导体演进新范式 - “韬(τ)定律”(Tau Law) Linux时区修改为CST Go 语言入门学习笔记基础版 给热水器装上“电量显示”:用 Shelly Gen4 脚本实现零改装水量预测 踩坑实录:接口正常Feign调用字段值为空 耿同学学术打假,就是学术版《狂人日记》;学术打假,就是清扫垃圾 浙江事业编笔试上周出分!面试进入倒计时,该如何高效冲刺 - 里奥不吃奥利奥 FastApiAdmin 后端接口开发好了,前端管理界面怎么调用与显示? 我写了 50 个 Claude Code Skill 才发现,前 30 个都白写了 告别 "cd /var/log" !用 journalctl 统一掌控 Linux 日志 我用自己的微信聊天记录,微调了一个“数字分身” AI运动APP开发的常见问题集锦一 复盘梳理-如何深入并抽象 告别手动复制!公众号文章批量导出工具,极致提升内容运营效率 【学习笔记】《Python编程 从入门到实践》第2章:变量命名规则、字符串操作与数值类型详解 Docker--Docker简介及系统架构 别再瞎搞 AI 了!大厂AI业务落地的五个关键环节!(建议新手直接照搬) [MAF的Agent管道详解-01]塑智能体边界,从AIAgent抽象类开始 平台智能化到了分水岭:为什么配置代码化才是 AI Coding 的下一代接口 P.4文本统计工具 高光谱拼接算法(二)Harris 角点探测 - 哥布林学者 Claude Code “悄悄”装了 Python 包?别再让它“投错胎”了 - only赟 影刀 vs 八爪鱼 RPA:到底选哪个?一篇讲透 AI Coding开始进入第四个时代,我还没上车呢! 完整学习LLM(四):Token是什么 【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (1)---基础 LitCTF2026web部分wp CAD子系统,是自研还是外包? 什么是教程地狱?5个信号说明你已经陷入(附3步摆脱方法) polygon出题教程 Manim物理模拟:别自己写欧拉了! AI 学习笔记:Agent 的应用演示 - 凌杰 分享一个CAN报文编辑器软件 洛谷P13016 [GESP202506 六级] 最大因数 MiniCPM-V 4.6 部署实战:基于 GPUStack 与 SGLang 的端侧多模态模型部署 用 FRP 打通云服务器与本地 Ubuntu,让 Codex 远程调试本地硬件 软考 - 架构设计师 知识点总结 给 FastApiAdmin 加个“会议纪要”模块,我把后端二次开发的坑踩了个遍 聊一聊 MES系统如何实现多种标签打印并支持不同打印机 2026第四届LitCTF网络安全挑战赛Pwn的wp 断尺问题:戴德金分割现实悖论 给句子做个“语义审计”:从词向量到句子向量的方法论
DeepSeek V4 + Claude Code thinking mode 400 错误修复方案
xyh0703 · 2026-05-28 · via 博客园_首页

DeepSeek V4 + Claude Code thinking mode 400 错误修复方案

问题描述

使用 DeepSeek V4 Pro / V4 Flash 的 thinking mode + tool calls 时,第一轮工具调用后的每次请求都返回 400 错误

API Error: 400 The `content[].thinking` in the thinking mode must be passed back to the API.

根因

Claude Code  →  DeepSeek API(返回 reasoning_content / thinking 块)
                ↓
Claude Code 保存对话历史时丢弃非标准的 thinking 字段
                ↓
下一轮请求 → DeepSeek API:检测到 assistant 消息缺少 thinking 块 → 400

DeepSeek V4 要求 multi-turn 对话中,每个 role: assistant 的消息必须保留 thinking 块。Claude Code / cc-switch 在序列化历史时把它丢弃了。

解决方案

在 Claude Code 和 DeepSeek API 之间插入一个本地 Node.js 代理,自动补全被丢弃的 thinking 字段。

拓扑

Claude Code → cc-switch → 本地代理 (127.0.0.1:15722) → api.deepseek.com
                               ↑
                        注入 thinking 块

步骤

1. 创建代理脚本 ds-proxy.js

const http = require('http');
const { Readable } = require('stream');

const DEEPSEEK_BASE = 'https://api.deepseek.com';
const PORT = 15722;

function fixMessages(data) {
    if (!data.messages && !Array.isArray(data.messages)) return;
    for (const msg of data.messages) {
        if (msg.role !== 'assistant') continue;
        if (Array.isArray(msg.content)) {
            const hasThinking = msg.content.some(b => b.type === 'thinking');
            if (!hasThinking) {
                msg.content.unshift({ type: 'thinking', thinking: '' });
            }
        } else {
            msg.reasoning_content = msg.reasoning_content || '';
        }
    }
}

const server = http.createServer(async (req, res) => {
    console.log(`${req.method} ${req.url}`);
    res.setHeader('Access-Control-Allow-Origin', '*');

    if (req.method === 'OPTIONS') {
        res.writeHead(204);
        res.end();
        return;
    }

    if (req.method === 'GET') {
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify({ id: 'root', object: 'list' }));
        return;
    }

    if (req.method !== 'POST') {
        res.writeHead(404);
        res.end('Not Found');
        return;
    }

    let body = '';
    req.on('data', chunk => body += chunk);
    req.on('end', async () => {
        try {
            const data = JSON.parse(body);
            fixMessages(data);

            const target = DEEPSEEK_BASE + req.url;
            console.log('->', target);

            const apiRes = await fetch(target, {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'Authorization': req.headers.authorization,
                    'anthropic-version': req.headers['anthropic-version'] || ''
                },
                body: JSON.stringify(data)
            });

            console.log('<-', apiRes.status);
            const headers = {};
            apiRes.headers.forEach((v, k) => { headers[k] = v; });
            res.writeHead(apiRes.status, headers);

            if (apiRes.body) {
                Readable.fromWeb(apiRes.body).pipe(res);
            } else {
                res.end();
            }
        } catch (err) {
            console.error('Proxy error:', err.message);
            res.writeHead(500);
            res.end(JSON.stringify({ error: 'Proxy Error: ' + err.message }));
        }
    });
});

server.listen(PORT, () => {
    console.log('DS4 Proxy on http://127.0.0.1:' + PORT);
});

2. 启动代理

node ds-proxy.js

保持在后台运行。

3. 配置 cc-switch

DeepSeek provider 的 Base URL 设为:

http://127.0.0.1:15722/anthropic

或跳过 cc-switch,直连代理:

$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:15722/anthropic"
$env:ANTHROPIC_API_KEY = "你的DeepSeek API Key"
claude

4. 重启 Claude Code

代理处理逻辑

场景 操作
Anthropic 格式(content 为数组) 在 content 最前面插入 {type:"thinking",thinking:""}
OpenAI 格式 注入 reasoning_content: ""
连通性检测(GET) 返回 {"id":"root","object":"list"} 模拟 API

参考