İfadenin anlamı
İnsanlar "yerel LLM OpenAI API" ifadesini iki ilgili amaç için kullanır. İlki, dizüstü bilgisayarda veya ev sunucusunda çalıştırılan ve yerel bir bağlantı noktasında dinleyen OpenAI sohbet formatını destekleyen bir dil modelidir. İkincisi, modelin değiştirilebileceği şekilde uygulamanızı bu formata uygun yazma alışkanlığıdır.
Format basit bir sözleşmedir. Uygulamanız, model adı ve sistem, kullanıcı veya asistan rolü içeren bir liste olan messages ile bir JSON gövdesi gönderir. Sunucu, oluşturulan mesajı içeren bir JSON nesnesi veya akış isterseniz küçük parçaların akışı ile yanıt verir. Python ve JavaScript için resmi SDK'lar bunu sarar ve temel URL'yi geçersiz kılamanızı sağlar; bu asıl püf noktasıdır.
Birçok yerel araç bu sözleşmeyi sunar. Ollama, LM Studio, llama.cpp sunucusu ve vLLM her biri OpenAI tarzı bir rota sunar. Barındırılan hizmetler de öyle; bu nedenle aynı yirmi satır istemci kodu her ikisine de bağlanabilir. Bu sitedeki uç nokta barındırılan türdendir. POST /v1/chat/completions ve GET /v1/models kabul eder ve https://api.onekeyllmapi.com/v1 adresinden erişilir.
Yerel ile sunulan arasındaki fark
Genel olarak biri diğerinden daha iyi değildir. Kontrolü çabaya feda ederler. Tablo, belirli bir ürün için değil, kategori için geçerli olan farklılıklara sadık kalır.
| Soru | Yerel çalıştırıcı | Sunulan OpenAI tarzı API |
|---|---|---|
| İstemlerin gittiği yer | Makinenizde kalır | HTTPS üzerinden sağlayıcıya bağlanın |
| Donanım | GPU veya CPU ve bellek sağlarsınız | Sizin tarafınızda ek donanım veya maliyet gerekmez |
| Model boyutu | Belleğinizle sınırlıdır | Sağlayıcının sunduğu her şey |
| Maliyet modeli | Donanım ve güç | Token başına, buradan ön ödemeli krediden |
| Kullanılabilirlik | Makineniz açık olduğu sürece | Kesintisiz sunucu, paylaşılan limitler |
| Kurulum | Kurulum, ağırlık indirme, ayarlama | Anahtar oluşturun, temel URL'yi ayarlayın |
Verilerinizin asla kontrolünüzdeki bir makineden ayrılmaması gerekiyorsa, yerel dağıtım kazanır ve barındırılan (hosted) yanlış bir araçtır. Donanımınızın taşıyabileceğinden daha büyük bir modele ihtiyacınız varsa veya birden fazla yerden erişilebilir bir bot gerekirse, barındırılan (hosted) kazanır. Yaygın bir kurulum her ikisini de tutar ve görev başına seçim yapar.
İstemciyi yerelden sunucuya geçirme
Kodunuz zaten bir yerel çalıştırıcı ile konuşuyorsa, geçiş üç değerdir. Mesajları oluşturma ve akış parçalarını okuma dahil her şey aynı kalır.
- Base URL. Yerel adresiniz yerine
https://api.onekeyllmapi.com/v1kullanın. - API anahtarı. Yerel sunucular genellikle anahtarı yok sayar. Barındırılan bir hizmet bunu
Authorization: Bearer <key>olarak gerektirir ve SDK bunu sizin için gönderir. - Model Kimliği. Yerel isimler, çektiğiniz modele göre değişir. Burada kimlik
uncensored.
Bunu esnek tutmanın düzenli bir yolu, üçünü de ortam değişkenlerinden okumaktır; böylece tek bir dosya her iki yerde de çalışır.
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ.get("LLM_BASE_URL", "https://api.onekeyllmapi.com/v1"),
api_key=os.environ.get("LLM_API_KEY", "YOUR_KEY"),
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")
models = client.models.list()
print([m.id for m in models.data])
resp = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "Answer in two sentences."},
{"role": "user", "content": "Why do OpenAI-style endpoints make switching models easy?"},
],
temperature=0.5,
)
print(resp.choices[0].message.content)
Komut satırından yapılan aynı çağrı, hızlı bir duman testi için kullanışlıdır:
curl https://api.onekeyllmapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "uncensored", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 20}'
Node ile desen aynıdır:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.LLM_BASE_URL ?? "https://api.onekeyllmapi.com/v1",
apiKey: process.env.LLM_API_KEY,
});
const res = await client.chat.completions.create({
model: process.env.LLM_MODEL ?? "uncensored",
messages: [{ role: "user", content: "Name three uses for JSON mode." }],
});
console.log(res.choices[0].message.content);
OpenAI uyumluluğunun kapsadığı ve kapsamadığı alanlar
Uyumluluk, veri formatının eşleştiği anlamına gelir. Orijinal hizmetin sunduğu tüm özelliklerin mevcut olduğunu garanti etmez. Gerçek bir uygulamayı taşımadan önce, bu maddelerin her birini hedef sistemle karşılaştırın.
Bu API'nin destekledikleri
- Sohbet tamamlama uç noktaları
POST /v1/chat/completionsve model listesiGET /v1/modelsadresindedir. stream: trueile Sunucu Tarafından Gönderilen Olaylar (SSE) üzerinden akış; kullanım akışın sonunda bildirilir.toolsvetool_choicearacılığıyla araç çağırma; akışlıtool_callsve sonuçlarrole: "tool"mesajları olarak gönderilir.response_format: {"type": "json_object"}aracılığıyla JSON modu.- Örneklem kontrolleri: temperature, top_p, stop, seed ve ceza parametreleri geçirilir.
Ne yapmaz
- Görüntü, ses veya video oluşturma yok. Sadece metindir.
- Gömme uç noktası ve ince ayarlama yok. Uygulamanız bir vektör dizini oluşturuyorsa, ayrı bir gömme kaynağına ihtiyacınız vardır.
- Yalnızca bir model. Model, bağımsız bir sağlayıcı tarafından yönetilen bir açık ağırlıklı modeldir. Büyük bir üreticinin resmi API'si değildir ve sağlayıcılar arasında bir yönlendirici değildir; bu nedenle ID'yi değiştirerek model aileleri arasında seçim yapamazsınız.
Yerel çalıştırıcılar bazen ters yönde farklılık gösterir: yerel bir sunucu gömme rotası sunabilir veya birden fazla model yüklemenize izin verebilir ve bağlam boyutu yapılandırdığınız şeydir. Her biri için hedefin belgelerini okuyun ve uygulamanızın gerçekten kullandığı özelliklerin kısa bir listesini tutun. hızlı başlangıç belgeleri istek alanlarını tam olarak gösterir.
Bağlam, limitler ve maliyet farklılıkları
Yerel bir sunucudan ayrıldığınızda üç sayı değişir. İlki pencere boyutudur. Yerel bir çalıştırıcının bağlam uzunluğu, belleğinize bağlı bir ayardır. Burada 100.000 token ile sabitlenmiştir, istem ve tamamlama tarafından paylaşılır ve max_tokens isteğe bağlıdır. İkincisi eşzamanlılıktır. Kendi makineniz istediğiniz kadar kuyruğa alınabilir, ancak tam bir anahtarla burada 8 eşzamanlı istek ve dakikada 300 istek, deneme anahtarı ile 2 ve 60 izin verilir. Üçüncüsü faturadır.
Barındırılan kullanım 1M giriş token'ı başına $0.15 ve 1M çıktı token'ı başına $0.50 maliyetle, ön ödemeli krediden kullandıkça öde yöntemiyle yapılır. Günlük bir işi örnek olarak ele alalım: bir özetleyici günde 400 belge işler, her biri 3.000 token giriş ve 300 token çıktı içerir. Giriş 400 x 3.000 = 1.200.000 token'dır, bu da 1.2 x $0.15 = $0.18'e mal olur. Çıktı 400 x 300 = 120.000 token'dır, bu da 0.12 x $0.50 = $0.06'a mal olur. Günün toplamı $0.24 olur ve 30 günlük bir ay $7.20 eder. Karar vermeden önce bir GPU'nun çalıştırılma maliyeti ve kartın kendisinin maliyetiyle karşılaştırın.
Bir limiti aştığınızda API, rate_limited veya concurrency koduyla HTTP 429 yanıtı verir. Kısa bir aşırı yüklenme durumunda Retry-After: 5 ekler. Bekleyip tekrar deneme mantığını koruyun. Başarısız veya reddedilen istekler ücretlendirilmez. Kredi asla sona ermez; bu nedenle pasif bir ayın maliyeti yoktur.
Akışlı bir istek, akış bitene kadar eşzamanlılık slotunu korur; okumayı bıraktığınız akışları kapatın. Bakiye yükleme $20'den başlar; seviyeler ve bonuslar fiyatlandırma sayfasında yer alır.
Geçiş düğmesinin beklendiği gibi çalışmaması durumunda hata ayıklama
Çoğu başarısız geçiş, birkaç nedene dayanır. Bunlara bu sırayla göz atın.
- 404 veya bağlantı hataları. Temel URL muhtemelen
/v1sonekine sahip değil veya fazladan bir yol içeriyor. URL'yi tam olarakhttps://api.onekeyllmapi.com/v1olarak kullanın. - Kimlik doğrulama hataları. Anahtar eksik veya yanlış başlıkta gönderiliyor. Format
Authorization: Bearer <key>şeklindedir. SDK kullanıcıları ortam değişkeninin gerçekten yüklendiğinden emin olmalıdır. - Model bulunamadı. Eski yerel model adı hala yapılandırmanızda bulunuyor.
GET /v1/modelsçağrısı yapın ve listede yer alan ID'yi kullanın; bu IDuncensoredşeklindedir. - Yük altında 429 hatası. Tam anahtarınızla dakikada 300 veya eşzamanlı 8 istek sınırını aştınız. Bir kuyruk veya semafor ekleyin.
- Bir parametre yok sayılıyor gibi görünüyor. Yukarıda listelenen geçirilen alanlardan biri olup olmadığını kontrol edin ve sabit bir
seedile düşük sıcaklık ayarıyla davranışı karşılaştırın.
Her yanıt X-Request-Id başlığını içerir. Kötü bir yanıtın daha sonra izlenebilmesi için bunu kendi istek kimliğinizin yanına loglayın. Üretim trafiği çalıştırıyorsanız ve kaliteyi zaman içinde ölçmek istiyorsanız, site makalesi LLM Observability: Myths vs Facts iyi bir sonraki okuma kaynağıdır. X-Balance-USD, X-RateLimit-Limit-Requests ve X-RateLimit-Limit-Concurrency yanıt başlıkları da yakalanmaya değerdir.
Taahhüt olmadan deneme
Kodunuzun temiz bir şekilde taşınıp taşınmadığını test etmenin en ucuz yolu onu bir kez çalıştırmaktır. Google veya e-posta ve şifre ile bir hesap oluşturun, ardından anahtar sayfasından 0,50 $ değerinde deneme kredisi talep edin. Tek tıklamayla yapılır, kart gerektirmez, kişi başı bir kezle sınırlıdır ve 7 gün boyunca geçerliliğini korur. Anahtarınızı API anahtarı sayfasından alın, yukarıdaki üç ortam değişkenini ayarlayın ve mevcut test paketinizi çalıştırın.
Testler başarılı olursa ve kullanım bütçenize uyuyorsa, kart (Visa, Mastercard, Apple Pay, Google Pay) veya kripto (TRC20 üzerinde USDT, Base üzerinde USDC) ile bakiye yükleyin. İstemler eğitim için kullanılmaz. Model, yasal yetişkin kullanımı için içerik reddi olmadan yanıt verecek şekilde ayarlanmıştır; tek bir sabit kural vardır: reşit olmayanlar ile ilgili cinsel içerik yoktur.
