为什么想换模型
都说 DeepSeek 的 token 量大管饱,我也陆续充值了几次。平时聊天、解释代码或者处理一些简单任务时,它的表现确实不错;但当我真正让它参与项目后,问题也慢慢暴露出来了。
它生成的代码并不是完全不能用,只是距离我的实际要求还差点。但最让我郁闷的是,他不能直接帮我处理图片。
于是我想:能不能换一个模型试试?
国内模型总觉得还有一些地方还差点意思;海外模型的价格又让我有些望而却步,而且我也没有方便的海外付款方式。
正巧那段时间总听别人提到“中转站”,我就想看看它到底是什么。
中转站到底是什么
简单理解,中转站就是位于客户端和模型服务商之间的第三方 API 网关。我们的 Codex、Claude Code 或其他客户端先把请求发送给中转站,再由中转站转发给对应的模型渠道。
它通常解决的是以下问题:
- 提供统一的 API 地址和密钥;
- 聚合多家模型,方便切换;
- 提供国内更方便的充值或支付方式;
- 通过渠道折扣或分组倍率降低实际单价;
- 在某个渠道不可用时提供其他可选线路。
中转站并不是 ChatGPT、Codex 或模型官方订阅的替代品。通过第三方 API 获得模型调用能力,也不代表同时获得官方产品中的全部宿主工具、账号权益或服务保障。还有一个无法绕开的风险:我们的提示词、代码、图片和文件内容都可能经过它的服务器。平台还可能遇到线路波动、模型替换、日志留存、售后困难甚至停止运营等问题。因此我更建议先少量充值,便于更换中转站。
我是怎么找到现在这个中转站的
我先在 B 站搜索了一圈,看完后还是有点懵,只知道它大概能让我用上便宜的海外模型。后来又去各种平台找,但我分不清是真的还是广告。
试了好几个中转站,最后在评论区找到一个相对符合需求的中转站,并一直用到了现在。
上面的链接包含我的邀请参数。通过该链接注册或充值,会给我带来平台奖励。是否使用邀请链接不影响本文的操作步骤,也希望大家分享好用的中转站。
读懂模型广场的信息
中转站找到了,接下来就是怎么用。我看了不少视频,仍然没有找到完全对应教程,最后只能自己一点点摸索。
首先在模型广场找到准备使用的模型。下面以平台在 2026 年 7 月 17 日展示的 gpt-5.6-sol 为例。这是该中转站当前提供的模型或路由名称,价格和指标随时可能变化。


TPS 44.4 t/s:输出速度大约每秒 44.4 个 token,输出内容越多,时间越长
平均延迟 14.84s:一次请求平均大约 14.84 秒完成或响应,排队 / 网络的延迟
成功率 73.52%:请求成功比例是 73.52%,说明有不少请求失败、超时或被拒。
输入和输出价格
页面当时显示:
- 输入:
¥0.9 / 1M tokens - 输出:
¥5.4 / 1M tokens
输入 token 是我们发给模型的提示词、文件内容和上下文;输出 token 是模型返回的内容。部分服务还会把推理 token 计入输出,具体要以平台账单日志为准。
假设一次请求使用 10,000 个输入 token 和 2,000 个输出 token,理论费用为:
输入:10,000 ÷ 1,000,000 × 0.9 = ¥0.009
输出:2,000 ÷ 1,000,000 × 5.4 = ¥0.0108
合计:¥0.0198,约 1.98 分不过,这只是按页面单价进行的理论计算。平台可能还有分组倍率、缓存计费、余额换算、服务费和四舍五入规则,最终应该以实际账单为准。
分组倍率怎么选
GPT-plus 当前比 GPT-pro 和 default 便宜,但质量、线路和稳定性可能会差一点。
如果默认就会先走 GPT-pro,不行再走 default,再到 GPT-plus。
我认为选择默认就行了,更稳定一些
创建 API Key
选好模型和分组后,在控制台找到 API 密钥,点击创建。

名称就根据用途命名就行,其他可以默认或者按照自己需求来
创建后立即复制并妥善保管。API Key 通常只会完整显示一次,不要放进文章截图、聊天记录或公开仓库。
一键导入 CC Switch
CC Switch 的安装和基础用法,我在上一篇文章中已经讲过,这里不再重复。
在中转站模型页面右侧的菜单中选择 CC Switch,即可进入一键导入流程:
- 选择要导入的 AI 应用,例如 Codex;
- 给服务商配置取一个容易辨认的名称;
- 选择准备使用的模型和分组;
- 点击打开 CC Switch;
- 在 CC Switch 中确认导入并启用配置。



导入后不要急着正式使用。先确认旁边的联通测试能够通过,并观察延迟是否处于可以接受的范围。如果成功率低或延迟波动明显,即使模型单价很便宜,也不适合作为项目的主要线路。
但这样还是没有图像能力
通过第三方 API 接入一个聊天或编程模型后,不会自动出现对应的图片生成工具。要让 Codex 帮我出图,还需要单独准备图片模型、图片专用 API Key 和一个调用 Images API 的命令脚本。
创建图片专用 API Key
回到中转站控制台,再创建一个单独的 API Key。名称可以填写 Codex-image,方便与日常对话密钥区分。
在高级设置中,把可用模型限制为:
gpt-image-2
三个核心文件
整个图片生成配置由三部分组成:
imagegen.env:保存图片 API 地址、模型和密钥;codex-gpt-image:把提示词发送到 Images API,并保存返回图片;gpt-image-proxy/SKILL.md:告诉 Codex 什么时候、怎样调用这个命令。
其中 Python 程序同时兼容两种常见响应:API 直接返回 b64_json,或者返回一个临时图片 URL。
公共 Python 程序
#!/usr/bin/env python3
"""Generate an image through an OpenAI-compatible image proxy."""
from __future__ import annotations
import argparse
import base64
import binascii
import json
import os
from pathlib import Path
import sys
import urllib.error
import urllib.parse
import urllib.request
ENV_PATH = Path.home() / ".codex" / "imagegen.env"
def load_env_file(path: Path) -> None:
"""Load simple KEY=VALUE pairs without overwriting existing variables."""
if not path.exists():
return
for raw_line in path.read_text(encoding="utf-8").splitlines():
line = raw_line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
key, value = line.split("=", 1)
key = key.strip()
value = value.strip()
if len(value) >= 2 and value[0] == value[-1] and value[0] in {'"', "'"}:
value = value[1:-1]
if key and key not in os.environ:
os.environ[key] = value
def post_json(url: str, payload: dict, api_key: str, timeout: int) -> dict:
request = urllib.request.Request(
url,
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"Accept": "application/json",
},
method="POST",
)
with urllib.request.urlopen(request, timeout=timeout) as response:
return json.loads(response.read().decode("utf-8", errors="replace"))
def download(url: str, referer: str, timeout: int) -> bytes:
parsed = urllib.parse.urlparse(url)
if parsed.scheme not in {"http", "https"}:
raise ValueError("Image URL must use http or https.")
request = urllib.request.Request(
url,
headers={
"User-Agent": "Mozilla/5.0 CodexImageProxy/1.0",
"Referer": referer,
},
)
with urllib.request.urlopen(request, timeout=timeout) as response:
return response.read()
def api_origin(base_url: str) -> str:
parsed = urllib.parse.urlparse(base_url)
if parsed.scheme not in {"http", "https"} or not parsed.netloc:
raise ValueError("OPENAI_IMAGE_BASE_URL must be an http(s) URL.")
return f"{parsed.scheme}://{parsed.netloc}/"
def main() -> int:
load_env_file(ENV_PATH)
parser = argparse.ArgumentParser(
description="Generate an image through an OpenAI-compatible image proxy."
)
parser.add_argument("--prompt", required=True)
parser.add_argument("--out", required=True)
parser.add_argument(
"--model",
default=os.getenv("OPENAI_IMAGE_MODEL", "gpt-image-2"),
)
parser.add_argument("--size", default="2048x1152")
parser.add_argument("--quality", default="high")
parser.add_argument("--n", type=int, default=1)
parser.add_argument("--timeout", type=int, default=180)
args = parser.parse_args()
api_key = os.getenv("OPENAI_IMAGE_API_KEY") or os.getenv("OPENAI_API_KEY")
base_url = (
os.getenv("OPENAI_IMAGE_BASE_URL")
or os.getenv("OPENAI_BASE_URL")
or ""
).rstrip("/")
if not api_key:
print(
"Missing OPENAI_IMAGE_API_KEY or OPENAI_API_KEY.",
file=sys.stderr,
)
return 2
if not base_url:
print(
"Missing OPENAI_IMAGE_BASE_URL or OPENAI_BASE_URL.",
file=sys.stderr,
)
return 2
payload = {
"model": args.model,
"prompt": args.prompt,
"size": args.size,
"quality": args.quality,
"n": args.n,
}
try:
result = post_json(
f"{base_url}/images/generations",
payload,
api_key,
args.timeout,
)
data = result.get("data")
if not isinstance(data, list) or not data or not isinstance(data[0], dict):
raise ValueError("Image response did not contain data[0].")
item = data[0]
if item.get("b64_json"):
raw = base64.b64decode(item["b64_json"], validate=True)
elif item.get("url"):
raw = download(
item["url"],
referer=api_origin(base_url),
timeout=args.timeout,
)
else:
raise ValueError("Image response had neither b64_json nor url.")
except urllib.error.HTTPError as exc:
body = exc.read().decode("utf-8", errors="replace")
print(f"HTTP {exc.code}: {body}", file=sys.stderr)
return 1
except urllib.error.URLError as exc:
print(f"Network error: {exc.reason}", file=sys.stderr)
return 1
except (ValueError, KeyError, TypeError, json.JSONDecodeError, binascii.Error) as exc:
print(f"Invalid image response or configuration: {exc}", file=sys.stderr)
return 1
output = Path(args.out).expanduser().resolve()
output.parent.mkdir(parents=True, exist_ok=True)
output.write_bytes(raw)
print(output)
return 0
if __name__ == "__main__":
raise SystemExit(main())macOS 配置方法
1. 创建目录
打开终端:
mkdir -p ~/.codex/bin ~/.codex/skills/gpt-image-proxy2. 创建环境变量文件
nano ~/.codex/imagegen.env写入:
OPENAI_IMAGE_API_KEY=替换为你的密钥
OPENAI_IMAGE_BASE_URL=https://xn--vduyey89e.com/v1
OPENAI_IMAGE_MODEL=gpt-image-2保存后限制文件权限:
chmod 600 ~/.codex/imagegen.env3. 创建图片生成命令
nano ~/.codex/bin/codex-gpt-image把上面的公共 Python 程序完整粘贴进去,然后添加执行权限:
chmod +x ~/.codex/bin/codex-gpt-image4. 手动测试
~/.codex/bin/codex-gpt-image \
--prompt "一只坐在窗边写代码的橘猫,温暖插画风格,无文字" \
--size 2048x1152 \
--quality high \
--out "$HOME/Desktop/image-test.png"命令成功后,桌面应该出现 image-test.png。
Windows 配置方法
1. 准备 Python 和目录
先确认已经安装 Python 3:
py -3 --version如果系统没有 py 命令,也可以尝试:
python --version在 PowerShell 中创建目录:
New-Item -ItemType Directory -Force "$HOME\.codex\bin"
New-Item -ItemType Directory -Force "$HOME\.codex\skills\gpt-image-proxy"2. 创建环境变量文件
notepad "$HOME\.codex\imagegen.env"写入与 macOS 相同的三行:
OPENAI_IMAGE_API_KEY=替换为你的密钥
OPENAI_IMAGE_BASE_URL=https://xn--vduyey89e.com/v1
OPENAI_IMAGE_MODEL=gpt-image-23. 保存 Python 程序
notepad "$HOME\.codex\bin\codex-gpt-image.py"将上面的公共 Python 程序完整粘贴并保存。
4. 创建 CMD 启动器
notepad "$HOME\.codex\bin\codex-gpt-image.cmd"写入:
@echo off
where py >nul 2>nul
if errorlevel 1 (
python "%USERPROFILE%\.codex\bin\codex-gpt-image.py" %*
) else (
py -3 "%USERPROFILE%\.codex\bin\codex-gpt-image.py" %*
)
exit /b %errorlevel%这个启动器会优先使用 Windows 的 py -3,找不到时再尝试 python。
5. 手动测试
在 PowerShell 中运行:
& "$HOME\.codex\bin\codex-gpt-image.cmd" `
--prompt "一只坐在窗边写代码的橘猫,温暖插画风格,无文字" `
--size 2048x1152 `
--quality high `
--out "$HOME\Desktop\image-test.png"成功后,桌面应该出现 image-test.png。
让 Codex 自动使用图片生成命令
做到前面一步后,我们已经可以手动运行图片生成程序。但 Codex 不会仅仅因为某个文件存在,就自动知道什么时候应该调用它。
如果希望在对话中说“生成一张图片”时,Codex 能主动选择这个命令,还需要创建一个 Skill。
macOS/Linux 路径:
~/.codex/skills/gpt-image-proxy/SKILL.mdWindows 路径:
%USERPROFILE%\.codex\skills\gpt-image-proxy\SKILL.mdSkill 内容如下:
---
name: gpt-image-proxy
description: Use when the user asks to generate, draw, or create an image, wallpaper, avatar, poster, or other raster image through the configured image proxy.
---
# GPT Image Proxy
Use the configured image proxy only for image generation. Existing image-reading capabilities are separate and do not need this wrapper.
On macOS or Linux, run:
```bash
~/.codex/bin/codex-gpt-image \
--prompt "USER_PROMPT" \
--size 2048x1152 \
--quality high \
--out "/absolute/path/to/output.png"
```
On Windows, run:
```bat
"%USERPROFILE%\.codex\bin\codex-gpt-image.cmd" --prompt "USER_PROMPT" --size 2048x1152 --quality high --out "C:\absolute\path\to\output.png"
```
Always use an absolute output path. After generation, return or display the saved image. Never print, expose, or copy the API key into prompts, logs, or article content.保存后重启 Codex,或者新建一个任务,让 Codex 重新加载技能。然后可以尝试:
生成一张 16:9 的博客封面图:深色书桌上放着一台正在运行 Codex 的笔记本电脑,科技感插画风格,不要文字。
写在最后
中转站确实降低了尝试不同模型的门槛,但它不是免费的午餐,也不是官方服务的完全替代品。价格更低的同时,我们也承担了更多隐私、稳定性和售后风险。
这篇文章记录的是我目前摸索出来的一套方法。平台界面、价格、倍率和模型名称都可能变化,大家在实际操作时仍要以当时页面为准,也欢迎分享自己用过的模型和中转服务。

