cocodot
← Back to guides
Local card declined for overseas AI? cocodot: one card + one key
接入Updated 2026-09

在 Cline / Continue / Roo / ZCode 里接第三方模型供应商:配置、避坑、验证(2026)

九成"接不上"和"接上了但很怪"的案例,根因只有两个:base_url 的尾巴填错一格,以及模型名是猜的而不是从模型列表里查的。这篇给出四种客户端的配置位对照、可直接复制的配置片段与 curl,以及接通之后必须跑的验证:模型身份、usage 一致性、长上下文完整性、工具调用、协议专有字段有没有被静默丢弃。

TL;DR: 九成"接不上"和"接上了但很怪"都出在两处:base_url 的尾巴多填或少填了一格,以及模型名是凭印象写的而不是从供应商的模型列表里查来的。规则是,OpenAI 兼容客户端会自己在你填的 base_url 后面拼 /chat/completions,所以填到 /v1 为止;而 Anthropic 原生侧的 ANTHROPIC_BASE_URL 不带 /v1,客户端会自己拼 /v1/messages。Cline、Roo、Continue 走 OpenAI 兼容,Claude Code 与 ZCode 这类客户端走 Anthropic 原生;同一把 key、同一个供应商,走这两条路得到的能力可以不一样,这是本文最值得记住的一件事。接通不等于接对:换任何供应商都该跑一遍验证,模型身份回声、usage 一致性、长上下文针尖测试、工具调用完整性、协议专有字段是否被静默丢弃。最后一条最少人做也最能说明问题:同一段消息带与不带专有内容块,如果两次的 input_tokens 完全一样,那部分内容就是在中间被丢掉了。

1. "接不上"的九成原因,只有两件事

九成"接不上"和"接上了但很怪"的案例,根因不在模型,在两个地方:base_url 的尾巴填错了一格,以及 model 名是你猜的而不是从供应商的模型列表里拿的。这两件事各花三十秒就能查清,却能省掉一整个下午。第二件要记住的是,不同客户端对同一个供应商用的是不同协议:Cline、Roo、Continue 走 OpenAI 兼容的 chat completions 路径,Claude Code 和它的同类客户端走 Anthropic 原生的 messages 路径。同一把 key、同一个供应商,走这两条路得到的能力可以是不一样的,这是本文里最值得你记住的一件事,后面会给出三十秒的自测方法。第三,接通不等于接对。任何第三方供应商接上之后,你都应该跑一遍验证:模型身份、上下文完整性、工具调用、usage 一致性。不验证,你就是在用感觉判断"今天是不是变笨了",而感觉是最不可靠的仪器。下面是可以直接抄的部分。

2. 四个客户端的配置位对照

Cline 选 OpenAI Compatible,Base URL 填到 /v1 为止,模型名要手填并且先用模型列表接口查一次;它最高频的坑是尾部多一个斜杠,或者多填了 /chat/completions。Roo Code 与 Cline 同源,坑完全一样,另外注意它默认开并行工具调用。Continue 在配置里把 provider 写成 openai 并给出 apiBase,同样填到 /v1 为止,模型名写在 model 字段;它最容易漏的是 contextLength,不设的话长文件在本地就被截断了,看起来像模型记不住。ZCode 和 Claude Code 这类客户端走 Anthropic 原生,Base URL 填到 /api/ai 这一层、不带 /v1,模型名用 claude 开头的名字或供应商代号;它最高频的坑是把 OpenAI 那条 base_url 直接搬过来。下面是 Continue 的配置片段,放在用户目录下的 .continue/config.yaml 里。

Continue 的配置片段(~/.continue/config.yaml)
models:
  - name: 我的第三方供应商
    provider: openai
    apiBase: https://cocodot.co/api/ai/v1
    apiKey: 你的-key
    model: 从 /v1/models 查到的准确 id
    defaultCompletionOptions:
      contextLength: 200000
      maxTokens: 8192
    requestOptions:
      timeout: 600000

3. Claude Code / ZCode 系客户端:三个环境变量

Claude Code 系客户端(ZCode 同理)不需要改配置文件,三个环境变量就够。注意 ANTHROPIC_BASE_URL 不带 /v1,客户端会自己在后面拼 /v1/messages,这是与 OpenAI 兼容路径最容易混淆的一处:同一个供应商,OpenAI 侧填到 /api/ai/v1,Anthropic 侧填到 /api/ai。填错的表现通常是一个没有任何说明的 404,而不是提示你地址写错了。模型名同样建议先查一次供应商的模型列表再填:写一个不存在的名字,轻则 404,重则被静默回退到默认模型,而后者更危险,你会以为自己一直在用旗舰。另外这三个变量是进程级的,写进当前终端只对这个终端有效,要长期用就写进你的 shell 配置文件;如果你同时还装着官方客户端,记得确认没有别的地方也在设同名变量,两处冲突时以后设的为准,排查起来很费时间。

Claude Code / ZCode 只需要三个环境变量
export ANTHROPIC_BASE_URL="https://cocodot.co/api/ai"
export ANTHROPIC_AUTH_TOKEN="你的-key"
export ANTHROPIC_MODEL="你要用的模型名"

4. base_url 的斜杠地狱:404 大多来自这里

这是投诉量第一名,而且报错信息通常毫无帮助,就是一个干巴巴的 404。规则是这样的:OpenAI 官方 SDK 以及所有仿照它的客户端,会把你填的 base_url 当作前缀,自己在后面拼 /chat/completions。所以填到 /api/ai/v1 是对的,实际请求会打到 /api/ai/v1/chat/completions;末尾多带一个斜杠,多数客户端会归一化、少数会拼出双斜杠,属于看运气;只填到 /api/ai,会被拼成 /api/ai/chat/completions,404;把完整的 /api/ai/v1/chat/completions 填进去,会拼出两遍 chat/completions,同样 404。判断方法只有一个:别猜,用 curl 打一次模型列表。这条命令返回一个 JSON 列表,就说明 base_url 的前缀是对的;对多数供应商它同时还验了鉴权(有的供应商模型目录本身公开,那它只验前缀)。返回里 data 数组每一项的 id,就是你该填进客户端的模型名,不要凭印象自己写一个名字。

一条命令同时验前缀和鉴权
curl -s https://cocodot.co/api/ai/v1/models \
  -H "Authorization: Bearer 你的-key" | head -c 500

5. 鉴权头、流式 usage 与超时:三个最常被忽略的设置

第一,鉴权头是两套写法。OpenAI 兼容侧用 Authorization 头带 Bearer 前缀;Anthropic 原生侧,官方 SDK 默认发的是 x-api-key,并且会带一个 anthropic-version 头。写得好的中转两种都收,但如果你手写 curl 去测 messages 接口却只给了 Authorization,而对方只认 x-api-key,你会拿到 401 并误判成"key 无效",所以手写测试时两个头都带上最省事。第二,想在流式里拿到 usage,OpenAI 侧必须显式打开:请求体里把 stream 设成 true 的同时,还要把 stream_options 里的 include_usage 也设成 true。不加这一项,流式响应的最后一个 chunk 里不会有 usage,你就没法核对 token、也没法算缓存命中率;很多人抱怨"中转不返回 usage",实际是自己没开这个开关。第三,超时要分开设。推理型模型可能在首字节之前静默思考很久,如果你的客户端把总超时和首字节超时设成同一个较小的值,长任务会被自己人掐断,看起来像供应商不稳定。Continue 里设 requestOptions 下的 timeout,Cline 在高级设置里有 Request Timeout,一律往大了给,十分钟起。

手写测 Anthropic 原生端点:两个鉴权头都带上最省事
curl -s https://cocodot.co/api/ai/v1/messages \
  -H "x-api-key: 你的-key" \
  -H "Authorization: Bearer 你的-key" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"你的模型名","max_tokens":64,
       "messages":[{"role":"user","content":"回复两个字:收到"}]}'

6. 接上之后怎么验证没被降智(第一到第三步)

以下五步总共不到十分钟,建议每换一个供应商都跑一遍,并把结果记下来当基线。第一步,模型身份回声:发一次非流式请求,看响应体里的 model 字段是不是你请求的那个,以及 id 前缀是否符合该厂商的格式;字段对不上,后面的都不用测了。第二步,usage 一致性:把完全相同的请求体连发两次,对比 prompt_tokens(Anthropic 侧看 input_tokens),两次必须完全相等。如果不相等,说明有人在你的请求里追加了动态内容,比如注入的系统提示词或时间戳。这一条三秒就能测,而且比任何"我感觉它变笨了"都硬。第三步,长上下文完整性:造一段五万到六万 token 的填充文本,在大约 30% 的位置埋一句独一无二的口令,比如"紫色犀牛的编号是 7391",然后在末尾问"紫色犀牛的编号是多少"。答不出来,通常是中间被截断了,而不是模型笨。这个测试要埋在 30% 到 50% 的位置,别埋在开头或结尾,那两处即使被截断也答得出来。

7. 验证的后半段:工具调用与协议专有字段(第四到第六步)

第四步,工具调用完整性:定义两个函数,提一个需要同时调用两个的问题,看是否返回并行的 tool_calls;再定义一个带嵌套对象和枚举的 JSON Schema,看返回的参数是否合法。工具调用是最容易在协议转换中丢字段的地方。第五步,协议专有字段有没有被静默丢弃,这是最反直觉、也最少人测的一条。当一个中转把 Anthropic 请求翻译成 OpenAI 格式再转发时,Anthropic 协议独有的内容块(比如缓存标记 cache_control、文档块)在翻译过程中没有对应字段,就会被丢掉。关键在于:它不报错。你的请求返回 200,内容看起来正常,只是那部分东西根本没送到模型面前。自测方法是同一段消息,一次带上专有内容块,一次不带,对比 input_tokens;如果两次完全一样,那部分内容就是被丢了,因为它压根没进模型的输入。这个方法之所以好用,是因为它不依赖对方的任何说明,只依赖一个骗不了人的数字,判断一条链路是原生直通还是翻译层,它比看任何文档都准。第六步是省事版:probe.cocodot.co 是一个免费的在线检测,填入任意中转的地址和 key,它会跑一组探针输出报告,key 不入库,不用注册,也不用是它的客户,当作一个体检工具用就行。

8. 常见报错对照与供应商选择

404 且没有任何说明,大概率是 base_url 尾巴错了,用 curl 打一次模型列表就能确认。401 或 invalid api key,先怀疑鉴权头种类不对,两个头都带上再试。返回 200 但回答敷衍、明显不是那个档位,大概率是模型名不存在被回退到了默认模型,去核对模型列表里的准确 id。流式没有 usage,是没开 include_usage。长文件问答答非所问,先查客户端的 contextLength 是不是太小、在本地就截了。首字节前断开,是超时设得太小。至于供应商,你不需要只用一家:主力模型走你最信任的那条路,备用供应商在配置里留一个 profile,平时不用,主力出问题的时候一键切换;Cline 和 Continue 都支持保存多套模型配置,这个成本几乎为零,却能把"今天供应商抽风"从事故降级成一次点击。如果你要找一个可以走 Anthropic 原生 messages 路径的供应商(也就是不做协议翻译、请求体原样透传给上游那种),cocodot 是一个选项:OpenAI 兼容端点是 https://cocodot.co/api/ai/v1,Anthropic 原生端点是 https://cocodot.co/api/ai,ANTHROPIC_BASE_URL 指过去就能被 Claude Code 系客户端直接用,usage 字段如实回传(包括缓存相关字段),你可以拿上面第二步和第五步自己核。充值走支付宝,主体是海外注册公司。先小额充一点、按本文的验证跑完再决定要不要加量,这是对任何供应商都该有的顺序。

四个客户端的配置位对照

客户端选哪种 ProviderBase URL 填到哪模型名从哪来最高频的坑
ClineOpenAI Compatible填到 /v1 为止手填,先用 GET /v1/models 查尾部多一个斜杠,或多填了 /chat/completions
Roo CodeOpenAI Compatible填到 /v1 为止同上与 Cline 同源,坑一样;另注意它默认开并行工具调用
Continueprovider 写 openai,再给 apiBase填到 /v1 为止写在 model 字段忘了设 contextLength,长文件直接被本地截断
ZCode / Claude Code 同类Anthropic 原生填到 /api/ai(不带 /v1)用 claude 开头的名字或供应商代号把 OpenAI 的 base_url 直接搬过来

FAQ

一定要选 OpenAI Compatible 吗,能不能直接选 Anthropic?

看客户端。Cline 和 Roo 的 Anthropic 选项通常会带上官方域名和一些专有参数,指向第三方时容易出兼容问题,选 OpenAI Compatible 更稳。而 Claude Code 系客户端本身就是 Anthropic 协议,那就走原生 /v1/messages,不要绕成 OpenAI 格式,绕一圈只会多丢字段。

模型名可以写厂商官方的名字吗?

取决于供应商。有的供应商做了别名映射,写官方名也能识别;有的只认自己的 id。可靠做法始终是先 GET /v1/models,把返回的 id 原样填进去。

验证要多久做一次?

换供应商时必做一次完整的。之后建议每月抽测一次 usage 一致性和长上下文完整性(两分钟),以及在你明显感觉"最近变笨了"的时候立刻跑一次。用数据代替感觉,通常十分钟内就能得出结论:要么是真有问题,要么是你的 prompt 变了。

多个客户端能共用一把 key 吗?

技术上可以。但建议按用途分开建 key,一个客户端一把。出问题时你能立刻定位是哪个客户端在异常消耗,而不是对着一条汇总账单猜。

检测工具会不会把我的 key 存下来?

这是你该问每一个检测工具的问题。probe.cocodot.co 的做法是 key 只在本次请求中转发、不落库。但更稳妥的通用做法是:临时建一把额度很小的 key 专门用来测,测完就删。这个习惯对所有第三方工具都适用。

About cocodot

cocodot is a payment and AI access service for developers and cross-border teams in mainland China. It provides US-BIN virtual cards issued by a licensed institution — used to pay for overseas subscriptions and ad accounts — and an OpenAI-compatible AI API gateway for calling Claude, GPT and Gemini from within mainland China. Both share one wallet, funded by Alipay and accounted in USD. Card: $9.9 to open, 3% to load, 0% on spend, $1 per active card per month.

Service scope, pricing and limits →
在 Cline / Continue / Roo / ZCode 里接第三方模型供应商:配置、避坑、验证(2026) · cocodot