تشغيل DeepSeek مع Codex دليل مصوّر

من التثبيت الرسمي → دمج الموديلات → التبديل في الديسكتوب عبر CC Switch

0) الفكرة باختصار — لماذا ظهرت المشاكل؟

Codex يعمل بنمطي مصادقة مختلفين، وكل نمط يشغّل موديلات مختلفة:

نمط الدخولالموديلات التي تعملالفوترة
حساب ChatGPTموديلات GPT فقطعبر الاشتراك
مفتاح APIDeepSeek والمزودون الخارجيونعبر رصيد DeepSeek

سكربت DeepSeek الرسمي بدّل الكتالوج كاملاً إلى DeepSeek فقط، فاختفت موديلات GPT. وتطبيق الديسكتوب المسجّل بحساب ChatGPT يرفض أي موديل خارجي. الحل الكامل بالأسفل يعالج الاثنين.

1) التثبيت الرسمي من DeepSeek

  1. ثبّت Codex وشغّله مرة واحدة (ليُنشأ مجلد ~/.codex)، وتأكد أن النسخة 0.144.0 أو أحدث: codex --version
  2. احصل على مفتاح API من platform.deepseek.com/api_keys (يبدأ بـ sk-)
  3. شغّل سكربت الإعداد الرسمي:
    bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.sh)
  4. اختر الموديل من القائمة وأدخل المفتاح. السكربت يعمل نسخة احتياطية في ~/.codex/backup-deepseek/ ويكتب ~/.codex/models.json.
الموديل المدعوم حالياً في Codex هو deepseek-flash (و deepseek-v4-pro). الطريقة القديمة wire_api = "chat" لم تعد تعمل.

2) إرجاع موديلات GPT — دمج الكتالوجين

بعد السكربت، ملف models.json يحتوي DeepSeek فقط فيخفي موديلات GPT. الدمج:

python3 -c "
import json
cache = json.load(open('/Users/turki/.codex/models_cache.json'))['models']
ds = json.load(open('/Users/turki/.codex/models.json'))['models']
slugs = {m['slug'] for m in cache}
merged = list(cache) + [m for m in ds if m['slug'] not in slugs]
json.dump({'models': merged}, open('/Users/turki/.codex/models.json','w'), ensure_ascii=False, indent=2)
print('Merged total:', len(merged))
"

النتيجة: 9 موديلات — gpt-6-astra، gpt-reserve، gpt-5.6-sol/terra/luna، gpt-5.5، codex-auto-review، deepseek-flash، deepseek-v4-pro.

ثم احذف سطري الإجبار من أعلى ~/.codex/config.toml (هما اللذان يحجبان موديلات ChatGPT):

# preferred_auth_method = "apikey"   ← احذف
# forced_login_method = "api"        ← احذف

وأضف profiles للتبديل السريع في التيرمنال:

[profiles.gpt]
model = "gpt-6-astra"
model_provider = "openai"

[profiles.deepseek-flash]
model = "deepseek-flash"
model_provider = "deepseek"

[profiles.deepseek-pro]
model = "deepseek-v4-pro"
model_provider = "deepseek"
codex --profile gpt
codex --profile deepseek-flash
codex --profile deepseek-pro

3) رسالة الخطأ الشهيرة — ماذا تعني؟

The 'deepseek-flash' model is not supported when using Codex with a ChatGPT account.

تعني: أنت مسجّل بحساب ChatGPT (اشتراك) وهذا الحساب يدفع لموديلات GPT فقط، بينما deepseek-flash تابع لشركة DeepSeek ويُحاسَب على مفتاح DeepSeek. في التيرمنال التبديل يعمل (مصادقة مفتاح)، أما تطبيق الديسكتوب الرسمي فيرفض الموديلات الخارجية مع تسجيل ChatGPT — وهذا قيد من التطبيق نفسه، وحلّه في الخطوة 4.

4) التبديل داخل الديسكتوب عبر CC Switch

  1. التثبيت: brew install --cask cc-switch (الموقع الرسمي: ccswitch.io — مفتوح المصدر).
  2. في لوحة Codex اختر OpenAI Official أولاً لحفظ تسجيل ChatGPT الحالي.
  3. فعّل: Settings → General → Codex App Enhancements → Keep official login (يبقي الهوية الرسمية أثناء استخدام مزود خارجي).
CC Switch — Settings
GeneralRoutingAuthAdvanced
🔑 Codex App Enhancements
Keep official login for direct switches
Controls third-party switches when local routing is off.
صورة 1 — تفعيل خيار الحفاظ على تسجيل الدخول الرسمي (محاكاة للشاشة الفعلية)
  1. اضغط زر + وأضف المزود بالحقول التالية:
الحقلالقيمة
Provider Namedeepseek
API Keyمفتاح DeepSeek (sk-...)
API Request URLhttps://api.deepseek.com
Upstream FormatResponses (native)
Default Modeldeepseek-flash ⚠️ وليس موديل GPT
Full URLمطفأ (رمادي) — وإلا سيطلب تفعيل routing
Model MappingAdd Model ← deepseek-flash و deepseek-v4-pro
أخطاء شائعة: وضع المفتاح في خانة الرابط (يظهر base_url = "sk-..." في المعاينة)، أو ترك Default Model على موديل GPT فيُرفض من API.
CC Switch
◍
OpenAI Official
The account changes with the current Codex CLI login
D
deepseek
https://api.deepseek.com/
D
default
The account changes with the current Codex CLI login
صورة 2 — بطاقة deepseek بعد إضافتها وتفعيلها بجانب OpenAI Official (محاكاة للشاشة الفعلية)
  1. اضغط بطاقة deepseek لتفعيلها.
  2. اقفل Codex (ديسكتوب + CLI) تماماً وأعد فتحه — ستظهر موديلات DeepSeek في المنتقي والحساب الرسمي باقٍ ظاهراً.
ChatGPT — Codex
Model changed from GPT-6 Astra to DeepSeek-Flash ✓
GPT-6 Astra
✓ DeepSeek-Flash — High
DeepSeek-V4-Pro — High
GPT-5.5
صورة 3 — منتقي الموديلات بعد نجاح الإعداد (محاكاة للشاشة الفعلية)
من الآن التبديل يتم من CC Switch نفسه (الواجهة أو أيقونة الشريط): OpenAI Official ↔ deepseek.

5) التحقق السريع

python3 -c "
import json, tomllib
d = json.load(open('/Users/turki/.codex/models.json'))
print('catalog:', [m['slug'] for m in d['models']])
c = tomllib.load(open('/Users/turki/.codex/config.toml','rb'))
print('model:', c.get('model'), '| provider:', c.get('model_provider'))
print('profiles:', list(c.get('profiles', {}).keys()))
"
codex --version

6) استكشاف الأخطاء

العَرَضالسببالحل
اختفت موديلات ChatGPTmodels.json فيه DeepSeek فقط + سطرا الإجبارالدمج (خطوة 2)
not supported with a ChatGPT accountالديسكتوب مسجّل بحساب ChatGPTCC Switch (خطوة 4) أو CLI فقط
الموديل الافتراضي لا يعمل بعد الدمجموديل GPT مع مزود deepseek (أو العكس)GPT ← openai، وDeepSeek ← deepseek
base_url = "sk-..."المفتاح أُدخل في خانة الرابطالرابط https://api.deepseek.com والمفتاح في خانة API Key

7) التراجع والنسخ الاحتياطية

تنبيه أمني: مفتاح sk-... ظهر مكشوفاً في لقطة شاشة سابقة — لا تشارك اللقطات التي تُظهره، ويفضل تدوير المفتاح من لوحة DeepSeek إذا انتشر.