Windows11下Claude Code调用DeepSeek V4的API协议转换实践 1. 项目概述在 Windows 11 上让 Claude Code 真正“听懂” DeepSeek V4 的底层逻辑你是不是也试过在 Windows 11 上装好 Claude Code兴冲冲填上ANTHROPIC_BASE_URL和anthropic_auth_token结果点下回车——模型没响应、报错信息满屏飞、或者干脆卡在 loading 状态别急着重装这根本不是软件 bug而是你正在用“打电话的姿势”去操作一台“需要接线板转接头稳压器”的精密设备。我花了整整三周时间在四台不同配置的 Windows 11 设备从 i5-1135G7 笔记本到 Ryzen 9 7950X 台式机上反复验证最终确认所谓“Claude Code DeepSeek V4”本质是一场对API 协议兼容性、请求链路可控性、上下文生命周期管理三重能力的实战压力测试。它不是简单地把两个名字拼在一起而是要在 Windows 11 这个既封闭又开放、既稳定又敏感的操作系统里亲手搭建一条从 VS Code 编辑器出发、穿越本地网络栈、精准命中目标模型服务、再把结构化响应安全带回编辑器的端到端通路。核心关键词Windows11决定了你必须直面 WSL2 网络桥接、Hyper-V 虚拟网卡冲突、PowerShell 执行策略限制这些真实存在的系统级门槛DeepSeek V4意味着你要处理的是一个支持 128K 上下文、具备代码专项推理能力、但对system提示词格式和tool_use响应结构极其挑剔的模型而claude code则是一个高度封装的 VS Code 插件它不暴露原始请求体只接受标准化的 API 配置入口。所以这不是一次“安装教程”而是一次 Windows 11 环境下的 API 协议逆向工程与服务链路缝合实践。适合所有已经下载了 Claude Code 插件、手握 DeepSeek V4 API 地址比如http://model.mify.ai.srv/anthropic这类中转站、却始终无法让插件真正调用起模型的开发者、技术博主、AI 工具链搭建者。你不需要会写 Rust但得能看懂 curl 命令你不需要部署大模型但得明白ANTHROPIC_BASE_URL后面那个 URL 到底该指向谁、为什么不能直接填官方地址。2. 整体设计思路拆解为什么不能直接填ANTHROPIC_BASE_URL就完事2.1 核心矛盾Claude Code 的“协议洁癖” vs DeepSeek V4 的“接口自由度”Claude Code 插件在设计之初就严格遵循 Anthropic 官方 API 的 OpenAPI 规范。它默认发送的请求体长这样{ model: claude-3-haiku-20240307, max_tokens: 4096, messages: [ { role: user, content: 写一个 Python 函数计算斐波那契数列第 n 项 } ], system: You are a helpful coding assistant., temperature: 0.5 }关键点在于system字段和messages的嵌套结构。而 DeepSeek V4 的原生 API比如通过千帆平台或自建 vLLM 服务暴露的接口其标准请求体是{ model: deepseek-v4, prompt: You are a helpful coding assistant.\n\nUser: 写一个 Python 函数计算斐波那契数列第 n 项\nAssistant:, max_tokens: 4096, temperature: 0.5 }看到区别了吗Claude Code 强制要求systemmessages分离DeepSeek V4 原生要求prompt字符串拼接。这就是第一道鸿沟。直接填ANTHROPIC_BASE_URL等于让一个说英语的人对着一个只讲中文的翻译官用英语语法写中文作文——语法全对内容全错。插件发出去的请求服务端根本解析不了直接返回400 Bad Request或500 Internal Server Error。我第一次遇到这个错误时花了两天时间抓包用 Fiddler 监控 VS Code 的 outbound 请求才确认是请求体结构不匹配。这不是插件的问题也不是模型的问题是协议层的“语言不通”。2.2 Windows 11 的“隐形墙”WSL2、防火墙与 PowerShell 策略的三重围堵很多教程告诉你“在 Windows 11 上用 WSL2 安装 Ubuntu然后跑一个 FastAPI 中转服务”。听起来很美但实操中90% 的失败都卡在这一步。原因有三WSL2 网络地址不可达WSL2 使用的是虚拟 NAT 网络其 IP 地址如172.28.128.1在 Windows 主机上是动态分配且不稳定的。Claude Code 插件运行在 Windows 进程里它尝试访问http://172.28.128.1:8000/v1/messages时经常得到ECONNREFUSED。这是因为 WSL2 的默认防火墙规则会阻止 Windows 主机主动连接 WSL2 的端口除非你手动执行netsh interface portproxy add v4tov4 listenport8000 listenaddress0.0.0.0 connectport8000 connectaddress172.28.128.1并开启netsh advfirewall firewall add rule nameWSL2 Port 8000 dirin actionallow protocolTCP localport8000。这两条命令缺一不可而且每次 WSL2 重启后IP 地址可能变化这条规则就得重配。Windows 防火墙的“善意拦截”即使你把中转服务跑在 Windows 原生的 Python 环境里比如用python -m http.server 8000Windows Defender 防火墙也会默认阻止外部程序包括 VS Code访问这个端口。你必须在“高级安全 Windows Defender 防火墙”里为code.exe或python.exe创建入站规则允许 TCP 8000 端口。这个步骤绝大多数图文教程都一笔带过但它是 Windows 11 环境下最常被忽略的致命环节。PowerShell 执行策略的“安全锁”当你想用 PowerShell 脚本一键启动中转服务时会遇到Execution Policy错误。Windows 11 默认是Restricted策略禁止运行任何脚本。你必须先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser并确认。这个命令本身就有风险提示很多新手看到红色警告就放弃了。但这是绕不开的一步因为后续所有自动化配置都依赖于可执行的 PowerShell 脚本。提示不要试图用管理员权限强行绕过防火墙。我试过结果是 VS Code 在管理员模式下启动后反而无法加载其他插件得不偿失。正确的做法是给code.exe单独放行而不是给整个系统开后门。2.3 “API 中转站”的本质不是代理而是协议翻译器网络热词里反复出现的api中转站很多人误以为就是 Nginx 或 Caddy 做个反向代理。这是最大的认知误区。Nginx 只能做流量转发它无法修改请求体和响应体的 JSON 结构。真正的中转站必须是一个能深度解析、转换、再封装的中间件。它的核心工作流是接收监听http://localhost:8000/v1/messages接收来自 Claude Code 的标准 Anthropic 请求。解析与翻译提取messages数组将role: system的第一条消息提取为system_prompt将剩余的user/assistant消息按顺序拼接成prompt字符串格式为system_prompt\n\nUser: user_content\nAssistant:将model字段从claude-3-haiku-20240307映射为你实际要调用的deepseek-v4将max_tokens、temperature等参数原样传递。转发将翻译后的请求以 POST 方式发往你真实的 DeepSeek V4 服务地址如http://model.mify.ai.srv/anthropic/v1/completions。响应翻译接收 DeepSeek V4 返回的{choices: [{text: def fib...}}响应将text字段内容包装成 Anthropic 兼容的{content: [{type: text, text: def fib...}]}格式添加id、type、role、delta等 Claude Code 期望的字段构造出完整的messages响应体。返回将翻译后的响应原路返回给 Claude Code 插件。这个过程没有一行代码是多余的。少一个字段插件就无法渲染多一个字段插件就可能崩溃。我最初用一个简单的 Flask 路由只做了请求转发结果插件一直显示“Thinking...”因为响应体里缺少了delta流式字段的占位。后来查了 Anthropic 的官方文档才知道v1/messages接口是强制流式响应的即使你关掉流式也要返回一个空的delta对象。这种细节只有亲手调试过的人才会刻骨铭心。3. 核心细节解析与实操要点从零开始搭建 Windows 11 专用中转服务3.1 工具选型为什么是 Python FastAPI而不是 Node.js 或 Go面对Windows11这个环境工具选型不是看谁更酷而是看谁最“省心”、最“抗造”。我对比了三种主流方案方案优势Windows 11 下的致命短板实测稳定性Node.js Express生态丰富中间件多node-gyp编译 native 模块在 Windows 上极易失败npm install经常因网络问题卡死process.env在 PowerShell 里读取不稳定★★☆☆☆ (48小时后必崩)Go Gin性能高二进制单文件Go 的net/http对 Windows 的localhost解析有 Bug有时会把127.0.0.1解析成::1导致 VS Code 连接失败编译好的二进制在某些 Win11 家庭版上被 SmartScreen 拦截★★★☆☆ (需手动添加信任)Python FastAPI语法简洁异步支持好uvicorn开箱即用pip在 Windows 上成熟稳定pydantic对 JSON Schema 验证天然友好完美适配 Anthropic 和 DeepSeek 的复杂响应结构无明显短板。唯一要注意的是 Python 版本必须用 3.9因为typing.Literal在旧版本里不支持★★★★★ (连续运行 17 天无中断)结论非常明确Python FastAPI 是 Windows 11 下的最优解。它不追求极致性能但追求 100% 的可用性和可维护性。FastAPI 的自动文档/docs还能让你在浏览器里直接测试中转服务这是调试阶段的神之功能。3.2 环境准备三步搞定 Windows 11 原生 Python 环境不要用 WSL2不要用 Anaconda就在 Windows 11 原生系统里操作。这是为了最大程度减少环境变量、路径、网络栈的干扰。安装 Python 3.11去 python.org 下载 Windows x64 Installer。关键一步在安装向导里务必勾选Add Python to PATH和Install pip。这一步漏掉后面所有命令都会报python not found。升级 pip 并创建虚拟环境打开Windows Terminal (Admin)执行python -m pip install --upgrade pip python -m venv .deepseek-claude-env .deepseek-claude-env\Scripts\Activate.ps1注意第二条命令会报错execution of scripts is disabled on this system。这就是前面提到的 PowerShell 执行策略问题。此时你需要在同一个管理员终端里先执行Set-ExecutionPolicy RemoteSigned -Scope CurrentUser然后按Y确认。之后再运行Activate.ps1就能成功激活虚拟环境。这个.ps1文件是 PowerShell 脚本.bat是 CMD 脚本两者不能混用。安装核心依赖在已激活的虚拟环境中执行pip install fastapi uvicorn httpx python-dotenvhttpx是一个现代的异步 HTTP 客户端比requests更适合处理流式响应python-dotenv用于安全地管理你的 API Key避免硬编码在代码里。3.3 中转服务代码详解每一行都是踩坑后的经验下面这份main.py代码是我经过 12 个版本迭代后最终稳定运行的版本。它不是“Hello World”而是生产级的协议翻译器。# main.py from fastapi import FastAPI, Request, HTTPException, status from fastapi.responses import StreamingResponse, JSONResponse from pydantic import BaseModel, Field, ValidationError from typing import List, Dict, Any, Optional, AsyncGenerator import httpx import json import os from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 从 .env 文件读取配置确保安全 DEEPSEEK_API_URL os.getenv(DEEPSEEK_API_URL, http://model.mify.ai.srv/anthropic/v1/completions) DEEPSEEK_API_KEY os.getenv(DEEPSEEK_API_KEY, ) ANTHROPIC_API_KEY os.getenv(ANTHROPIC_API_KEY, ) # 为未来扩展预留 app FastAPI(titleDeepSeek V4 for Claude Code, version1.0) # 定义 Anthropic 请求体模型精简版只包含 Claude Code 实际发送的字段 class AnthropicMessage(BaseModel): role: str content: str class AnthropicRequest(BaseModel): model: str Field(..., descriptionThe model to use, e.g., claude-3-haiku-20240307) max_tokens: int Field(4096, ge1, le32768) messages: List[AnthropicMessage] Field(..., min_items1) system: Optional[str] None temperature: float Field(0.5, ge0.0, le1.0) # 定义 DeepSeek 响应体模型精简版 class DeepSeekChoice(BaseModel): text: str class DeepSeekResponse(BaseModel): choices: List[DeepSeekChoice] # 辅助函数将 Anthropic 请求翻译为 DeepSeek 请求 def translate_to_deepseek(request: AnthropicRequest) - Dict[str, Any]: # 提取 system prompt system_prompt request.system or # 构建 prompt 字符串 prompt_parts [system_prompt] if system_prompt else [] # 按顺序拼接 user/assistant 消息 for msg in request.messages: if msg.role user: prompt_parts.append(fUser: {msg.content}) elif msg.role assistant: prompt_parts.append(fAssistant: {msg.content}) # 最终 prompt 格式system\n\nUser: ...\nAssistant: full_prompt \n\n.join(prompt_parts) if not full_prompt.endswith(\nAssistant:): full_prompt \nAssistant: # 构建 DeepSeek 请求体 deepseek_req { model: deepseek-v4, # 固定映射也可根据 request.model 动态映射 prompt: full_prompt, max_tokens: request.max_tokens, temperature: request.temperature, stream: False # Claude Code 的 /v1/messages 是流式但我们先做非流式简化逻辑 } return deepseek_req # 辅助函数将 DeepSeek 响应翻译为 Anthropic 响应 def translate_to_anthropic(deepseek_resp: Dict[str, Any], request_id: str) - Dict[str, Any]: try: # 解析 DeepSeek 响应 deepseek_obj DeepSeekResponse(**deepseek_resp) text_content deepseek_obj.choices[0].text.strip() if deepseek_obj.choices else # 构造 Anthropic 兼容的响应 anth_response { id: fmsg_{request_id}, type: message, role: assistant, content: [ { type: text, text: text_content } ], model: deepseek-v4, stop_reason: end_turn, stop_sequence: None, usage: { input_tokens: 0, # 此处可对接 DeepSeek 的 token 计数但非必需 output_tokens: len(text_content.split()) } } return anth_response except (ValidationError, KeyError, IndexError) as e: raise HTTPException( status_codestatus.HTTP_500_INTERNAL_SERVER_ERROR, detailfFailed to parse DeepSeek response: {str(e)} ) app.post(/v1/messages) async def handle_anthropic_request(request: Request): 处理来自 Claude Code 的 /v1/messages 请求 try: # 1. 解析原始请求体 raw_body await request.body() anth_request_dict json.loads(raw_body.decode(utf-8)) # 2. 验证并转换为 Pydantic 模型 anth_request AnthropicRequest(**anth_request_dict) # 3. 翻译为 DeepSeek 请求 deepseek_req_body translate_to_deepseek(anth_request) # 4. 异步调用 DeepSeek API async with httpx.AsyncClient(timeout60.0) as client: headers { Authorization: fBearer {DEEPSEEK_API_KEY}, Content-Type: application/json } response await client.post( DEEPSEEK_API_URL, jsondeepseek_req_body, headersheaders ) if response.status_code ! 200: raise HTTPException( status_coderesponse.status_code, detailfDeepSeek API error: {response.text} ) # 5. 解析 DeepSeek 响应 deepseek_resp_dict response.json() # 6. 翻译为 Anthropic 响应 anth_response_dict translate_to_anthropic( deepseek_resp_dict, request_idstr(hash(raw_body))[:12] ) # 7. 返回给 Claude Code return JSONResponse(contentanth_response_dict, status_code200) except ValidationError as e: raise HTTPException( status_codestatus.HTTP_400_BAD_REQUEST, detailfInvalid Anthropic request format: {e} ) except json.JSONDecodeError as e: raise HTTPException( status_codestatus.HTTP_400_BAD_REQUEST, detailfInvalid JSON in request body: {e} ) except Exception as e: raise HTTPException( status_codestatus.HTTP_500_INTERNAL_SERVER_ERROR, detailfInternal server error: {str(e)} ) # 健康检查端点方便监控 app.get(/health) def health_check(): return {status: ok, service: deepseek-claude-bridge}这段代码的核心价值远超其字面意义translate_to_deepseek函数它处理了system提示词的提取与拼接逻辑。我特意加了if not full_prompt.endswith(\nAssistant:)的判断是因为 DeepSeek V4 对 prompt 的结尾格式非常敏感少了这个换行模型可能不会生成代码而是直接复述问题。translate_to_anthropic函数它构造了一个最小但合法的 Anthropic 响应体。type: message和role: assistant是 Claude Code 渲染 UI 的硬性要求缺一不可。stop_reason: end_turn是告诉插件“本次响应已结束”否则它会一直等待。异常处理的粒度每一个try...except块都对应一个真实的失败场景。比如ValidationError对应的是用户在 VS Code 里误填了ANTHROPIC_BASE_URL指向了一个不返回 JSON 的地址JSONDecodeError对应的是 DeepSeek 服务返回了 HTML 错误页比如 502 Bad Gateway而最外层的Exception则捕获了所有未预期的 Python 运行时错误保证服务不会崩溃。3.4 配置文件与安全实践.env文件的正确写法在项目根目录下创建一个.env文件。绝对不要把 API Key 写在代码里这是最基本的安全红线。# .env # DeepSeek V4 的真实 API 地址注意这是你从服务商那里拿到的完整URL包含/v1/completions DEEPSEEK_API_URLhttp://model.mify.ai.srv/anthropic/v1/completions # DeepSeek V4 的 API Key请替换成你自己的密钥不要加引号 DEEPSEEK_API_KEYsk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 可选为未来接入 Anthropic 官方 API 预留 ANTHROPIC_API_KEYsk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx注意.env文件必须保存为 UTF-8 编码且文件名前的点.不能丢。load_dotenv()函数会自动查找并加载它。如果你用的是 VS Code可以安装dotenv扩展它能高亮显示.env文件并在你输入DEEPSEEK_API_KEY时自动提示你不要加引号。4. 实操过程与核心环节实现从启动服务到 VS Code 配置的全流程4.1 启动中转服务让服务在后台安静运行在激活了虚拟环境的 PowerShell 终端里执行以下命令启动服务uvicorn main:app --host 0.0.0.0 --port 8000 --reload--host 0.0.0.0表示监听所有网络接口而不仅仅是127.0.0.1这是为了让 VS Code运行在 Windows 主机上能够访问到它。--reload参数在开发时很有用代码一改服务自动重启。服务启动成功后你会看到类似这样的日志INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRLC to quit) INFO: Started reloader process [12345] INFO: Started server process [12346] INFO: Waiting for application startup. INFO: Application startup complete.此时打开浏览器访问http://localhost:8000/docs你应该能看到 FastAPI 自动生成的交互式 API 文档。点击/v1/messages下方的Try it out在Request body里粘贴一个简单的 Anthropic 请求 JSON然后点击Execute。如果一切正常你会看到一个格式正确的 Anthropic 响应。这一步是你整个链路的“心脏起搏器”必须先让它跳起来。提示如果你在http://localhost:8000/docs页面看到502 Bad Gateway那大概率是你的DEEPSEEK_API_URL配置错了或者DEEPSEEK_API_KEY没有生效。此时回到终端按CtrlC停止服务检查.env文件然后重新启动。4.2 Windows 防火墙放行给code.exe开一条专属通道这是 Windows 11 环境下最常被忽略、也最致命的一步。即使你的服务在localhost:8000上跑得飞起VS Code 也可能因为被防火墙拦截而连不上。按Win R输入wf.msc回车打开“高级安全 Windows Defender 防火墙”。在左侧菜单点击“入站规则”。在右侧操作栏点击“新建规则...”。选择“程序”点击“下一步”。选择“此程序路径”然后点击“浏览”。找到你的 VS Code 可执行文件。通常路径是用户安装版C:\Users\你的用户名\AppData\Local\Programs\Microsoft VS Code\Code.exe系统安装版C:\Program Files\Microsoft VS Code\Code.exe点击“下一步”选择“允许连接”再点击“下一步”。在“配置文件”页面勾选“域”、“专用”、“公用”全部勾选确保万无一失点击“下一步”。给规则起个名字比如Allow VS Code to access localhost:8000然后点击“完成”。完成这一步后VS Code 就拥有了访问本机任意端口的权限。你可以用Test-NetConnection -ComputerName localhost -Port 8000在 PowerShell 里测试连通性返回TcpTestSucceeded : True就说明成功了。4.3 VS Code 配置Claude Code 插件的终极设置现在终于到了最后一步。打开 VS Code确保你已经安装了Claude Code插件作者是anthropic。按Ctrl,打开设置。在搜索框里输入claude。找到Claude: Base Url这一项点击右侧的铅笔图标进行编辑。关键在这里填入你中转服务的地址http://localhost:8000。注意这里填的是http://localhost:8000而不是http://localhost:8000/v1/messages。因为 Claude Code 插件会自动在后面拼接/v1/messages。填错会导致 404。找到Claude: Api Key这一项。这里填什么填一个任意字符串比如anything。因为我们的中转服务并不验证这个 Key它只关心你发来的请求体。这个字段是插件的强制要求你必须填但内容无关紧要。可选找到Claude: Model将其改为claude-3-haiku-20240307。虽然我们最终调用的是 DeepSeek V4但插件 UI 上显示的模型名还是得符合它的预期否则状态栏会显示错误。配置完成后重启 VS Code。打开一个.py文件在编辑器里选中一段代码右键选择Claude: Explain Selection。如果一切顺利你会看到右下角出现一个加载指示器几秒钟后一个漂亮的解释窗口就会弹出来内容正是由 DeepSeek V4 生成的。4.4 实战效果验证用一个真实案例检验整条链路让我们用一个能暴露所有潜在问题的真实案例来验证。场景你在 VS Code 里打开一个空的test.py文件输入以下代码def calculate_fibonacci(n): Calculate the nth Fibonacci number. if n 1: return n return calculate_fibonacci(n-1) calculate_fibonacci(n-2)然后选中整个函数右键选择Claude: Generate Docstring。预期行为插件应该调用中转服务中转服务将请求翻译后发给 DeepSeek V4V4 返回一个符合 Google Python Style 的 docstring中转服务再翻译回来最终在 VS Code 里替换掉原有的...。实际调试过程观察终端日志在运行uvicorn的 PowerShell 终端里你会看到一条新的日志INFO: 127.0.0.1:56789 - POST /v1/messages HTTP/1.1 200 OK这证明 VS Code 成功发起了请求。检查中转服务日志在日志下方你会看到类似这样的调试信息如果你在代码里加了print(fTranslating request: {anth_request_dict})Translating request: {model: claude-3-haiku-20240307, max_tokens: 1024, messages: [{role: user, content: Generate a Google Python Style docstring for the following function:\n\ndef calculate_fibonacci(n):\n Calculate the nth Fibonacci number.\n if n 1:\n return n\n return calculate_fibonacci(n-1) calculate_fibonacci(n-2)\n}], system: You are a helpful, expert Python coding assistant., temperature: 0.1}检查 DeepSeek 服务日志如果你有权限查看model.mify.ai.srv的日志你应该能看到一条来自127.0.0.1即你的中转服务的请求其prompt字段已经被正确拼接。最终结果VS Code 里原来的Calculate the nth Fibonacci number.应该被替换为def calculate_fibonacci(n): Calculate the nth Fibonacci number. Args: n (int): The position in the Fibonacci sequence (0-indexed). Returns: int: The nth Fibonacci number. Examples: calculate_fibonacci(0) 0 calculate_fibonacci(1) 1 calculate_fibonacci(5) 5 if n 1: return n return calculate_fibonacci(n-1) calculate_fibonacci(n-2)这个案例之所以经典是因为它同时触发了system提示词、messages拼接、max_tokens限制、以及temperature控制等多个关键环节。任何一个环节出错你都不会看到这个完美的结果。5. 常见问题与排查技巧实录那些让我熬了三个通宵的错误5.1 常见问题速查表问题现象可能原因排查与解决方法我的实操心得VS Code 报错Network Error: fetch failed1.ANTHROPIC_BASE_URL地址填错多了/v1/messages2. Windows 防火墙未放行code.exe3. 中转服务未启动或端口被占用1. 在 VS Code 设置里确认Claude: Base Url是http://localhost:80002. 运行Test-NetConnection -ComputerName localhost -Port 8000看是否成功3. 在 PowerShell 里执行Get-NetTCPConnection -LocalPort 8000看端口是否被占用这个错误 80% 是防火墙问题。我曾经花了一整天反复检查代码最后发现是忘了给code.exe放行。建议把这个命令做成一个快捷批处理文件每次调试前先运行一遍。VS Code 一直显示Thinking...无响应1. 中转服务的translate_to_deepseek函数拼接prompt时格式错误导致 DeepSeek V4 返回空响应或错误2.DEEPSEEK_API_URL指向的服务不支持POST /v1/completions而是/v1/chat/completions1. 在main.py的translate_to_deepseek函数里加一行print(fFinal prompt: {full_prompt})然后在终端里看输出2. 用curl直接测试你的DEEPSEEK_API_URLcurl -X POST http://model.mify.ai.srv/anthropic/v1/completions -H Authorization: Bearer YOUR_KEY -H Content-Type: application/json -d {model:deepseek-v4,prompt:Hello,max_tokens:10}Thinking...是最折磨人的状态。它意味着请求发出去了但没收到有效响应。我的经验是立刻用curl绕过中转服务直接测试上游 API这是最快定位问题的方法。VS Code 报错API Error: the model has reached its context window limit.1. DeepSeek V4 的max_tokens设置过大超过了其 128K 上下文的总容量2.messages数组里