OpenAI uyumlu uç noktaya geç
OpenAI SDK'sını kullanan bir uygulamayı tek satırlık temel URL değişimiyle Moonborn'a taşı. Akış (streaming), araç çağrısı ve fonksiyon çağrısı değişmeden geçer.
Halihazırda OpenAI SDK'sını kullanan bir ürün varsa, Moonborn'a en ucuz geçiş yolu OpenAI uyumlu katman (shim)'dır. /v1/openai/chat/completions uç noktası OpenAI şekilli istekleri kabul eder, OpenAI şekilli yanıtlar döner ve model alanı bir GPT model adı yerine bir persona kimliği taşır.
Kod tarafında üç şey değişir: API anahtarı, temel URL, ve model alanı. Geri kalan her şey (akış, araç / fonksiyon çağrısı, choices dizisi, finish_reason) aynı kalır — uygulamanın geri kalanını yeniden yazman gerekmez.
Bu rehberi bitirdiğinde
- OpenAI SDK'sını tek satırlık yapılandırma değişikliğiyle Moonborn'a yönlendirebileceksin.
modelalanına bir persona kimliğinin nasıl yazılacağını bileceksin.- Akışlı (streaming) yanıtları olduğu gibi alabileceksin.
- Araç (tool) / fonksiyon çağrısını Moonborn üzerinden çalıştırabileceksin.
- Persona'larını OpenAI'nin models endpoint'i şeklinde listeleyebileceksin.
- OpenAI uyumlu katmanın neyi kapsamadığını (görsel, vektör — embedding, ses, asistanlar) bilip onları nereye yönlendireceğini ayırt edebileceksin.
Ön koşul: OpenAI SDK'sı kullanan bir uygulama, bir Moonborn API anahtarı ve en az bir persona kimliği. Persona'n yoksa İlk persona'yı baştan sona üret rehberine bak.
1. İstemciyi (client) tek satırla değiştir
OpenAI SDK'sını içe aktardığın yerde temel URL ve API anahtarını değiştir.
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.MOONBORN_API_KEY,
baseURL: 'https://api.moonborn.co/v1/openai',
});Üç değişiklik:
| Alan | Önce | Sonra |
|---|---|---|
| API anahtarı ortam değişkeni | OPENAI_API_KEY | MOONBORN_API_KEY |
baseURL / base_url | (varsayılan OpenAI) | https://api.moonborn.co/v1/openai |
model | gpt-4o, gpt-4-turbo | persona://<persona_id> |
2. Bir çağrı yap
const reply = await client.chat.completions.create({
model: 'persona://per_01H...',
messages: [{ role: 'user', content: 'Seni en çok ne tetikler?' }],
});
console.log(reply.choices[0].message.content);Yanıt şekli OpenAI'nin yanıtına bire bir uyar:
{
"id": "chatcmpl_...",
"object": "chat.completion",
"choices": [
{
"message": {
"role": "assistant",
"content": "Beni tetikleyen şey aradaki boşluk..."
},
"finish_reason": "stop"
}
]
}3. Akış (streaming) değişmeden geçer
const stream = await client.chat.completions.create({
model: 'persona://per_01H...',
messages: [{ role: 'user', content: 'Sessiz bir gerçek söyle.' }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}SSE parça (chunk) deseni, delta alanı ve finish_reason — hepsi OpenAI ile aynıdır. Drift zarfı, akış kapanırken son HTTP yanıt başlıkları olarak gelir.
4. Araç / fonksiyon çağrısı
const reply = await client.chat.completions.create({
model: 'persona://per_01H...',
messages: [{ role: 'user', content: "İstanbul'da saat kaç?" }],
tools: [
{
type: 'function',
function: {
name: 'get_time',
description: 'Returns the current time in a given timezone',
parameters: {
type: 'object',
properties: { tz: { type: 'string' } },
required: ['tz'],
},
},
},
],
});
const toolCall = reply.choices[0].message.tool_calls?.[0];
if (toolCall?.function.name === 'get_time') {
// Kendi fonksiyonunu çağır, sonra sonucu geri gönder
}Araç çağrıları olduğu gibi geçer. Önemli olan şu: persona'nın sesi araç sonucu ele alımını da sarar. Yani fonksiyonun döndürdüğü ham veriyi karakter kendi tonunda açıklar — jenerik bir asistan tonunda değil.
5. Persona'ları OpenAI model listesi olarak göster
OpenAI'nin models.list() çağrısı Moonborn'da çalışma alanının persona'larını döner — IDE seçicileri, yönetim arayüzleri veya bir açılır listeye persona seçtirmek için bedava bir API'dir.
const models = await client.models.list();
for (const m of models.data) {
console.log(m.id); // persona://per_01H...
}OpenAI uyumlu katman neleri kapsamaz
- chat.completions (eşzamanlı + akış)
- chat.completions (araç / fonksiyon çağrısı)
- models.list (persona kataloğu)
- Drift zarfı yanıt başlıklarındaPlan gereksinimi
Free ve üzeri. OpenAI uyumlu uç nokta çalışma alanının genel hız limitini miras alır — plana göre tabanlar hız limitleri başvurusunda.
Başardın
Uygulamanın sohbet çağrısını Moonborn'a yönlendirdiysen, persona'nın yanıtını gördüysen ve mevcut OpenAI araç / akış kodun değişmeden çalıştıysa geçiş tamamdır.
Sonraki adım
Claude Desktop / Cursor / agent çatıları için MCP üzerinden bağlanma.
Katmanın tam yüzeyi, başlık anlambilimi, gözetilen sınırlar.
Plana göre limit tabanları ve x-ratelimit-* başlık anlambilimi.
OpenAI uyumlu katman altında dönen 4xx / 5xx kodları ve OpenAI eşlemesi.