OpenCode'a özel bir OpenAI uyumlu sağlayıcı ekleyin.

Updated 2026-07-29

OpenCode, özel sağlayıcıları doğrudan opencode.json'dan okur. @ai-sdk/openai-compatible paketiyle bir sağlayıcı bloğu tanımlayın, options.baseURL'yi https://api.apisrouter.com/v1 olarak ayarlayın ve listelediğiniz her model, tek bir anahtar altında /models seçicisinde seçilebilir hale gelir.

Hızlı yanıt: opencode.json'da tek bir sağlayıcı bloğu.

OpenCode, özel OpenAI uyumlu sağlayıcıları yerel olarak destekler. opencode.json'a npm alanı "@ai-sdk/openai-compatible" olarak ayarlanmış bir sağlayıcı girdisi ekleyin, options.baseURL'yi https://api.apisrouter.com/v1 olarak ayarlayın, anahtarı {env:...} şablonuyla bir ortam değişkeninden okuyun ve istediğiniz model id'lerini models altında listeleyin. Ardından üst düzey model alanını "apisrouter/<model-id>" olarak ayarlayın ve OpenCode tüm agent döngüsünü gateway üzerinden yönlendirir. Bu, bir wrapper veya fork değil, OpenCode belgelerindeki belgelenmiş özel-sağlayıcı yoludur. Yapılandırma dosyası ya proje kökünüzde (opencode.json) ya da genel olarak ~/.config/opencode/opencode.json'da yaşar ve ikisi birleştirilir, bu yüzden sağlayıcı bloğu bir kez tanımlanıp her repoda yeniden kullanılabilir.

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "apisrouter": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "APIsRouter",
      "options": {
        "baseURL": "https://api.apisrouter.com/v1",
        "apiKey": "{env:APISROUTER_API_KEY}"
      },
      "models": {
        "claude-sonnet-4-6": { "name": "Claude Sonnet 4.6" }
      }
    }
  },
  "model": "apisrouter/claude-sonnet-4-6"
}

OpenCode sağlayıcıları ve modelleri nasıl çözer.

OpenCode (GitHub'da anomalyco, kabaca 186K yıldızla en çok yıldız alan terminal kodlama agent'larından biri), sağlayıcı katmanını Vercel AI SDK üzerine inşa eder. Bir sağlayıcı bloğundaki npm alanı, OpenCode'un o sağlayıcıyla konuşmak için hangi SDK paketini yükleyeceğini adlandırır: "@ai-sdk/openai-compatible", standart /v1/chat/completions protokolünü konuşur, "@ai-sdk/openai" ise OpenAI'nin /v1/responses protokolünü konuşur. Çoklu satıcılı bir gateway chat completions sunar, bu yüzden doğru paket openai-compatible'dır; bir chat-completions endpoint'ine karşı "@ai-sdk/openai" seçmek, bu kurulumun bozulmasının en yaygın yoludur. Modeller sağlayıcı/model çiftleri olarak adreslenir. Sağlayıcı id'si, sağlayıcı bloğunda seçtiğiniz anahtardır (yukarıda "apisrouter") ve model id'si, models haritasının içindeki anahtardır, bu yüzden varsayılan model "apisrouter/claude-sonnet-4-6" olur. Bildirdiğiniz her şey, TUI içindeki /models seçicisinde görünür, oturum ortasında değiştirilebilir. İçselleştirmeye değer bir davranış: özel sağlayıcılar için models haritası bir izin listesidir. Yerleşik sağlayıcılar bilinen bir katalogla gelir, ama OpenCode özel bir endpoint'in modellerini kendi başına numaralandıramaz, bu yüzden yalnızca açıkça bildirdiğiniz id'ler adreslenebilir. baseURL'nin arkasındaki endpoint, Claude, GPT, DeepSeek ve Kimi id'lerini yan yana sunduğunda, model başına bir girdi bildirmek, seçiciyi tek bir anahtarın arkasındaki çapraz-satıcı bir santral haline getirir.

Tam kurulum: genel yapılandırma, proje yapılandırması, model başına sınırlar.

Temiz düzen, sağlayıcıyı bir kez ~/.config/opencode/opencode.json'daki genel yapılandırmada tanımlamak ve yalnızca proje başına seçimleri (hangi model, hangi agent'lar) her projenin opencode.json'unda tutmaktır. OpenCode, yapılandırma dosyalarını değiştirmek yerine birleştirir, bu yüzden proje dosyası küçük kalır ve sağlayıcı bloğu asla çoğaltılmaz. {env:APISROUTER_API_KEY} şablonu, yükleme zamanında ortamdan çözülür, bu da anahtarı commit edilebilecek herhangi bir dosyanın dışında tutar. Onu shell profilinizden dışa aktarın, böylece OpenCode başlatan her terminal oturumu onu görebilir. Her model girdisi ayrıca bağlam ve çıktı token tavanları içeren bir limit nesnesi kabul eder. Bunları bildirmek göründüğünden daha önemlidir: OpenCode, bir oturumun ne zaman özetlemeye ihtiyaç duyduğuna karar vermek için bağlam rakamını kullanır, bu yüzden sınırlar olmadan bildirilen uzun-bağlamlı bir model, olması gerekenden daha muhafazakar biçimde ele alınır. limit.context'i modelin gerçekte desteklediğine ayarlayın ve uzun oturumlar daha erken değil daha geç sıkıştırılsın.

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "apisrouter": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "APIsRouter",
      "options": {
        "baseURL": "https://api.apisrouter.com/v1",
        "apiKey": "{env:APISROUTER_API_KEY}"
      },
      "models": {
        "claude-opus-4-7":   { "name": "Claude Opus 4.7",   "limit": { "context": 200000, "output": 32000 } },
        "claude-sonnet-4-6": { "name": "Claude Sonnet 4.6", "limit": { "context": 200000, "output": 64000 } },
        "gpt-5.5":           { "name": "GPT-5.5" },
        "gpt-5.6-sol": { "name": "GPT-5.6 Sol" },
        "kimi-k2.7-code":    { "name": "Kimi K2.7 Code" }
      }
    }
  },
  "model": "apisrouter/claude-sonnet-4-6",
  "small_model": "apisrouter/kimi-k2.7-code"
}

Model ve small_model seçmek.

Pratik iş akışı, main slotu güvendiğiniz model üzerinde tutmak ve adayları benchmark'lar yerine gerçek oturumlar üzerinden döndürmektir: kendi kod tabanınıza karşı bir öğleden sonraki gerçek diff'ler, bir lider tablosundan daha fazlasını söyler. Tek bir endpoint üzerinden yönlendirmek her adayı tek satırlık bir değişiklik yapar ve anahtar başına kullanım görünümü her deneyin gerçekte neye mal olduğunu gösterir.

  • model, ana agent döngüsünü yönetir: dosyaları okumak, düzenlemeleri planlamak, diff'ler yazmak, araçları çalıştırmak. Bu slot en uzun bağlamları görür ve gerçek mühendisliği yapar, bu yüzden sınır bir kodlama modeli (claude-sonnet-4-6, claude-opus-4-7, gpt-5.5) burada yer alır.
  • small_model, oturum başlığı üretimi gibi hafif görevleri ele alır. Sık ateşlenir ama asla kodlama işini taşımaz, bu yüzden hızlı, ucuz bir id doğru şekildir; başlıklar için sınır token'ları yakmanın bir nedeni yoktur.
  • gpt-5.6-sol ve kimi-k2.7-code gibi kodlamaya ayarlı id'ler, varsayılanınız olmasalar bile bildirilmeye değer: bir refactor ağırlıklı oturum için onlara geçmek bir yapılandırma düzenlemesi değil, tek bir /models seçimidir.
  • Her iki slot da aynı sağlayıcı bloğuna karşı sağlayıcı/model dizeleri aldığından, main ve small slotlar aynı oturumda farklı satıcılardan gelebilir; bu, hiçbir tek-satıcı anahtarının izin vermediği bir şeydir.

Kullandıkça öde · resmi fiyatların altında

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

ModelResmi FiyatBizim Fiyatımız
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
GPT-5.6 Sol$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

OpenCode özel sağlayıcılarına özgü hata modları.

Yanlış SDK paketi. "@ai-sdk/openai" /v1/responses'a gönderir; bir chat-completions gateway'i o rotaya bir hatayla yanıt verir. İlk isteğiniz bir kimlik doğrulama hatası yerine protokol veya rota şeklinde bir hatayla başarısız olursa, npm alanının tam olarak "@ai-sdk/openai-compatible" dediğini kontrol edin. Seçicide olmayan model. Özel-sağlayıcı modelleri yalnızca bildirilirse var olur; bir models anahtarındaki bir yazım hatası veya varsaydığınız ama hiç eklemediğiniz bir id, basitçe /models'te görünmez. Id'ler sürüm sonekleri dahil tam dizelerdir ve gateway'in /v1/models listesi kopyalanacak gerçek kaynaktır. Çözülmemiş {env:...}. Şablon, OpenCode'u başlatan sürecin ortamından çözülür. Bir terminalde dışa aktarılan bir anahtar, başka bir terminalden veya profilinizi hiç kaynak almamış bir masaüstü başlatıcısından başlatılan bir OpenCode örneğine ulaşmaz. Export'u tek seferlik bir oturuma değil, shell profiline koyun. Yapılandırma birleştirme sürprizleri. Genel ve proje yapılandırmaları birleştiği için, model'i farklı bir sağlayıcıya ayarlayan bir proje opencode.json'u, genel varsayılanınızı sessizce geçersiz kılar ve eski bir projedeki kalıntı bir sağlayıcı bloğu beklentileri gölgeleyebilir. Yönlendirme yanlış göründüğünde, gateway'in yanlış davrandığını varsaymadan önce her iki dosyayı da okuyun. /v1 olmayan baseURL. SDK, verdiğiniz base'e /chat/completions gibi rota yolları ekler, bu yüzden https://api.apisrouter.com/v1 doğrudur ve çıplak host değildir. Aksi halde doğru bir yapılandırmada bağlantı veya 404 şeklinde bir başarısızlık neredeyse her zaman budur.

OpenCode'u bir gateway üzerinden kim yönlendirir.

  • Tüm gün TUI'de yaşayan ve satıcı başına ayrı sağlayıcı kimlik bilgileri sürdürmek yerine Claude, GPT ve Kimi'yi tek bir /models seçicisinde isteyen geliştiriciler.
  • Kodlama modellerini gerçek işte karşılaştıran mühendisler. Her aday tek bir bildirilen girdi ve tek bir seçici seçimidir; oturum başına karşılaştırma yeni hesap gerektirmez.
  • Tek bir sırrı standartlaştıran ekipler. Onboarding belgelerindeki tek bir APISROUTER_API_KEY, satıcı başına bir anahtar kontrol listesinin yerini alır ve anahtar başına kullanım kimin ne harcadığını gösterir.
  • Sınır bir main modeli, farklı bir satıcıdan düşük fiyatlı bir small_model ile eşleştiren kullanıcılar; bu, tek-satıcı yapılandırmaların ifade edemeyeceği bir şeydir.
  • Belirli bir satıcının faturalandırmasına erişimi olmayan geliştiriciler. Kart gerektirmeyen yükleme tabanlı erişim, sağlayıcı başına kayıt bağımlılığını ortadan kaldırır.

Endpoint'i doğrulayın ve ilk oturumu hata ayıklayın.

Bir oturum başlatmadan önce gateway'in sunduklarını listeleyin. /v1/models tarafından döndürülen id'ler, models haritanızın anahtarlarının eşleşmesi gereken tam dizelerdir. İlk oturum başarısızlıkları tutarlıdır. 401, APISROUTER_API_KEY'in OpenCode sürecine görünür olmadığı anlamına gelir; başlattığınız aynı terminalde değişkeni echo edin. Gateway'den bir model-not-found hatası, bildirilen anahtarın sürüm sonekleri dahil sunulan bir id ile eşleşmediği anlamına gelir. Sağlayıcı hiç görünmüyorsa, JSON'u doğrulayın, çünkü fazladan bir virgül veya yanlış yerleştirilmiş bir küme parantezi tüm dosyayı okunamaz hale getirir ve OpenCode varsayılanlara geri döner. İstekler akmaya başladığında, APIsRouter konsolu istek başına modeli, token sayılarını ve harcamayı gösterir. Kodlama agent'ları uzun-bağlamlı, çok turlu iş yükleridir ve hangi oturumların ve hangi modellerin token'ları tükettiğini görmek, main slotun fiyatını hak edip etmediğine nasıl karar verdiğinizdir.

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

Sık sorulan sorular

OpenCode, tek bir özel sağlayıcı üzerinden Claude, GPT ve Kimi modellerini kullanabilir mi?

Evet. Özel bir sağlayıcı yalnızca bir baseURL artı bir models izin listesidir. Endpoint birden fazla satıcıyı sunduğunda, id başına bir girdi bildirin ve bildirilen her model, aynı sağlayıcı ve anahtar altında /models seçicisinde görünür, oturum ortasında değiştirilebilir.

API anahtarı opencode.json'da nereye gider?

options.apiKey içinde, ortam şablonu kullanarak, örneğin "{env:APISROUTER_API_KEY}". Şablon yükleme zamanında çözülür, bu yüzden gerçek anahtar hiçbir zaman yapılandırma dosyasında oturmaz. Değişkeni shell profilinizden dışa aktarın, böylece OpenCode'u başlatan her terminal onu devralır.

Sağlayıcı bloğu genel mi yoksa proje yapılandırmasında mı yaşamalı?

~/.config/opencode/opencode.json'daki genel yapılandırmada. OpenCode yapılandırma dosyalarını birleştirir, bu yüzden sağlayıcıyı bir kez genel olarak tanımlamak ve yalnızca proje başına model seçimini ayarlamak, repoları kimlik bilgisi tesisatından uzak tutar ve çoğaltılmış blokların birbirinden uzaklaşmasını önler.

Modelim neden /models seçicisinde görünmüyor?

Özel-sağlayıcı modelleri açıkça bildirilmelidir; OpenCode özel bir endpoint'i numaralandıramaz. models haritasının sürüm sonekleri dahil tam id dizesini içerdiğini kontrol edin ve id'leri hafızadan yazmak yerine gateway'in /v1/models yanıtından kopyalayın.

@ai-sdk/openai-compatible ile @ai-sdk/openai arasındaki fark burada nedir?

@ai-sdk/openai-compatible, çoklu-satıcı gateway'lerin sunduğu protokol olan /v1/chat/completions'ı konuşur. @ai-sdk/openai, OpenAI'nin daha yeni /v1/responses protokolünü konuşur. APIsRouter için @ai-sdk/openai-compatible kullanın; diğer paket, gateway'in bu amaç için sunmadığı bir rotaya gönderi yapar.

Bildirilen bağlam sınırları gerçekten önemli mi?

Evet. OpenCode, bir oturumun ne zaman sıkıştırmaya ihtiyaç duyduğuna karar vermek için limit.context'i kullanır. Uzun-bağlamlı bir modelde sınırları bildirmeden bırakmak, oturumların gerekenden daha erken özetlenmesi anlamına gelir, bu yüzden limit.context ve limit.output'u modelin gerçekten desteklediğine ayarlayın.