یک provider سفارشی سازگار با OpenAI به Zed اضافه کنید.

Updated 2026-07-29

Zed provider های سفارشی را مستقیم از settings.json می‌خواند. یک بلاک language_models.openai_compatible اعلام کنید با api_url تنظیم‌شده روی https://api.apisrouter.com/v1، id های مدلی که می‌خواهید را فهرست کنید، و هرکدام در انتخاب‌گر مدل پنل agent زیر یک کلید ظاهر می‌شوند.

پاسخ سریع: یک بلاک در settings.json.

Zed به‌صورت native از provider های سفارشی سازگار با OpenAI پشتیبانی می‌کند. یک entry provider زیر language_models.openai_compatible در settings.json اضافه کنید، api_url را روی https://api.apisrouter.com/v1 تنظیم کنید، و هر مدلی که می‌خواهید را زیر available_models با نام و اندازه context آن اعلام کنید. مدل‌ها بلافاصله در dropdown مدل پنل agent ظاهر می‌شوند. کلید API عمداً داخل settings.json نمی‌رود. Zed آن را وقتی از طریق UI تنظیمات provider وارد می‌کنید در keychain سیستم ذخیره می‌کند، یا از یک متغیر محیطی مشتق‌شده از کلید provider شما می‌خواند: provider ای به نام apisrouter، APISROUTER_API_KEY را می‌خواند. متغیرهای محیطی بر مقادیر keychain اولویت دارند.

{
  "language_models": {
    "openai_compatible": {
      "apisrouter": {
        "api_url": "https://api.apisrouter.com/v1",
        "available_models": [
          {
            "name": "claude-sonnet-4-6",
            "display_name": "Claude Sonnet 4.6",
            "max_tokens": 200000
          }
        ]
      }
    }
  }
}

Zed چطور provider ها و مدل‌های سفارشی را resolve می‌کند.

Zed (zed-industries روی GitHub، حدود ۸۷ هزار ستاره) یک ویرایشگر با کارایی بالا با یک پنل agent است که برنامه‌ریزی می‌کند، فایل‌ها را ویرایش می‌کند، و ابزار اجرا می‌کند. نوع provider openai_compatible آن پروتکل استاندارد /v1/chat/completions را صحبت می‌کند، که دقیقاً همان چیزی است که یک gateway چند-vendor سرویس می‌دهد، پس هیچ پلاگین یا افزونه‌ای بین ویرایشگر و endpoint نمی‌نشیند. کلید provider ای که انتخاب می‌کنید ("apisrouter" بالا) کار دوگانه انجام می‌دهد. provider را در تنظیمات پنل agent نام‌گذاری می‌کند، و نام متغیر محیطی‌ای که Zed برای کلید چک می‌کند تولید می‌کند، به‌صورت upper-snake-case با پسوند _API_KEY. آن قانون نام‌گذاری ارزش درونی‌سازی قبل از عیب‌یابی هرچیزی را دارد: نام provider را عوض کنید و نام متغیر مورد انتظار هم با آن عوض می‌شود. available_models یک allowlist است. Zed نمی‌تواند یک endpoint سفارشی را خودش شمارش کند، پس فقط id هایی که اعلام می‌کنید قابل‌انتخاب می‌شوند، هرکدام یک رشته دقیق شامل هر پسوند نسخه. وقتی endpoint پشت api_url id های Claude، GPT، Gemini، و Kimi را کنار هم سرویس می‌دهد، یک بلاک provider انتخاب‌گر پنل agent را به یک سوییچ‌بورد چند-vendor پشت یک کلید تبدیل می‌کند. یک نکته scope: ویژگی edit predictions در Zed مدل‌های اختصاصی خودش را استفاده می‌کند و جداگانه پیکربندی می‌شود؛ یک provider سفارشی پنل agent و دستیار inline را قدرت می‌دهد، نه edit predictions.

راه‌اندازی کامل: مدل‌ها، اندازه context، و قابلیت‌ها.

هر entry available_models بیش از یک نام می‌گیرد. max_tokens context window مدل را اعلام می‌کند، و max_output_tokens طول تولید را محدود می‌کند؛ Zed از این ارقام برای مدیریت thread های بلند agent استفاده می‌کند، پس اعلام یک مدل long-context با یک max_tokens کوچک بی‌صدا headroom مدل را هدر می‌دهد. شیء capabilities به Zed می‌گوید مدل چه چیزی را پشتیبانی می‌کند: tools را روی true تنظیم کنید برای هرچیزی که قصد دارید با پنل agent هدایت کنید، و images را فقط برای مدل‌هایی که واقعاً ورودی تصویر می‌پذیرند فعال کنید. برای کلید، مسیر قابل‌اعتماد روی یک ویرایشگر دسکتاپ UI تنظیمات provider است، که مقدار را در keychain سیستم ذخیره می‌کند. مسیر متغیر محیطی هم کار می‌کند، با یک احتیاط که در بخش عیب‌یابی پوشش داده شده: اپ‌های GUI راه‌اندازی‌شده از dock از profile شل شما ارث نمی‌برند.

{
  "language_models": {
    "openai_compatible": {
      "apisrouter": {
        "api_url": "https://api.apisrouter.com/v1",
        "available_models": [
          {
            "name": "claude-sonnet-4-6",
            "display_name": "Claude Sonnet 4.6",
            "max_tokens": 200000,
            "max_output_tokens": 64000,
            "capabilities": { "tools": true, "images": false }
          },
          {
            "name": "claude-opus-4-7",
            "display_name": "Claude Opus 4.7",
            "max_tokens": 200000,
            "capabilities": { "tools": true }
          },
          { "name": "gpt-5.5", "display_name": "GPT-5.5", "max_tokens": 200000 },
          { "name": "kimi-k2.7-code", "display_name": "Kimi K2.7 Code", "max_tokens": 200000 }
        ]
      }
    }
  }
}

انتخاب مدل برای پنل agent.

چون هر مدل اعلام‌شده در همان انتخاب‌گر می‌نشیند، workflow عملی مقایسه روی کار واقعی است نه benchmark ها: همان نوع وظیفه را از طریق دو کاندید در روزهای مختلف اجرا کنید و بگذارید لاگ usage هر-کلید هرکدام را قیمت‌گذاری کند. تغییر مدل در Zed یک انتخاب dropdown است، پس هزینه آزمایش صفر-پیکربندی است.

  • پنل agent مهندسی واقعی حمل می‌کند: خواندن فایل‌ها، برنامه‌ریزی edit های چند-مرحله‌ای، اجرای ابزار روی thread های بلند. یک مدل کدنویسی مرزی (claude-sonnet-4-6، claude-opus-4-7، gpt-5.5) در این slot تعلق دارد.
  • id های تنظیم‌شده برای کدنویسی مثل kimi-k2.7-code حتی وقتی پیش‌فرض شما نیستند ارزش اعلام دارند؛ سوییچ برای یک session سنگین refactor یک انتخاب انتخاب‌گر است، نه یک ویرایش پیکربندی.
  • مدل‌های long-context مثل gemini-3.1-pro-preview وقتی thread ها به‌طور معمول فایل‌های بزرگ یا context کل-ماژول را داخل یک گفتگو می‌کشند جایگاه خود را کسب می‌کنند.
  • کمک inline کوتاه‌عمرتر از thread های agent است، پس یک id سریع mid-tier تبدیل‌های تک-shot را چابک نگه می‌دارد بدون سوزاندن token های مرزی روی بازنویسی‌های یک‌خطی.

پرداخت بر اساس مصرف · پایین‌تر از قیمت رسمی

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

مدلقیمت رسمیقیمت ما
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
Claude Opus 4.7$5.00 / $25.00 per M$4.00 / $20.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
Kimi K2.7 Code$0.95 / $4.00 per M$1.00 / $4.00 per M
Gemini 3.1 Pro Preview$2.00 / $12.00 per M$1.60 / $9.60 per M

حالت‌های شکست مختص provider های سفارشی Zed.

کلید در settings.json است و هیچ‌چیز کار نمی‌کند. Zed عمداً کلیدهای API را از settings.json نمی‌خواند. کلید را در UI تنظیمات provider وارد کنید، یا متغیر محیطی مشتق‌شده را export کنید؛ یک کلید paste‌شده در JSON نادیده گرفته می‌شود. متغیر محیطی تنظیم است اما Zed همچنان کلید می‌خواهد. نام متغیر از کلید provider مشتق می‌شود، upper-snake-case با _API_KEY پیوست‌شده، پس provider ای به نام apisrouter به APISROUTER_API_KEY نیاز دارد، نه OPENAI_API_KEY. و روی macOS، یک اپ راه‌اندازی‌شده از dock هرگز profile شل شما را source نمی‌کند، پس export های profile برایش نامرئی‌اند. Zed را از یک ترمینال با دستور zed راه‌اندازی کنید، یا از مسیر keychain استفاده کنید و کل مشکل را دور بزنید. یک مدل از انتخاب‌گر غایب است. available_models یک allowlist است؛ یک id که فرض کرده‌اید اما هرگز اعلام نکرده‌اید به‌سادگی وجود ندارد. id ها رشته‌های دقیق شامل پسوندهای نسخه هستند، و فهرست /v1/models gateway املای معتبر برای کپی‌کردن است. agent نمی‌تواند از ابزار استفاده کند. اگر شیء capabilities یک مدل بگوید tools برابر false است، Zed استفاده از ابزار با آن را ارائه نمی‌دهد. capabilities را طوری اعلام کنید که با آنچه مدل واقعاً پشتیبانی می‌کند مطابقت داشته باشد. api_url بدون /v1. کلاینت مسیرهای route مثل /chat/completions را به base ای که می‌دهید پیوست می‌کند، پس https://api.apisrouter.com/v1 درست است و host برهنه نیست. یک شکست شکل-404 روی یک بلاک درگرچه-درست تقریباً همیشه همین است.

چه کسانی Zed را از طریق یک gateway مسیردهی می‌کنند.

  • توسعه‌دهندگانی که در ویرایشگر زندگی می‌کنند و می‌خواهند Claude، GPT، و Kimi در یک انتخاب‌گر پنل agent باشند به‌جای نگه‌داری credential های provider جدا به ازای هر vendor.
  • مهندسانی که مدل‌های کدنویسی را روی edit های واقعی مقایسه می‌کنند. هر کاندید یک entry اعلام‌شده و یک انتخاب dropdown است؛ بدون حساب جدید به ازای هر آزمایش.
  • تیم‌هایی که یک secret استاندارد می‌کنند. یک APISROUTER_API_KEY واحد در مستندات onboarding یک چک‌لیست کلید هر-vendor را جایگزین می‌کند، و usage هر-کلید نشان می‌دهد هر seat چقدر خرج می‌کند.
  • کاربرانی که یک مدل agent مرزی را با یک مدل کمک inline سریع از vendor دیگری جفت می‌کنند، چیزی که پیکربندی‌های تک-vendor نمی‌توانند بیان کنند.
  • توسعه‌دهندگان بدون دسترسی به صورت‌حساب یک vendor خاص. دسترسی مبتنی بر شارژ بدون الزام کارت وابستگی ثبت‌نام هر-provider را حذف می‌کند.

endpoint را تأیید کنید و thread اول را عیب‌یابی کنید.

قبل از شروع یک thread agent، آنچه gateway سرویس می‌دهد را فهرست کنید. id های برگردانده‌شده توسط /v1/models دقیقاً همان رشته‌هایی هستند که entry های available_models شما باید استفاده کنند. شکست‌های thread اول ثابت‌اند. یک 401 یعنی کلیدی که Zed resolve کرده اشتباه یا غایب است: entry keychain را در تنظیمات provider چک کنید، یا تأیید کنید متغیر محیطی مشتق‌شده برای فرآیند Zed قابل‌مشاهده است نه فقط برای ترمینال شما. یک خطای model-not-found از gateway یعنی یک نام اعلام‌شده با یک id سرویس‌داده‌شده مطابقت ندارد، شامل پسوند نسخه. اگر بلاک provider اصلاً در تنظیمات ظاهر نشود، JSON را اعتبارسنجی کنید؛ settings.json کامنت‌ها را تحمل می‌کند اما خطاهای ساختاری را نه. وقتی درخواست‌ها جریان یابند، کنسول APIsRouter مدل، شمارش token، و هزینه به ازای هر درخواست را نشان می‌دهد. thread های agent حجم کاری context-بلند و بسیار-turn هستند، و دیدن کدام thread ها و کدام مدل‌ها token ها را مصرف می‌کنند نحوه تصمیم‌گیری شماست که آیا مدل پیش‌فرض شما جایگاهش را کسب می‌کند.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

پرسش‌های پرتکرار

آیا Zed می‌تواند مدل‌های Claude، GPT، و Kimi را از طریق یک provider سفارشی استفاده کند؟

بله. یک provider سفارشی یک api_url به‌علاوه یک allowlist available_models است. وقتی endpoint چند vendor سرویس می‌دهد، یک entry به ازای هر id اعلام کنید و هر مدل اعلام‌شده در انتخاب‌گر پنل agent زیر همان provider و کلید ظاهر می‌شود، قابل‌تعویض به ازای هر thread.

کلید API برای یک provider سفارشی Zed کجا می‌رود؟

نه داخل settings.json. آن را در UI تنظیمات provider وارد کنید، که در keychain سیستم ذخیره می‌شود، یا متغیر محیطی مشتق‌شده از کلید provider خود را export کنید: provider ای به نام apisrouter، APISROUTER_API_KEY را می‌خواند. متغیرهای محیطی بر مقادیر keychain اولویت دارند.

چرا Zed کلید API ای را که در profile شل خودم export کردم نادیده می‌گیرد؟

اپ‌های GUI راه‌اندازی‌شده از dock هرگز profile شل شما را source نمی‌کنند، پس export برایشان نامرئی است. Zed را از یک ترمینال با دستور zed راه‌اندازی کنید تا آن را به ارث ببرد، یا از UI تنظیمات استفاده کنید و بگذارید keychain کلید را نگه دارد.

چرا مدل من در انتخاب‌گر پنل agent غایب است؟

مدل‌های provider سفارشی باید صریح اعلام شوند؛ Zed نمی‌تواند یک endpoint سفارشی را شمارش کند. چک کنید available_models رشته دقیق id، شامل پسوندهای نسخه را دارد، و id ها را از پاسخ /v1/models gateway کپی کنید نه از حافظه تایپ کنید.

max_tokens و max_output_tokens در available_models چه چیزی را کنترل می‌کنند؟

max_tokens context window مدل را اعلام می‌کند و max_output_tokens طول تولید را محدود می‌کند. Zed از این‌ها برای مدیریت thread های بلند agent استفاده می‌کند، پس max_tokens را روی چیزی که مدل واقعاً پشتیبانی می‌کند تنظیم کنید؛ کم‌اعلام‌کردن آن context ای که مدل واقعاً دارد را هدر می‌دهد.

آیا یک provider سفارشی edit predictions در Zed را تغییر می‌دهد؟

نه. edit predictions روی مدل‌های اختصاصی خود Zed اجرا می‌شود و جداگانه پیکربندی می‌شود. یک provider سازگار با OpenAI سفارشی پنل agent و دستیار inline را قدرت می‌دهد، جایی که ترافیک /v1/chat/completions می‌رود.