Codex 多模型接入指南(DeepSeek 默认 + 百炼 Qwen 子任务)

在一台新机器上配置 Codex:DeepSeek 作为默认模型阿里云百炼 qwen3.7-flash 作为可切换的子任务模型(支持图片识别)。本文档可整体转发,所有 API Key 均为占位符,请勿填写真实 Key 后再外发。


0. 方案原理(30 秒看懂)

  • Codex 的一个会话同一时间只使用一个 provider(base_url + API Key + 协议)。模型选择器只切换模型、不切换 provider
  • 要使用第二个 provider,用官方支持的 profilecodex -p qwen)或 嵌套 execcodex -p qwen exec "任务")起独立会话/子进程,两者共用同一份配置。
  • 图片分析直接传路径即可(-i <图片路径>),Codex 内部自动转 base64,不需要手动处理
  • 本方案不需要 MCP server、不需要装额外 GUI 工具,适合直接转发传播。

1. 前置条件

  • 已安装 Codex CLI(建议 ≥ 0.144)或 ChatGPT 桌面端,且至少运行过一次~/.codex 目录存在)。
  • 两个 API Key:

2. 第一步:接入 DeepSeek(默认 provider)

推荐使用 DeepSeek 官方一键脚本(会自动生成 models.json 元数据和 [model_providers.deepseek] 配置,并备份原配置):

bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup.sh)

按菜单选择模型(1 = deepseek-v4-flash,2 = deepseek-v4-pro),输入 API Key。
手动配置方式见 DeepSeek 官方文档:接入 Codex | DeepSeek API Docs

3. 第二步:接入百炼 qwen3.7-flash

方式 A:一键脚本(推荐)

把随本文档一起分发的 setup-codex-qwen.sh 拷贝到目标机器,然后:

bash setup-codex-qwen.sh                          # 交互输入百炼 API Key
bash setup-codex-qwen.sh "sk-你的百炼Key"           # 或直接传 Key

脚本会:自动备份 → 追加 [model_providers.bailian] → 创建 ~/.codex/qwen.config.toml → 往 models.json 追加 qwen3.7-flash 条目,全部幂等可重跑。

方式 B:手动配置

1) 在 ~/.codex/config.toml 末尾追加:

[model_providers.bailian]
name = "Aliyun Bailian"
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
wire_api = "responses"
supports_websockets = false
experimental_bearer_token = "<你的百炼APIKey>"

base_url 二选一:

  • 通用地址:https://dashscope.aliyuncs.com/compatible-mode/v1
  • 控制台给了 WorkspaceId 时:https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1

2) 新建 ~/.codex/qwen.config.toml

model = "qwen3.7-flash"
model_provider = "bailian"

3) 在 ~/.codex/models.jsonmodels 数组末尾追加(deepseek 的两个条目保留):

{
  "slug": "qwen3.7-flash",
  "display_name": "qwen3.7-flash",
  "description": "DashScope model: qwen3.7-flash",
  "default_reasoning_level": "medium",
  "supported_reasoning_levels": [
    { "effort": "low", "description": "Fast responses with lighter reasoning" },
    { "effort": "medium", "description": "Greater reasoning depth for complex problems" },
    { "effort": "high", "description": "High reasoning depth for complex problems" }
  ],
  "context_window": 1048576,
  "max_context_window": 1048576,
  "effective_context_window_percent": 95,
  "supports_parallel_tool_calls": false,
  "supports_image_detail_original": true,
  "input_modalities": ["text", "image"],
  "shell_type": "default",
  "visibility": "list",
  "supported_in_api": true,
  "priority": 1,
  "base_instructions": "",
  "support_verbosity": false,
  "supports_reasoning_summaries": false,
  "experimental_supported_tools": [],
  "truncation_policy": { "mode": "bytes", "limit": 10000 }
}

4. 验证

codex debug models                  # 应看到 deepseek-v4-flash / deepseek-v4-pro / qwen3.7-flash
codex -p qwen exec "回复 OK"          # 能出结果即接入成功

5. 使用方法

场景命令
切到 Qwen 交互会话codex -p qwen
非交互子任务(嵌套 exec)codex -p qwen exec "任务描述"
图片识别 / UI/UX 分析codex -p qwen exec -i <图片路径> --skip-git-repo-check "详细描述这张图片"
无人值守追加 --ask-for-approval never-c approval_policy=never
在 DeepSeek 主会话里派 Qwen 子任务直接要求 agent 执行上面的 codex -p qwen exec ...,结果写文件或 stdout 交接

在主会话里可以这样说:

codex -p qwen exec -i /path/to/screenshot.png --skip-git-repo-check "分析这张截图的 UI/UX 问题,重点看灰色遮罩层,结果写到 /tmp/review.md" 起一个 Qwen 子任务。

6. 常见问题与避坑

现象原因解决
403 Model access denied百炼账号未开通该模型 / API Key 无调用权限去百炼控制台开通模型、检查 Key 权限(RAM 子账号需授权)
图片请求偶发 400(报 input_image / MultiModalItem 格式错)Codex 走了 WebSocket,百炼 WebSocket 校验器不认 input_image确认 [model_providers.bailian] 里有 supports_websockets = false(必须走 HTTP)
Not inside a trusted directory在非 git 目录执行--skip-git-repo-check
嵌套 exec 连不上 API父会话沙箱默认禁网给命令放行网络,或父会话配置允许联网
桌面端模型选择器里选了 qwen 报错选择器不切换 provider,请求发到了 deepseek只在 codex -p qwen / 嵌套 exec 里用 qwen
改配置后桌面端无变化app-server 启动时缓存配置完全退出并重启 ChatGPT 客户端
历史会话"消失"Codex 按登录方式分组存会话切回原配置/登录方式即可找回

7. 安全与备份

  • API Key 明文写在 config.tomlexperimental_bearer_token),不要把含真实 Key 的配置外发。
  • 脚本和官方脚本都会自动备份:~/.codex/backup-qwen/~/.codex/backup-deepseek/;恢复即把备份复制回去。
  • 模型元数据中的上下文窗口按 qwen3.7-flash 规格(1M)填写;若型号/规格变化,同步调整 context_window 等字段。

附录:参考来源


附录:一键脚本 setup-codex-qwen.sh(可直接复制保存为脚本运行)

#!/usr/bin/env bash
# setup-codex-qwen.sh
# 在任意机器上为 Codex 追加「阿里云百炼 qwen3.7-flash」provider + profile + 模型元数据。
# 要求:已安装 Codex 且 ~/.codex 已存在(建议先跑 DeepSeek 官方一键脚本生成 models.json)。
# 本脚本不会删除/覆盖已有配置,运行前自动备份。
#
# 用法:
#   bash setup-codex-qwen.sh                          # 交互输入百炼 API Key
#   bash setup-codex-qwen.sh "sk-你的百炼Key"           # 直接传 Key
#   bash setup-codex-qwen.sh "sk-你的百炼Key" "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1"
#
# 也可用环境变量:BAILIAN_API_KEY、BAILIAN_BASE_URL
set -euo pipefail

KEY="${1:-${BAILIAN_API_KEY:-}}"
BASE_URL="${2:-${BAILIAN_BASE_URL:-https://dashscope.aliyuncs.com/compatible-mode/v1}}"

CODEX_HOME_DIR="${CODEX_HOME:-$HOME/.codex}"
CONFIG="$CODEX_HOME_DIR/config.toml"
MODELS="$CODEX_HOME_DIR/models.json"
PROFILE="$CODEX_HOME_DIR/qwen.config.toml"

if [ ! -f "$CONFIG" ]; then
  echo "未找到 $CONFIG"
  echo "请先安装并运行一次 Codex(或 ChatGPT 桌面端),再执行本脚本。"
  exit 1
fi

if [ -z "$KEY" ]; then
  read -r -s -p "请输入百炼 API Key(sk- 开头): " KEY
  echo
fi
if [ -z "$KEY" ]; then
  echo "未提供 API Key,已中止(未修改任何文件)。"
  exit 1
fi

echo "==> 备份现有配置"
BACKUP_DIR="$CODEX_HOME_DIR/backup-qwen"
mkdir -p "$BACKUP_DIR"
TS=$(date +%Y%m%d-%H%M%S)
cp "$CONFIG" "$BACKUP_DIR/config.toml.$TS"
[ -f "$MODELS" ] && cp "$MODELS" "$BACKUP_DIR/models.json.$TS"
echo "    备份到 $BACKUP_DIR"

echo "==> 1/3 追加 [model_providers.bailian] 到 config.toml"
if grep -q '^\[model_providers\.bailian\]' "$CONFIG"; then
  echo "    已存在 [model_providers.bailian],跳过(如需更新 Key/地址请手动编辑)"
else
  cat >> "$CONFIG" <<EOF

[model_providers.bailian]
name = "Aliyun Bailian"
base_url = "${BASE_URL}"
wire_api = "responses"
supports_websockets = false
experimental_bearer_token = "$KEY"
EOF
  echo "    已追加(base_url=${BASE_URL})"
fi

echo "==> 2/3 写入 qwen profile: $PROFILE"
printf 'model = "qwen3.7-flash"\nmodel_provider = "bailian"\n' > "$PROFILE"
echo "    完成"

echo "==> 3/3 往 models.json 追加 qwen3.7-flash"
if [ ! -f "$MODELS" ]; then
  echo "    未找到 $MODELS"
  echo "    请先运行 DeepSeek 官方脚本: bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup.sh)"
  exit 1
fi
python3 - "$MODELS" <<'PY'
import json, sys
path = sys.argv[1]
with open(path, encoding="utf-8") as f:
    data = json.load(f)
if any(m.get("slug") == "qwen3.7-flash" for m in data["models"]):
    print("    已包含 qwen3.7-flash,跳过")
else:
    data["models"].append({
        "slug": "qwen3.7-flash",
        "display_name": "qwen3.7-flash",
        "description": "DashScope model: qwen3.7-flash",
        "default_reasoning_level": "medium",
        "supported_reasoning_levels": [
            {"effort": "low", "description": "Fast responses with lighter reasoning"},
            {"effort": "medium", "description": "Greater reasoning depth for complex problems"},
            {"effort": "high", "description": "High reasoning depth for complex problems"},
        ],
        "context_window": 1048576,
        "max_context_window": 1048576,
        "effective_context_window_percent": 95,
        "supports_parallel_tool_calls": False,
        "supports_image_detail_original": True,
        "input_modalities": ["text", "image"],
        "shell_type": "default",
        "visibility": "list",
        "supported_in_api": True,
        "priority": 1,
        "base_instructions": "",
        "support_verbosity": False,
        "supports_reasoning_summaries": False,
        "experimental_supported_tools": [],
        "truncation_policy": {"mode": "bytes", "limit": 10000},
    })
    with open(path, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)
        f.write("\n")
    print("    已追加 qwen3.7-flash")
PY

echo
echo "完成。接下来:"
echo "  1) 验证:  codex debug models   (应看到 deepseek-v4-flash / deepseek-v4-pro / qwen3.7-flash)"
echo "  2) 试跑:  codex -p qwen exec \"回复 OK\""
echo "  3) 图片:  codex -p qwen exec -i <图片路径> --skip-git-repo-check \"详细描述这张图片\""
echo "  4) 若在 ChatGPT 桌面端使用,重启客户端生效。"

使用截图

在这里插入图片描述

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐