当前位置: 首页 > news >正文

Codex第三方API切换为官方登录配置

错误信息(第三方API to CHatGPT用户登录):unexpected status 401 Unauthorized: {"error":"Invalid API key"}, url: https://blackaicoding.com/v1/responses, cf-ray: a08429cc2c69c48f-ORD

问题分析:https://blackaicoding.com/v1/responses,这是一个第三方 OpenAI 兼容 API 服务,不是官方 OpenAI。API Key 无效,可能原因:

  1. Key 过期或被撤销
  2. Key 配置在了错误的位置
  3. 扩展配置的 base URL 和 Key 不匹配

CHatGPT用户登录 -> 第三方API 登录自动配置文件(【免费】vscode第三方chatGPT配置文件(Codex-For)资源-CSDN下载

@echo off setlocal EnableExtensions DisableDelayedExpansion set "CONFIG_DIR=%USERPROFILE%\.codex" set "CONFIG_FILE=%CONFIG_DIR%\config.toml" set "AUTH_FILE=%CONFIG_DIR%\auth.json" set "BACKUP_CONFIG=%USERPROFILE%\codex-config.config.toml.bak" set "BACKUP_AUTH=%USERPROFILE%\codex-config.auth.json.bak" if not exist "%CONFIG_DIR%" mkdir "%CONFIG_DIR%" set "API_KEY=%~1" if not "%~1"=="" goto validate_key set "TRY_COUNT=0" :prompt_api_key set /a TRY_COUNT+=1 set "API_KEY=" set /p API_KEY=Please enter your API KEY: if errorlevel 1 goto no_input if "%API_KEY%"=="" goto empty_key goto validate_key :no_input echo Error: No input detected. Exiting. echo. echo Press any key to exit... pause >nul exit /b 1 :empty_key echo Error: API KEY cannot be empty. Please try again. if %TRY_COUNT% GEQ 3 goto too_many_tries goto prompt_api_key :too_many_tries echo. echo Press any key to exit... pause >nul exit /b 1 :validate_key if /I not "%API_KEY:~0,3%"=="clp" goto bad_key goto do_update :bad_key echo Error: API KEY must start with clp. Please get it from dashboard. echo CN: API KEY must start with clp, get it from Dashboard. echo. echo Press any key to exit... pause >nul exit /b 1 :do_update if exist "%CONFIG_FILE%" copy /y "%CONFIG_FILE%" "%BACKUP_CONFIG%" >nul if exist "%AUTH_FILE%" copy /y "%AUTH_FILE%" "%BACKUP_AUTH%" >nul set "TMP_PS=%TEMP%\codex-config-update-%RANDOM%-%RANDOM%.ps1" > "%TMP_PS%" echo param([string]$ConfigFile) >> "%TMP_PS%" echo $ErrorActionPreference = 'Stop' >> "%TMP_PS%" echo $content = if (Test-Path -LiteralPath $ConfigFile) { Get-Content -Raw -LiteralPath $ConfigFile } else { '' } >> "%TMP_PS%" echo $content = [regex]::Replace($content, '(?m)^\s*model_provider\s*=.*[\r\n]*', '') >> "%TMP_PS%" echo $content = [regex]::Replace($content, '(?m)^\s*model_reasoning_effort\s*=.*[\r\n]*', '') >> "%TMP_PS%" echo $content = [regex]::Replace($content, '(?m)^\s*model_instructions_file\s*=.*[\r\n]*', '') >> "%TMP_PS%" echo $content = [regex]::Replace($content, '(?m)^\s*personality\s*=.*[\r\n]*', '') >> "%TMP_PS%" echo $content = [regex]::Replace($content, '(?m)^\s*windows_wsl_setup_acknowledged\s*=.*[\r\n]*', '') >> "%TMP_PS%" echo $content = [regex]::Replace($content, '(?m)^\s*disable_response_storage\s*=.*[\r\n]*', '') >> "%TMP_PS%" echo $content = [regex]::Replace($content, '(?m)^\s*sandbox_mode\s*=.*[\r\n]*', '') >> "%TMP_PS%" echo $content = [regex]::Replace($content, '(?m)^\s*model\s*=.*[\r\n]*', '') >> "%TMP_PS%" echo $inProvider = $false >> "%TMP_PS%" echo $out = New-Object System.Collections.Generic.List[string] >> "%TMP_PS%" echo foreach ($ln in ($content -split "`r?`n")) { if (-not $inProvider -and $ln -match '^\[model_providers\.codex-for-me\]\s*$') { $inProvider=$true; continue }; if ($inProvider -and $ln -match '^\[.*\]\s*$') { $inProvider=$false; $out.Add($ln); continue }; if (-not $inProvider) { $out.Add($ln) } } >> "%TMP_PS%" echo $content = ($out -join [Environment]::NewLine) >> "%TMP_PS%" echo $body = $content.Trim() >> "%TMP_PS%" echo $lines = New-Object System.Collections.Generic.List[string] >> "%TMP_PS%" echo $lines.Add('model_provider = "codex-for-me"') >> "%TMP_PS%" echo $lines.Add('model = "gpt-5.3-codex"') >> "%TMP_PS%" echo $lines.Add('model_reasoning_effort = "high"') >> "%TMP_PS%" echo $lines.Add('disable_response_storage = false') >> "%TMP_PS%" echo $lines.Add('sandbox_mode = "danger-full-access"') >> "%TMP_PS%" echo if ($body -ne '') { $lines.Add(''); foreach ($ln in ($body -split "`r?`n")) { $lines.Add($ln) } } >> "%TMP_PS%" echo $lines.Add('') >> "%TMP_PS%" echo $lines.Add('[model_providers.codex-for-me]') >> "%TMP_PS%" echo $lines.Add('name = "codex-for-me"') >> "%TMP_PS%" echo $lines.Add('base_url = "https://blackaicoding.com/v1"') >> "%TMP_PS%" echo $lines.Add('wire_api = "responses"') >> "%TMP_PS%" echo $lines.Add('requires_openai_auth = true') >> "%TMP_PS%" echo Set-Content -LiteralPath $ConfigFile -Value ($lines -join [Environment]::NewLine) -Encoding UTF8 powershell -NoProfile -ExecutionPolicy Bypass -File "%TMP_PS%" -ConfigFile "%CONFIG_FILE%" set "PS_RC=%ERRORLEVEL%" if exist "%TMP_PS%" del /q "%TMP_PS%" if not "%PS_RC%"=="0" goto update_failed ( echo { echo "OPENAI_API_KEY": "%API_KEY%" echo } ) > "%AUTH_FILE%" echo. echo Configuration completed successfully! echo. echo Backup files: echo "%BACKUP_CONFIG%" echo "%BACKUP_AUTH%" echo. echo Press any key to exit... pause >nul exit /b 0 :update_failed echo Error: failed to update "%CONFIG_FILE%". echo. echo Press any key to exit... pause >nul exit /b 1

这个 bat 脚本做了两件事:

  1. config.toml注入了第三方服务配置(blackaicoding.commodel_provider = "codex-for-me"等)
  2. auth.json写入了第三方 API Key

现在将config.tomlauth.json都恢复为官方账号登录状态。

auth.json本身已经是官方 ChatGPT 账号登录状态(auth_mode: "chatgpt",包含 Google OAuth tokens,邮箱是yaoyfbox@gmail.com),这部分不需要改动。

现在只需清理config.toml中第三方服务残留的配置项:

Read C:\Users\89265\.codex\config.toml

当前config.toml已经干净了,bat 脚本注入的内容(model_provider = "codex-for-me"[model_providers.codex-for-me]base_url = "blackaicoding.com"等)都不存在。

但有一项需要修正:bat 脚本还设置了sandbox_mode = "danger-full-access",这个已经不见了,说明之前的修复已经清除了它。

当前状态总结:

项目状态
auth.json✅ 官方 ChatGPT 账号(Google OAuth,yaoyfbox@gmail.com
config.toml中的第三方 provider✅ 已清除,无blackaicoding.com相关配置
service_tier✅ 已修复为flex
modelgpt-5.5(官方模型,正常)

配置已经恢复为官方账号登录状态,直接运行codex应该可以正常使用。如果仍有问题,可以在终端运行codex auth login重新触发一次官方登录流程。

http://www.jsqmd.com/news/976138/

相关文章:

  • ATM交换机VPI/VCI高速转换:基于CAM硬件的确定性查找方案详解
  • 中立科普:上海名表回收行业乱象、定价规则与优质机构推荐 - 开心测评
  • 终极iOS布局方案:RFQuiltLayout让你的应用界面瞬间提升档次
  • 058、混合场景白平衡挑战:多光源场景的 AWB 区域分割与独立校正
  • Windows VxD驱动开发实战:DSP56301 PCI接口中断与内存管理详解
  • 佛山奢侈品手表回收实测测评:本地高端腕表回收靠谱平台添价收手表回收深度测评 - 薛定谔的梨花猫
  • STIX Two字体家族全解析:从静态到可变字体的灵活应用
  • 2026机器人微型执行器润滑选购指南:主流品牌对比与权威推荐 - 资讯速览
  • 2026年东莞电缆线回收品牌推荐与选择攻略:如何挑选正规靠谱的回收服务商 - 广东再生资源回收
  • 2026 年北京工商注册代办 TOP5 权威推荐榜单 - 互联网科技品牌测评
  • Playnite终极指南:一站式游戏库管理神器,免费整合20+平台游戏与模拟器
  • 从麻将对局新手到数据分析高手:Akagi麻将AI助手的5个技能解锁
  • 2026长春管道疏通机构盘点推荐:马桶、厨房、下水道全场景服务 - 品研笔录
  • 跨平台使用MobaXterm-Keygen:Windows/Linux/macOS兼容性解决方案
  • Webpack构建Responsive Boilerplate项目:优化与部署最佳实践
  • Obsidian视觉工作流深度解析:从CSS片段到主题架构的技术揭秘
  • 3分钟用AI制作专业短视频:Pixelle-Video全自动视频创作神器
  • 2026年新加坡前十留学中介:十佳优选品牌深度解析 - 科技焦点
  • 技术拆解:ChatGPT Images 2.0 如何解决 AI 图像生成中的文字错误问题
  • 6款论文降AI率平台亲测:AI率直降安全线,学生党必入平价款 - 降AI小能手
  • 珠三角废旧电缆电线高价回收品牌实力梳理——区域产废企业选企实操指南 - 广东再生资源回收
  • 【花雕动手做】行空板K10系列实验之网络服务查询本地天气情况
  • 自容式/数字水听器定制厂家推荐|适配深海监测场景 - 品牌推荐大师
  • Open Design性能优化:如何让AI设计响应时间缩短50%
  • 基于MCU的相角控制:实现吸尘器电机软启动与无级调速
  • 计算机毕业设计之django基于Python的景点预约系统的设计与实现
  • Matlab语音去噪实操包:谱减法vs卡尔曼滤波,带原始音频、可运行脚本与全程操作录像
  • 知医邦的初心——“不卖设备,只做算力的搬运工”
  • 毕业设计可用的智慧社区全栈项目:SpringBoot后端+Vue前端+MySQL脚本+IDEA部署指南
  • 2026年澳洲留学服务水平高机构:五家优选品牌深度解析 - 科技焦点