Hızlı başlangıç
İlk isteğinizi yapın: anahtarınızı alın, bir mesaj gönderin ve yanıtı okuyun. API, OpenAI ve Anthropic biçimlerini konuşur; bu yüzden zaten kullandığınız SDK, temel URL'sini ve anahtarını değiştirdikten sonra çalışır.
1. Anahtarınızı alın
Her hesabın bir API anahtarı vardır. Oturum açın, Keys & usage sayfasını açın ve kopyalayın. Anahtar her uç noktada ve her modelde çalışır. Keys & usage
2. İstemcinizi API'ye yönlendirin
Tüm uç noktalar tek bir temel URL altında yer alır. Bir OpenAI SDK'sı onu sonunda /v1 ile alır; bir Anthropic SDK'sı /v1/messages kısmını kendisi eklediği için onsuz alır.
| İstemci | Temel URL |
|---|---|
| OpenAI SDK'ları ve OpenAI uyumlu istemciler | https://api.shannon-ai.com/v1 |
| Anthropic SDK'ları | https://api.shannon-ai.com |
Üç uç nokta metin üretir. Aynı modellere ulaşırlar; kodunuzun zaten kullandığı biçime uyanı seçin.
| Uç nokta | Biçim |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. İlk isteği gönderin
Chat Completions uç noktasında shannon-3 modeline bir user mesajı gönderin. YOUR_API_KEY yerine anahtarınızı koyun.
POST https://api.shannon-ai.com/v1/chat/completions
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1"
)
response = client.chat.completions.create(
model="shannon-3",
messages=[
{"role": "user", "content": "Hello, Shannon!"}
],
max_tokens=1024
)
print(response.choices[0].message.content) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const response = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024
});
console.log(response.choices[0].message.content); package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("YOUR_API_KEY")
config.BaseURL = "https://api.shannon-ai.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "shannon-3",
Messages: []openai.ChatCompletionMessage{
{Role: "user", Content: "Hello, Shannon!"},
},
MaxTokens: 1024,
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
} curl -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
],
"max_tokens": 1024
}' | Alan | Tür | Varsayılan | Açıklama |
|---|---|---|---|
model | string | Yanıt verecek modelin kimliği. Kimlikler Models & pricing sayfasında listelenir. | |
messages | array | Şimdiye kadarki konuşma: role ve content içeren nesneler. Son user mesajı istemdir. Zorunlu. | |
max_tokens | integer | 4096 | İsteğin çıktı bütçesi, 1 ile 65,536 arası. İstek bu miktarı bakiyenizden ayırır ve gerçekten kullandığı kadar ücretlendirilir. |
stream | boolean | false | true, yanıtı yazıldıkça parça parça gönderir. |
İstek gövdesi JSON'dır ve Content-Type: application/json başlığını gerektirir. Alanların tam listesi uç nokta sayfasındadır. Chat Completions
Yanıt
stream olmayan bir çağrı, yanıt tamamlandığında tek bir JSON nesnesi döndürür. Aşağıdaki metinler ve sayılar örnektir.
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! What would you like to work on?",
"reasoning_content": "A greeting. A short, friendly reply fits."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1386,
"completion_tokens": 74,
"total_tokens": 1460
}
} | Alan | Tür | Açıklama |
|---|---|---|
id | string | chatcmpl- ve ardından 32 onaltılık karakter. |
object | string | Her zaman chat.completion. |
created | integer | Yanıtın Unix saniyesi cinsinden zamanı. |
model | string | Yanıt veren modelin yayımlanmış kimliği; bir takma ad ya da başka bir yazım gönderseniz de. |
choices | array | Her zaman index değeri 0 olan tek bir girdi. |
choices[0].message.role | string | Her zaman assistant. |
choices[0].message.content | string | null | Yanıt. Yanıt tool_calls taşıyorsa null olabilir. |
choices[0].message.reasoning_content | string | null | Modelin yanıtından önceki akıl yürütmesi; yoksa null. |
choices[0].message.tool_calls | array | Yalnızca model bildirdiğiniz araçlardan birini çağırdığında bulunur. |
choices[0].finish_reason | string | Bir yanıt için stop, model bir araç çağırdığında tool_calls. |
usage.prompt_tokens | integer | Modelin bu yanıt için okuduğu token'lar. shannon-2-* ve Shannon 3 ailesinde bu, gönderdiğiniz metinden fazla olabilir. |
usage.completion_tokens | integer | Modelin yazdığı token'lar. |
usage.total_tokens | integer | Toplam. Bir Shannon modelinin ücreti bu sayıdan hesaplanır. |
-
usagepara değil, token sayılarını içerir. Çağrının bakiyenizden aldığı miktar Keys & usage sayfasında istek başına gösterilir; nasıl hesaplandığı Limitler ve bakiye sayfasındadır. Limitler ve bakiye - Her yanıtta, hata ve stream dahil,
x-request-idbaşlığı bulunur. İsteğiniz birx-request-idbaşlığı taşıyorsa değeri geri gelir; aksi halde değer 12 onaltılık karakterdir. Günlüklerinizde saklayın: bu tek isteği adlandırır.
Aynı çağrı bir stream olarak
Yanıtı yazılırken okumak için stream değerini true yapın. İsteğin geri kalanı aynı kalır.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1"
)
stream = client.chat.completions.create(
model="shannon-3",
messages=[
{"role": "user", "content": "Hello, Shannon!"}
],
max_tokens=1024,
stream=True
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const stream = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024,
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
} curl -N -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
],
"max_tokens": 1024,
"stream": true
}' Stream'in her frame'i, data: ile başlayan ve bir JSON nesnesi içeren tek bir satırdır. Birkaç satırda yazdırılmış bir frame:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | Frame'ler, sırayla | delta | finish_reason |
|---|---|---|
| Model akıl yürütürken. Sıfır veya daha fazla frame. | {"reasoning_content": "…"} | null |
| Yanıt, parça parça. Sıfır veya daha fazla frame. | {"content": "…"} | null |
Son JSON frame'i. usage bilgisini de taşır; istemeniz gerekmez. | {} | "stop" |
Stream'in sonu: data: [DONE] satırı. |
- Yanıtın durumu
200vecontent-type: text/event-streamolur. Her frame,data: <json>satırı ve ardından boş bir satırdır. : pingsatırı her 15 saniyede bir gelir. Bağlantıyı açık tutan bir yorumdur; SSE istemcileri onu atlar.- Stream açıldıktan sonraki bir hata
data: {"error": {…}}frame'i olarak gelir. Durum200kalır, bu yüzden frame'leri denetleyin.
Çağrı başarısız olursa
Hata, type ve message içeren bir error taşıyan JSON nesnesidir. İlk çağrının en sık karşılaştığı yanıtlar bunlardır.
| Durum | Tür | Mesaj | Ne anlama gelir |
|---|---|---|---|
401 | authentication_error | Missing authentication | API'ye hiçbir anahtar ulaşmadı. Authorization: Bearer ve ardından anahtarınızı gönderin. |
401 | authentication_error | Invalid API key | Anahtar bir hesabın geçerli anahtarı değil. Keys & usage sayfasından yeniden kopyalayın. |
400 | invalid_request_error | unknown model: <id> | model yayımlanmış bir kimlik değil. Models & pricing sayfasındaki bir kimliği kullanın. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type… | Bir alanın JSON türü yanlış ya da messages eksik. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | İsteğin çıktı bütçesi bakiyenize sığmıyor. |
Sonra nereye gitmeli
- Modeller ve fiyatlandırma — Bir model seçin: kimlikler, bağlam pencereleri ve fiyatlar.
- Chat Completions — Çağırdığınız uç noktanın her istek alanı, yanıt alanı ve stream olayı.
- Akış — Bir stream'in frame'leri, keep-alive satırları ve stream içindeki hatalar.
- Fonksiyon Çağırma — Modelin fonksiyonlarınızı çağırmasına izin verin.
- Limitler ve bakiye — Bir isteğin ne ayırdığı ve neye mal olduğu ve kaç istek gönderebileceğiniz.
- API Oyun Alanı — İstekleri tarayıcıda anahtarınızla deneyin.