Geliştiriciler için OpenAI API: Uyumlu bir uç nokta kullanın
Kodunuz zaten OpenAI kablosal formatını kullanıyorsa, iki değeri değiştirerek bu barındırılan uç noktada çalıştırabilirsiniz: temel URL ve anahtar. Bu sayfa, yapıştırabileceğiniz kodlarla birlikte tam adımları gösterir.
Güncellendi

Temel noktalar
- Temel URL'yi https://api.openaigatewayapi.com/v1 olarak ayarlayın ve modeli uncensored olarak seçin; OpenAI istemci kodunuzdaki başka hiçbir şeyi değiştirmeniz gerekmez.
- Sohbet tamamlamaları, akış, fonksiyon çağırma ve JSON modu normal SDK çağrıları üzerinden çalışır.
- Tam anahtar için limitler eşzamanlı 8 istek ve dakika başına 300 istektir; bu yüzden 429 yanıt durum kodu için bir yeniden deneme mekanizması ekleyin.
- Tek tıklamayla $0.50'lık deneme için kart gerekmez, bu sayede ödeme yapmadan önce entegrasyonunuzu test edebilirsiniz.
Kısa özet
Çoğu geliştiriciler için openai api rehberi tek bir satıcı ve tek bir fatura varsayılır. Ancak kablosal format yalnızca HTTPS üzerinden JSON'dur ve bu formatı uygulayan herhangi bir sunucuyla iletişim kurabilen çok sayıda istemci kodu, çerçeve ve araç vardır. Bu site böyle bir sunucu barındırır. SDK'nızı korursunuz, temel URL'yi değiştirirsiniz, bu siteden bir anahtar eklersiniz ve modeli uncensored olarak ayarlarsınız.
Bu, tipik bir uygulama için tüm geçiştir. İşte kontrol listesi ve sayfanın geri kalanı her adımı detaylandırır.
- Bir hesap oluşturun ve API anahtarı sayfasında deneme kredisi talep edin.
- Temel URL'yi
https://api.openaigatewayapi.com/v1olarak ayarlayın. - Anahtarı
Authorization: Bearer <key>olarak gönderin. SDK'lar,api_keyparametresini geçtiğinizde bunu sizin için yapar. - Her istekte model kimliği olarak
uncensoredkullanın. - HTTP 429 durum kodunu, son kısımda gösterildiği gibi kısa bir bekleme süresiyle yeniden deneme yaparak yönetin.
İki uç nokta vardır: POST /v1/chat/completions ve GET /v1/models. Hizmet yalnızca metin içerir. Görüntü veya ses üretimi, gömme veya ince ayar yoktur, bu nedenle uygulamanız bunları çağırıyorsa farklı bir sağlayıcıya ihtiyacınız olacaktır.
Bağlantıyı curl ile kontrol edin
Uygulamanızı değiştirmeden önce anahtarın çalıştığını doğrulayın. Modeller uç noktası en ucuz testtir çünkü token üretmez.
export API_KEY="paste-your-key-here"
curl https://api.openaigatewayapi.com/v1/models \
-H "Authorization: Bearer $API_KEY" | grep -o uncensored
Grep komutu, liste içinde varsa model ID'si olan uncensored çıktısını verir; tam JSON listesini görmek için grep'i kaldırın. 401 alırsanız, anahtar yanlış veya Bearer ön eki eksiktir. Şimdi gerçek bir istek gönderin:
curl https://api.openaigatewayapi.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You are a concise technical assistant."},
{"role": "user", "content": "Explain idempotency keys in two sentences."}
],
"temperature": 0.4
}'
Yanıt, normal choices ve usage nesnelerini içerir. Loglamaya değer başlıklar da içerir: destek soruları için X-Request-Id, kalan krediniz için X-Balance-USD ve istek ve eşzamanlılık tavanlarınızı gösteren iki X-RateLimit-Limit-* başlığı.
Resmi openai paketi ile Python
Python'da yalnızca istemci kurucusuna dokunmanız gerekir. Sonrasındaki her şey zaten sahip olduğunuz koddur.
from openai import OpenAI
client = OpenAI(
base_url="https://api.openaigatewayapi.com/v1",
api_key="paste-your-key-here",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You write short, accurate release notes."},
{"role": "user", "content": "Summarise: added retry logic, fixed timeout bug."},
],
temperature=0.5,
max_tokens=200,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
Anahtarı gerçek kodda bir ortam değişkeninden okuyun. Örnek, kod parçasını kısa tutmak için anahtarı sabit olarak yazar. max_tokens burada isteğe bağlıdır; bırakırsanız metin üretimi 100.000 tokenlik pencerenin kalanını (istem ve metin üretimi birlikte) kullanabilir. Yine de ayarlamak, kaçak bir metin üretiminde maliyeti sınırlamanın ucuz bir yoludur.
Akış
Akış, Server-Sent Events kullanır ve bildiğiniz aynı stream=True bayrağını kullanır. Kullanım sayıları akışın sonunda gelir, bu nedenle son parça boş bir choices listesine sahip olabilir.
from openai import OpenAI
client = OpenAI(base_url="https://api.openaigatewayapi.com/v1", api_key="paste-your-key-here")
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "List five edge cases for a date parser."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if getattr(chunk, "usage", None):
print("\ntokens:", chunk.usage.total_tokens)
Kapasite planlaması için önemli olan bir ayrıntı vardır. Akışlı bir istek, ilk tokena değil, akış bitene kadar eşzamanlılık slotunu tutar. Bir istemci bir akışı kapatmadan terk ederse, bu slot beklediğinizden daha uzun süre meşgul kalır.
Node.js örneği
Node SDK'sı aynı iki ayarı farklı adlar altında alır.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.openaigatewayapi.com/v1",
apiKey: process.env.GATEWAY_KEY,
});
const completion = await client.chat.completions.create({
model: "uncensored",
messages: [
{ role: "user", content: "Write a regex that matches ISO 8601 dates, and explain it." },
],
temperature: 0.3,
});
console.log(completion.choices[0].message.content);
Kendi OpenAI entegrasyonuna sahip bir çerçeve kullanıyorsanız, ayarlarında temel URL, API tabanı veya uç nokta adında bir alan arayın. Aynı URL'yi oraya yapıştırmak genellikle yeterlidir. Sohbet ön uçları, ajan çerçeveleri ve editör eklentileri çoğunlukla bu deseni takip eder. temperature, top_p, stop, seed gibi örnekleme parametreleri ve frekans ile varlık cezaları modele iletilir.
Araç çağırma ve JSON modu
Bir modelin gerçek bir uygulamaya uyup uymayacağını belirleyen iki özellik vardır: fonksiyonlarınızı çağırma ve ayrıştırılabilir veri döndürme. İkisi de desteklenir.
Araç çağırma
Araçları tools ile bildirirsiniz, isteğe bağlı olarak bir seçim zorlamak için tool_choice kullanırsınız ve sonuçları role: "tool" ile mesaj olarak gönderirsiniz. Akışlı yanıtlar, standart formatta olduğu gibi tool_calls parçalar halinde iletir.
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.openaigatewayapi.com/v1", api_key="paste-your-key-here")
tools = [{
"type": "function",
"function": {
"name": "get_order_status",
"description": "Look up the status of an order by its ID.",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
},
},
}]
messages = [{"role": "user", "content": "Where is order A-1042?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
msg = first.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
args = json.loads(call.function.arguments)
result = {"order_id": args["order_id"], "status": "shipped"} # your real lookup here
messages.append(msg)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
Her zaman eyleme geçmeden önce argümanları doğrulayın. Model, şemanıza uyan JSON'u çoğu zaman üretir, her zaman değil, bu nedenle call.function.arguments'i her türlü güvenilmeyen girdi gibi ele alın.
JSON modu
Çıkarma ve sınıflandırma işleri için bir JSON nesnesi isteyin ve bunu istemde de belirtin. Talimatlarda JSON'dan bahsetmek, yalnızca bayrağa güvenmekten daha iyi sonuçlar verir.
from openai import OpenAI
import json
client = OpenAI(base_url="https://api.openaigatewayapi.com/v1", api_key="paste-your-key-here")
resp = client.chat.completions.create(
model="uncensored",
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": "Reply with JSON only: {\"sentiment\": string, \"topics\": [string]}."},
{"role": "user", "content": "The docs are clear but the rate limits caught me off guard."},
],
)
data = json.loads(resp.choices[0].message.content)
print(data)
Limitler, hatalar ve yeniden denemeler
Tam anahtar, eşzamanlı 8 istek ve dakika başına 300 istek izni verir. Deneme anahtarı, eşzamanlı 2 istek ve dakika başına 60 istek izni verir. Maksimum istek gövdesi 8 MB'tır. Bir limiti aşarsanız HTTP 429 alırsınız ve hata kodu hangi limiti aştığınızı belirtir.
| Hata kodu | Anlamı | Ne yapılmalı |
|---|---|---|
rate_limited | Dakika başına çok fazla istek | Üreticiyi yavaşlatın veya işi dakika boyunca dağıtın |
concurrency | Aynı anda çok fazla istek | İşçi sayınızı 8 veya daha az olarak düşürün veya deneme anahtarında 2 olarak ayarlayın |
429 ile Retry-After: 5 | Geçici aşırı yüklenme | Verilen saniyeleri bekleyin ve tekrar deneyin |
SDK'lar zaten bazı hataları yeniden dener. Bir patlamanın toplu işi çökertmemesi için 429 durum kodu için kendi hata yönetiminizi ekleyin:
import time
from openai import OpenAI, RateLimitError
client = OpenAI(
base_url="https://api.openaigatewayapi.com/v1",
api_key="paste-your-key-here",
max_retries=0,
)
def ask(prompt, attempts=5):
for i in range(attempts):
try:
r = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": prompt}],
)
return r.choices[0].message.content
except RateLimitError as e:
wait = float(e.response.headers.get("retry-after", 2 ** i))
time.sleep(wait)
raise RuntimeError("still rate limited after retries")
Başarısız veya reddedilen istekler ücretlendirilmez, bu nedenle bir yeniden deneme döngüsü faturanızı iki katına çıkarmaz. Eşzamanlılık limitinize göre boyutlandırılmış bir semafor, asenkron kodda limiti aşmamanın en temiz yoludur.
Mevcut uygulamayı geçirmek
Çalışan bir uygulamanız varsa, yeni değerleri sabit kodlamayın. Base URL'i, anahtarı ve model adını ortam değişkenlerine yazın ki dağıtım yapmadan ortamlar arasında geçiş yapabilesiniz. Bu aynı zamanda aynı test paketini iki arka uçta çalıştırıp çıktıları yan yana karşılaştırmanıza da olanak tanır.
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ.get("LLM_BASE_URL", "https://api.openaigatewayapi.com/v1"),
api_key=os.environ["LLM_API_KEY"],
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")
def complete(messages, **kw):
return client.chat.completions.create(model=MODEL, messages=messages, **kw)
Ardından kısa bir geçiş rutini üzerinden ilerleyin:
- Mevcut istem setinizi yeni uç noktada çalıştırın ve çıktıları kendiniz okuyun. Otomatik kontroller yapısal hataları yakalar, tonu değil.
- JSON ayrıştıran kodun
response_formatayarlandığında hala çalıştığını kontrol edin ve nesnenin etrafındaki rastgele metinleri silen bir yedek plan tutun. - Gerçek token sayılarını
usage'den ölçün, çünkü farklı bir model metni farklı şekilde tokenize eder ve eski tahminleriniz yanlış olabilir. - Eşzamanlılık sınırının yük altında başarısız olan ilk şey olmaması için işçi havuzunuzu 8 veya daha az olarak ayarlayın.
- Trafiğin küçük bir payına dağıtın, 429 oranını ve hata günlüklerini izleyin, ardından genişletin.
Takımlar, bu süreçte sistem istemini sıklıkla unutur. Reddetmeye yatkın bir modeli uyumlu davranmaya ikna etmek için yazılan istemler genellikle gereksiz ve çıktıyı karmaşık hale getirebilecek belirsizlik ifadeleri içerir. Kendi isteminizi tekrar okuyun ve artık hiçbir işlevi olmayan kısımları kesin.
Geçiş yapmadan önce bilmeniz gerekenler
Uyumluluk istek ve yanıt formatını kapsar. Bu, herhangi bir model üreticisinin resmi API'si olduğu anlamına gelmez. Hizmet, bağımsız bir sağlayıcı tarafından barındırılan ve yasal yetişkin kullanım için içerik reddi olmadan cevap verecek şekilde ayarlanmış tek bir açık ağırlıklı modeli çalıştırır. Satıcılar arasında bir yönlendirici olmadığı için arkasında başka modellerin bir menüsünü bulamazsınız. Reşit olmayanlar ile ilgili cinsel içerik izin verilmez ve bu limit değiştirilemez.
Büyük çok modellerli bir platformdan üç pratik farkı dikkate alarak plan yapın:
- Tek model. Kimliği
uncensored'dir. Kodunuz görevlere göre modeller arasında geçiş yapıyorsa bunu tek bir değere indirgeyin. - Yalnızca metin. Bu uç noktaya giden yoldan herhangi bir görüntü, ses veya gömme çağrısını kaldırın.
- İstem davranışı farklıdır. Farklı bir model talimatları farklı okur, bu nedenle geçiş yaptıktan sonra istemlerinizi ve testlerinizi yeniden çalıştırın. Çıktı kayarsa sistem istemlerini sıkılaştırın.
İstemler eğitim için kullanılmaz. Tam parametre listesi için API belgeleri'ne bakın. Harcamayı tahmin ediyorsanız, fiyatlandırma sayfası her token başı oranları listeler: 1M giriş tokenı başı $0.15 ve 1M çıktı tokenı başı $0.50; ön ödemeli krediden faturalandırılır, abonelik yoktur. Yüklemeler $20 ile $500 arasında değişir ve kredi süresi dolmaz. Birden fazla hizmetin önünde bir proxy katmanı kullanmayı değerlendiriyorsanız, LLM ağ geçitleri sayfası, bu ek hareketli parçanın ne zaman işe yarayacağını kapsar.
Daha fazla kılavuz
Sorular ve cevaplar
Bu uç noktayı kullanmak için yeni bir SDK'ya ihtiyacım var mı?
Hayır. Python ve Node için resmi OpenAI SDK'ları, temel URL'yi https://api.openaigatewayapi.com/v1 olarak ayarlayıp bu siteden bir anahtar kullandığınızda çalışır. Özel bir uç nokta ayarlamanıza olanak tanıyan diğer tüm istemciler de aynı şekilde çalışır.
Hangi model ID'sini göndermeliyim?
Her sohbet tamamlama isteğinde model alanına uncensored yazın. /v1/models uç noktasına bir GET isteği göndererek bunu doğrulayabilirsiniz.
Ödemeden test edebilir miyim?
Evet. Kayıt olduktan sonra API anahtarı sayfasında tek tıkla $0.50 deneme kredisi talep edebilirsiniz. Kart gerektirmez, 7 gün geçerlidir ve kişi başı bir kredi ile sınırlıdır.
Embedding veya görüntü üretimi destekliyor mu?
Hayır. API yalnızca metin içindir ve sohbet tamamlamaları ile bir model listesi sunar. Gömme vektörler veya görseller için ayrı bir sağlayıcıya ihtiyacınız vardır.
İstemlerim eğitim için kullanılıyor mu?
Hayır, istemler eğitim için kullanılmaz.
Anahtarınız tek bir formun uzağında
Bir hesap oluşturun, anahtarı kopyalayın ve base URL'yi değiştirin. Kurulum bu kadar basit.