用 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 日。

相关推荐
浅安的邂逅8 小时前
20929-OpenAI 一天踩三脚急刹:暂停前沿训练、叫停 Astra、披露越权访问澳政府网站
人工智能·大模型·ai编程·行业动态·ai日报
小虎AI生活8 小时前
OpenAI 给 AI 发了台电脑,可惜你还没学会派活
aigc·ai编程
xcLeigh9 小时前
AI 编程的未来趋势:2025-2026 年你必须关注的六大技术方向
人工智能·ai·ai编程
飞哥数智坊10 小时前
我让 TRAE 也“看”到了微信小程序
人工智能·ai编程
温暖小土11 小时前
CentOS 部署 Milvus 向量数据库完整指南
centos·ai编程·milvus·向量数据库
threerocks12 小时前
【FDE 实战课|第 01 讲】从 Palantir 到 OpenAI:FDE 的来历与全球版图
人工智能·aigc·ai编程
threerocks13 小时前
【FDE 实战课|第 02 讲】为什么模型越强,越需要有人进现场
人工智能·aigc·ai编程
宋哥转AI14 小时前
AI Agent 工程化实战 #03:工具与外部能力——接口化
人工智能·ai·ai编程
AI砖家15 小时前
Codex 模型怎么选?GPT-5.6 / GPT-6 六款模型能力、场景与省钱用法全对比
gpt·codex·codex模型对比·gpt模型对比