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 只保留前后各四位,敏感内容做脱敏。日志本身也可能包含代码片段,共享前先检查。
八、支持排查清单
- 记录报错原文、状态码、发生时间和请求 ID。
- 用
curl请求/v1/models,确认地址和 Key 是否可用。 - 检查 Base URL 是否到
/v1,有没有重复拼接路径。 - 从模型列表复制模型 ID,确认大小写和版本后缀。
- 换一把新 Key 测试,排除 Key 失效、额度或团队策略问题。
- 先用非流式、短上下文请求,再逐步加回流式和长上下文。
- 切换网络或代理,排除 DNS、TLS 和企业代理因素。
- 以上都通过后,把日志、复现步骤和请求 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。模型可用性和价格以站内模型价格为准,排错时先固定变量,再逐项替换。
相关阅读:
- OpenAI 兼容 API 完全指南:Base URL、SDK 与迁移
- Cursor 接入 API 常见报错:401、404、429 与连接失败
- Claude Code 接入 API 常见报错:401、404、429 与超时
说明:Cline 是 Cline Bot Inc. 的商标;VS Code 是 Microsoft Corporation 的商标;OpenAI 是 OpenAI, Inc. 的商标。本文仅作技术排查讨论,与上述公司无隶属或合作关系。错误文案、菜单和接口行为可能随版本调整,请以项目文档为准。
