Cline 是 VS Code 中常用的开源编程 Agent。接入自定义 API 时,多数人会在设置里选择 OpenAI Compatible,填入 Base URL、API Key 和模型 ID。报错通常集中在四层:凭证、路径、限流和网络。一看到红色提示就换模型,往往把十分钟的配置问题拖成半天。

更有效的顺序是:先看状态码和错误体,再用最小请求复现,最后才改模型、上下文或提示词。本文按 401、404、429、上下文超限、工具调用和超时逐项拆解,并给出 Cline 的日志位置与一份支持排查清单。

说明:Cline 是 Cline Bot Inc. 的商标;VS Code 是 Microsoft Corporation 的商标;OpenAI 是 OpenAI, Inc. 的商标。本文仅作技术说明,与上述公司无隶属或合作关系。界面、菜单和错误文案会随版本变化,请以你当前安装的版本为准。

一、排查顺序:先分层,再改配置

现象或状态码 常见含义 先查什么 是否重试
401 Key 缺失、错误或失效 Key、Provider 字段、账户状态 不重试
403 Key 无权限或策略拦截 模型权限、团队设置、余额 不重试
404 路径错误或模型不存在 Base URL、模型 ID 不重试
429 请求频率、并发或配额超限 用量、共享 Key、重试策略 退避后重试
400/413 请求格式错误或上下文过长 上下文、参数、max_tokens 改请求后重试
超时或流中断 代理、TLS、空闲超时、服务端过载 网络链路、流式设置 视情况重试
工具调用失败 模型或网关不支持工具协议 模型能力、接口兼容性 不重试

排查时固定变量:同一个 Key、同一个 Base URL、同一个模型 ID,一次只改一项。一次改三处,即使恢复了,也不知道是哪一项起了作用。

二、401 与 403:先查 Key,再查 Provider 字段

Cline 的 Provider 列表里既有 OpenAI,也有 OpenAI Compatible。接第三方网关时通常要选后者。选错前者,请求可能仍按 OpenAI 的默认地址发送,你的 Key 自然不被认可。

按下面顺序检查:

  • Key 是否完整复制,前后有没有空格、换行或引号。从聊天窗口复制最容易带隐藏字符。
  • Key 是否填在正确的 Provider 表单里。Cline 的不同 Provider 字段是分开的,填错位置会直接 401。
  • Key 是否被删除、禁用或过期。以网关控制台的状态为准,不要只看本地保存的值。
  • 账户是否有可用余额或额度。余额不足时,不同网关可能返回 401、402 或 403,以错误体为准。
  • Base URL 是否指向 Key 所属的环境。测试环境的 Key 配到生产地址,通常也是 401。
  • 团队版是否限制了个人 Key 或第三方端点。管理策略生效时,本地配置再对也会失败。

先用一条最小请求验证地址和 Key:

export API_KEY="sk-你的密钥"

curl -sS -o /tmp/cline_models.json -w "%{http_code}\n" \
  "https://ai.zhongshangqihang.com/v1/models" \
  -H "Authorization: Bearer $API_KEY"

head -c 300 /tmp/cline_models.json

返回 200 说明地址、Key 和协议基本可用;返回 401 就把同一把 Key 换到网关控制台的测试入口,区分是 Key 本身的问题,还是 Cline 的字段或网络层问题。

三、404:Base URL 和模型 ID 各占一半

404 不一定是模型下线,最常见的原因是路径拼错:

  • Base URL 少写 /v1,请求打到网页路由,返回 HTML 或 404。
  • Base URL 多写 /v1/chat/completions,客户端又自动拼一次,路径重复。
  • 把 Anthropic 的 /v1/messages 填进 OpenAI 兼容字段,或反过来。
  • 把控制台地址当成 API 地址,或域名拼写错误。
  • 模型 ID 大小写、连字符、版本后缀与网关不一致。
  • 模型未在当前账号、套餐或地区开放。

Cline 的 Verify 按钮主要用于确认地址和 Key 的连通性,不保证每个模型都对当前账号开放。最终仍要发一条真实对话请求确认。如果 /v1/models 能返回列表,实际对话却报 404,优先怀疑模型 ID,而不是 Key。最稳妥的做法是从模型列表或站内模型价格页复制 ID,不要手打。

四、429:限流、并发与额度不是一回事

429 表示请求超过了速率、并发或 Token 配额。常见触发场景:

  • 每分钟请求数或每分钟 Token 数超限。
  • 多人共用一把 Key,互相挤占额度。
  • Agent 连续读文件、跑命令,短时间内发出大量请求。
  • 重试没有退避,越失败越发,形成重试风暴。
  • 长上下文请求占用较多配额,留给并发的空间变小。

先看响应头和错误体。有 Retry-After 就按它等待;没有就做指数退避加随机抖动。401 和 404 不要重试,重试只会放大问题。下面是一段可复用的请求处理示例:

import random
import time
import httpx

RETRYABLE = {429, 500, 502, 503, 504}

def chat(payload, key, url="https://ai.zhongshangqihang.com/v1/chat/completions"):
    for attempt in range(4):
        try:
            resp = httpx.post(
                url,
                json=payload,
                headers={"Authorization": f"Bearer {key}"},
                timeout=httpx.Timeout(120.0, connect=10.0),
            )
        except httpx.TimeoutException:
            if attempt == 3:
                raise
            time.sleep(min(30, 2 ** attempt) + random.random())
            continue

        if resp.status_code in (400, 401, 403, 404, 413):
            raise RuntimeError(f"{resp.status_code}: {resp.text[:300]}")

        if resp.status_code in RETRYABLE:
            retry_after = float(resp.headers.get("Retry-After", 2 ** attempt))
            time.sleep(min(30, retry_after) + random.random())
            continue

        resp.raise_for_status()
        data = resp.json()
        choice = data["choices"][0]
        if choice.get("finish_reason") == "error":
            raise RuntimeError(f"stream error: {choice.get('error')}")
        return data

这段代码把“不可重试的鉴权和路径错误”和“可重试的限流与服务端错误”分开。流式响应的错误可能藏在 finish_reason 里,HTTP 状态仍是 200,所以必须单独检查。

五、上下文超限与工具调用失败

上下文超限通常返回 400 或 413,错误体里会出现 context_length_exceeded、maximum context length 等字样。Cline 会把打开的文件、终端输出、检索片段和对话历史一起发送,实际上下文往往比你以为的长。

在 Cline 的 Model Configuration 里,Context Window 和 Max Output Tokens 需要手动填写。填得比模型实际能力大,请求可能被服务端拒绝;填得太小,Cline 会更早压缩上下文,任务容易丢信息。处理办法:新建任务、用忽略文件排除构建产物和日志、关闭无关标签页、长文档先摘要、长对话及时重开。

工具调用失败是另一类问题。OpenAI 兼容端点不仅要能聊天,还要支持原生的 tools/function calling 协议。部分网关或模型只实现了基础对话,普通问答正常,Agent 一读文件就报 400。此时先判断“聊天是否正常、只有工具调用失败”,再检查模型是否支持工具调用,以及 Cline 里的 Computer Use 能力是否配置正确。

六、超时、流式中断与连接失败

超时通常不返回 HTTP 状态码,表现为请求长时间无响应、ECONNRESET、证书错误或回复到一半停住。常见原因:

  • 企业代理或防火墙对长连接设置了空闲超时。
  • 代理缓冲了 SSE,流式数据没有及时转发。
  • VPN、安全软件或 DNS 拦截了 API 域名。
  • 系统时间偏差过大,导致 TLS 证书校验失败。
  • Agent 任务过长,单次请求超过了客户端或网关的超时上限。

排查时先用 "stream": false 发同一条请求。非流式通过,说明问题在流式链路或代理;再用 curl -N 直连测试,排除 Cline 客户端因素。企业代理做 TLS 检查时,需要把公司根证书装进信任链,必要时设置 NODE_EXTRA_CA_CERTS。把 http.proxyStrictSSL 关掉只能作为临时手段,不建议在生产环境使用。也不要因为 ping 得通就判断 API 可用,ping 不验证 TLS、证书和路径。

七、日志与诊断:先留证据,再提问

VS Code 里打开 View → Output,在输出通道下拉框选择 Cline,可以看到扩展的实时日志。部分版本还会在 Problems 面板给出结构化错误。CLI 场景的日志通常在 ~/.cline/data/logs/cline.log,也可以用 cline doctor log 打开;JetBrains 场景常见于 ~/.cline/cline-core-service.log。具体路径以当前版本文档为准。

一条便于排查的记录至少包含:时间、状态码、错误码、模型 ID、Base URL 主机名、请求 ID、耗时和重试次数。请求 ID 通常在响应头里,名称可能是 request-id、x-request-id 或网关自定义字段。找支持时,一条带请求 ID 的日志比十张截图有用。

不要记录完整 Key、完整提示词和用户代码。Key 只保留前后各四位,敏感内容做脱敏。日志本身也可能包含代码片段,共享前先检查。

八、支持排查清单

  1. 记录报错原文、状态码、发生时间和请求 ID。
  2. 用 curl 请求 /v1/models,确认地址和 Key 是否可用。
  3. 检查 Base URL 是否到 /v1,有没有重复拼接路径。
  4. 从模型列表复制模型 ID,确认大小写和版本后缀。
  5. 换一把新 Key 测试,排除 Key 失效、额度或团队策略问题。
  6. 先用非流式、短上下文请求,再逐步加回流式和长上下文。
  7. 切换网络或代理,排除 DNS、TLS 和企业代理因素。
  8. 以上都通过后,把日志、复现步骤和请求 ID 提交给网关或 Cline 支持。

九、常见问题

Key 在别处能用,Cline 里却 401?

先看 Provider 是否选成了 OpenAI Compatible,再看 Base URL 是否和 Key 所属环境一致。团队版还要确认管理员没有限制个人 Key 或第三方端点。

404 一定是模型下线了吗?

不一定。多数情况是 Base URL 少了或多了 /v1,或者模型 ID 拼错。先访问模型列表,再复制 ID 测试。

429 是不是余额不足?

不一定是。429 表示速率、并发或配额超限;余额不足在不同网关可能返回 401、402 或 403。以错误体和账单页为准。

为什么只有流式请求失败?

优先怀疑代理缓冲、空闲超时和连接复用。先用非流式请求对照,再用 curl -N 直连测试,基本能定位到链路中的哪一段。

Cline 的日志在哪里看?

VS Code 里看 View → Output → Cline;CLI 可查看 ~/.cline/data/logs/cline.log,或用 cline doctor log 打开。不同版本和平台可能不同,以当前文档为准。

下一步

先在中商起航 AI 网关创建一把测试 Key,按本文的 curl 命令把鉴权、模型和流式各跑一遍,再填进 Cline。模型可用性和价格以站内模型价格为准,排错时先固定变量,再逐项替换。

相关阅读:

说明:Cline 是 Cline Bot Inc. 的商标;VS Code 是 Microsoft Corporation 的商标;OpenAI 是 OpenAI, Inc. 的商标。本文仅作技术排查讨论,与上述公司无隶属或合作关系。错误文案、菜单和接口行为可能随版本调整,请以项目文档为准。