用 Codex 做一个 API 地址诊断器:Claude Code、Codex、Gemini CLI 的 /v1 排错实战

今天我重新对 LinkAGI 的四条接口路径发了一轮不带 API Key 的请求:

  • Claude Code、Codex、Gemini CLI 对应的正确协议路由均返回 401 Invalid token
  • 故意重复一层 /v1 后返回 404 Invalid URL

这个结果看起来有点反直觉。为什么 401 反而说明地址大概率正确,404 才表示 Base URL 真正填错了?

原因是 401 表示请求已经穿过域名、HTTPS 和接口路由,走到了令牌校验;404 则说明客户端拼出来的路径根本不存在。

与其让使用者继续背规则,我用 Codex 把判断逻辑做成了一个可以直接点击的纯前端工具。

诊断器不要求填写 API Key,也不会主动向服务端发起测试请求。选择客户端、粘贴 Base URL,页面会展示客户端最终拼出的请求地址,并生成可以复制的配置。

1. 为什么两个 /v1 会得到 404

假设 Claude Code 的 Base URL 写成:

text 复制代码
https://api.linktoagi.com/v1

Claude Code 还会在后面自动追加 /v1/messages。最终请求会变成:

text 复制代码
https://api.linktoagi.com/v1/v1/messages

两个 /v1 见面不会变得更强,只会得到 404。

Codex 的 Responses 配置又恰好相反。它继续追加的是 /responses,所以 Base URL 需要写到 /v1 这一层:

text 复制代码
https://api.linktoagi.com/v1 + /responses
= https://api.linktoagi.com/v1/responses

Gemini CLI 则使用根地址,由客户端继续拼接 /v1beta/models/...

人脑很容易把三套规则记混,确定性的程序不会。

2. 第一版需求只保留四个目标

  1. 支持 Claude Code、Codex、Gemini CLI 三种客户端。
  2. 展示 Base URL、客户端追加路径和最终请求地址。
  3. 识别 /v1 重复、Codex 遗漏 /v1、误填完整端点等问题。
  4. 生成可以直接复制的客户端配置。

项目还有两个明确边界:必须是纯静态网页;不接收、不保存 API Key。

整个项目只有这些文件:

text 复制代码
linkagi-endpoint-lab/
├── index.html
├── styles.css
├── app.js
├── README.md
└── assets/
    └── day1-address-map.jpg

没有构建工具,也没有运行时依赖。下载后直接打开即可,也可以放到 GitHub Pages、Nginx 或对象存储。

3. 核心判断逻辑

诊断器会先规范化 URL,再根据客户端判断重复前缀、缺失前缀和误填完整端点:

javascript 复制代码
const hasDuplicateV1 = client !== "codex" && /\/v1$/i.test(baseUrl);
const missingV1 = client === "codex" && !/\/v1$/i.test(baseUrl);
const containsEndpoint = /\/(messages|responses|v1beta\/models)(\/|$)/i.test(baseUrl);

if (hasDuplicateV1) {
  showWarning("/v1 可能会被拼接两次");
}

if (missingV1) {
  showWarning("Codex 的 Base URL 少了一层 /v1");
}

if (containsEndpoint) {
  showWarning("这里需要 Base URL,不要直接填完整接口路径");
}

真实页面还会识别缺少 https://、空地址和多余尾部斜杠等情况。

4. 真实错误状态测试

为了避免只验证正确状态,我给页面加了一个"故意输错看看"按钮。

在 Claude Code 模式点击后,Base URL 会变成带 /v1 的错误写法。页面立即展开 /v1/v1/messages,并明确提示"路径打结了"。

2026 年 7 月 20 日完成的浏览器测试结果:

操作 页面生成结果 判断
Claude Code + 根地址 /v1/messages 正确
Claude Code + /v1 /v1/v1/messages 警告
Codex + /v1 /v1/responses 正确
Codex + 根地址 /responses 警告
Gemini CLI + 根地址 /v1beta/models/... 正确

5. 前端判断之外,再请求真实接口

只看前端拼接还不够。我又向线上服务发起四次不带 Key 的 POST 请求:

bash 复制代码
curl -X POST -H 'Content-Type: application/json' -d '{}' \
  https://api.linktoagi.com/v1/messages

curl -X POST -H 'Content-Type: application/json' -d '{}' \
  https://api.linktoagi.com/v1/responses

curl -X POST -H 'Content-Type: application/json' -d '{}' \
  'https://api.linktoagi.com/v1beta/models/gemini-2.5-flash:generateContent'

curl -X POST -H 'Content-Type: application/json' -d '{}' \
  https://api.linktoagi.com/v1/v1/messages

前三条正确协议路由都返回 401 Invalid token,重复 /v1 的错误路由返回 404 Invalid URL

一套更有效的排错顺序是:

  1. 域名和 HTTPS 是否可达;
  2. 请求有没有到达正确路由;
  3. API Key 是否有效;
  4. 模型权限、余额和上游状态是否正常。

如果地址已经错了,换 Key、充值、重装客户端都不会解决问题。

6. 发布测试抓到的资源路径问题

第一版页面在项目目录里看起来完全正常,但单独启动静态服务器后,路径关系图没有加载出来。

原因是图片最初放在项目文件夹外面,HTML 使用了 ../ 引用。开发时两个目录都在本机,很容易误以为没有问题;真正把项目目录作为网站根目录后,浏览器就找不到图片了。

修复方式是把图片收进项目自己的 assets 目录,改为 ./assets/... 引用,再重新检查资源状态和浏览器日志。

代码结构正确,不代表部署形态一定正确。真正发布前,浏览器实测不能省。

7. 390px 手机端实测

我又用 390 像素宽的手机视口重新跑了一次线上页面。

三个客户端选项会改成纵向排列,路径公式也会逐段展示。实测页面宽度与浏览器宽度都是 390 像素,没有横向滚动条,控制台无 JavaScript 报错。

8. 本地运行与在线体验

本地运行:

bash 复制代码
cd linkagi-endpoint-lab
python3 -m http.server 8787

打开:

text 复制代码
http://localhost:8787

可以依次尝试:

text 复制代码
api.example.com
https://api.example.com/v1
https://api.example.com/v1/messages
https://api.example.com/

再切换 Claude Code、Codex 和 Gemini CLI,观察同一个地址如何得到不同诊断结果。

9. 一个实用工具比一段广告更容易被记住

直接告诉用户"我们支持很多模型",很难让人记住。解决一个他今天就可能遇到的问题,记忆会自然得多。

诊断器默认使用 LinkAGI 地址演示,能够直接生成对应配置;页面底部也提供控制台、文档和地址复制入口,但这些内容不会遮挡工具本身。

即使用户暂时不需要购买服务,也能带走一个有用的工具;真正需要配置 Claude Code、Codex 或 Gemini CLI 时,又能直接找到入口。

低成本带来的第一次尝试很重要,但真正让人留下来的,始终是一次少走弯路的体验。

相关入口

测试与内容核对日期:2026 年 7 月 20 日。

相关推荐
荡神咩7 小时前
windows系统使用glm将claude接入PyCharm2026
pycharm·api
HjhIron9 小时前
在浏览器中跑DeepSeek-R1:用React+WebGPU实现端侧AI推理
前端·ai编程
梅头脑9 小时前
Embedding模型和LLM不是同一个东西!RAG核心组件深度剖析
ai编程
春风野草9 小时前
AI Agent 长任务实战:取消、重试、中断恢复,不是加几个按钮这么简单
aigc·ai编程
用户7783366132119 小时前
SERP API + Server-Sent Events 实时流式推送实战
api
JavaGuide10 小时前
Kimi K3 实战:全栈项目、Java 项目改造与 3A 游戏 Demo
后端·ai编程
谭光志10 小时前
深入浅出 RAG:用一个可运行的 Demo 讲透完整链路
前端·后端·ai编程
zhouhui00110 小时前
AI帮我写了个Spring Boot校验,线上漏掉了这组边界条件
java·spring boot·redis·ai编程
唐老板10 小时前
给 AI 套上缰绳:Harness Engineering 是什么
ai编程