Skip to content

İlk AI Oturumunuzu Çalıştırın ​

Bu öğreticide bir AI konuşma oturumu oluşturacak, mesajlar gönderecek, Sunucu Gönderimli Olaylar kullanarak yanıtları gerçek zamanlı akış olarak alacak ve AI özellik çalıştırmalarını yürüteceksiniz.

Önkoşullar ​

  • Geçerli bir erişim belirteci olan bir Chainabit hesabı
  • Terminalinizde curl'un mevcut olması
  • AI kredileri içeren bir plan (bakiyenizi /wallet/me adresinden kontrol edebilirsiniz)

Ortam değişkenlerinizi ayarlayın:

bash
export TOKEN="your-access-token"

Adım 1: Mevcut AI Sağlayıcılarını Kontrol Edin ​

Bir oturuma başlamadan önce, planınızın hangi AI sağlayıcılarına erişim sağladığını kontrol edin:

bash
curl -s "https://api.chainabit.com/api/v1/ai/providers" \
  -H "Authorization: Bearer $TOKEN"

Yanıt, her sağlayıcı için bir isAccessible bayrağı içerir:

json
{
  "data": [
    {
      "key": "google",
      "displayName": "Google",
      "isActive": true,
      "isAccessible": true
    },
    {
      "key": "openai",
      "displayName": "OpenAI",
      "isActive": true,
      "isAccessible": true
    },
    {
      "key": "anthropic",
      "displayName": "Anthropic",
      "isActive": true,
      "isAccessible": false
    }
  ]
}

isAccessible: true, planınızın o sağlayıcıya erişim izni verdiği anlamına gelir. Mesaj gönderirken bir sağlayıcı anahtarı (örneğin openai) kullanın.

Ücretsiz plan: Yalnızca google erişilebilirdir. Ücretli planlar ek sağlayıcıların kilidini açar.


Adım 2: Yeni Bir AI Oturumu Oluşturun ​

Bir oturum, bir konuşma zincirini tutar:

bash
curl -s -X POST "https://api.chainabit.com/api/v1/ai/sessions" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Fitness coaching" }'

Yanıt:

json
{
  "data": {
    "id": "session_01HQS...",
    "title": "Fitness coaching",
    "status": "active",
    "startedAt": "2026-03-17T10:00:00.000Z"
  }
}

Oturum ID'sini kaydedin:

bash
export SESSION_ID="session_01HQS..."

Adım 3: Bir Mesaj Gönderin ​

Oturuma bir mesaj gönderin. Hangi AI'nin kullanılacağını kontrol etmek için isteğe bağlı olarak bir provider (sağlayıcı) ve effortMode (çaba modu) geçirebilirsiniz:

bash
curl -s -X POST "https://api.chainabit.com/api/v1/ai/sessions/$SESSION_ID/messages" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "I want to build a morning reporting workflow. I have 45 minutes before work. What activities should I include?",
    "provider": "openai",
    "effortMode": "thinking"
  }'
AlanDeğerlerAçıklama
providergoogle, openai, anthropic, mistral ve diğerleri — güncel tam liste için GET /ai/providersKullanılacak sağlayıcı. Varsayılan olarak google. google dışındaki her sağlayıcı, o sağlayıcının yetkisine sahip ücretli bir plan gerektirir.
effortModebasic, thinking, proModel katmanı. basic = hızlı, thinking = dengeli, pro = en yetenekli.

Her iki alan da isteğe bağlıdır — bunları atlamak planınızın varsayılanını kullanır.

Yanıt:

json
{
  "data": {
    "sessionId": "session_01HQS...",
    "userMessage": {
      "id": "msg_01HQT...",
      "role": "user",
      "content": "I want to build a morning reporting workflow. I have 45 minutes before work. What activities should I include?",
      "createdAt": "2026-03-17T10:01:00.000Z"
    },
    "assistantMessage": {
      "id": "msg_01HQU...",
      "role": "assistant",
      "content": "",
      "status": "pending",
      "createdAt": "2026-03-17T10:01:00.100Z"
    },
    "run": { "id": "run_01HQU...", "status": "queued" },
    "resolvedModel": { "modelKey": "gpt-4o", "displayName": "GPT-4o", "provider": "openai", "reason": "explicit" },
    "effortDowngrade": null
  }
}

Bu uç nokta hem kullanıcı mesajını hem asistan mesajını, artı yanıtı üretecek çalıştırmayı (run) oluşturur ve döndürür. Asistan mesajının ID'sini kaydedin — bir sonraki adımda akışa alacağınız budur, kullanıcı mesajının değil:

bash
export MESSAGE_ID="msg_01HQU..."

Adım 4: SSE Yoluyla AI Yanıtını Akış Olarak Alın (Stream) ​

AI yanıtını gerçek zamanlı olarak almak için SSE akış uç noktasına bağlanın. Arabelleğe almayı devre dışı bırakmak için curl -N kullanın:

bash
curl -N "https://api.chainabit.com/api/v1/ai/sessions/$SESSION_ID/messages/$MESSAGE_ID/stream" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: text/event-stream"

SSE Olay Formatı ​

Sunucu, olayları standart SSE formatında gönderir. Bir akıştaki ilk çerçeve bir stream.connected ön bilgisidir; sonrasındaki her olay numaralandırılmış bir zarftır (bir id: satırı artı bir eventId/type/runId/payload JSON gövdesi — timestamp ve v alanları kısalık için aşağıda atlanmıştır):

event: stream.connected
data: {"runId": "run_01HQU..."}

id: 1
event: message.delta
data: {"eventId":1,"type":"message.delta","runId":"run_01HQU...","payload":{"delta":"Great question! Here's a"}}

id: 2
event: message.delta
data: {"eventId":2,"type":"message.delta","runId":"run_01HQU...","payload":{"delta":" structured 45-minute morning reporting workflow"}}

id: 3
event: message.delta
data: {"eventId":3,"type":"message.delta","runId":"run_01HQU...","payload":{"delta":" that balances exercise, mindfulness, and preparation:\n\n"}}

id: 4
event: message.completed
data: {"eventId":4,"type":"message.completed","runId":"run_01HQU...","payload":{"runId":"run_01HQU...","messageId":"msg_01HQU...","content":"Great question! Here's a structured 45-minute morning reporting workflow..."}}

Olay Türleri ​

OlayAçıklama
message.deltaYanıt içeriğinin bir parçası
message.completedAkış olarak gelen asistan içeriği tamamlandı
tool.*Araç-kartı, ilerleme, onay ve sonuç olayları
run.error / run.failedÜretim sırasında bir hata oluştu
run.settlement.completedÇalıştırma (Run) tamamen çözüldü ve sonlandı

Adım 5: Konuşma Geçmişini Listeleyin ​

Bir oturum için tam konuşma zincirini alın:

bash
curl -s "https://api.chainabit.com/api/v1/ai/sessions/$SESSION_ID/messages" \
  -H "Authorization: Bearer $TOKEN"

Yanıt:

json
{
  "data": [
    {
      "id": "msg_01HQT...",
      "role": "user",
      "content": "I want to build a morning reporting workflow. I have 45 minutes before work. What activities should I include?",
      "createdAt": "2026-03-17T10:01:00.000Z"
    },
    {
      "id": "msg_01HQU...",
      "role": "assistant",
      "content": "Great question! Here's a structured 45-minute morning reporting workflow...",
      "createdAt": "2026-03-17T10:01:05.000Z"
    }
  ],
  "meta": {
    "total": 2
  }
}

Adım 6: Bir AI Çalıştırması (Run) Oluşturun ​

AI çalıştırmaları, serbest biçimli bir oturum yerine belirli, yetkilendirme ile korunan bir özelliği (feature) yürütür — özellik anahtarı yol (path) içinde yer alır ve istek gövdesi rastgele bir input nesnesi değil, sohbet tarzı bir messages dizisidir:

GET /ai/features, planınızın erişimi olan her özellik anahtarını listeler. İsteğe bağlı gövde alanları: temperature, maxOutputTokens, idempotencyKey, provider ve effortMode (basic | thinking | pro).

Yanıt (201 Created, veya bu tam istek daha önceki aynı bir çağrıdan hâlâ kuyrukta/çalışıyorsa 200 OK):

json
{
  "data": {
    "requestId": "req_01HQV...",
    "runId": "run_01HQV...",
    "result": {
      "finishReason": "queued"
    }
  }
}

Çalıştırma ID'sini kaydedin:

bash
export RUN_ID="run_01HQV..."

GET /ai/runs/$RUN_ID, kuyruktan çıktıktan sonra çalıştırmanın güncel durumunu döndürür.


Adım 7: Çalıştırma Çıktısını Akış Olarak Alın (Stream) ​

AI çalıştırma çıktısını, mesajları akış olarak aldığınız şekilde akış olarak alın:

Çıktı — Adım 4'teki mesaj akışında olduğu gibi, ilk çerçeve bir stream.connected ön bilgisidir ve sonrasındaki her olay numaralandırılmış bir zarftır (timestamp ve v alanları kısalık için atlanmıştır, bkz. Adım 4):

event: stream.connected
data: {"runId": "run_01HQV..."}

id: 1
event: run.started
data: {"eventId":1,"type":"run.started","runId":"run_01HQV...","payload":{"runId":"run_01HQV..."}}

id: 2
event: message.delta
data: {"eventId":2,"type":"message.delta","runId":"run_01HQV...","payload":{"delta":"## Weekly Summary: March 10-16\n\n"}}

id: 3
event: message.delta
data: {"eventId":3,"type":"message.delta","runId":"run_01HQV...","payload":{"delta":"**Workout Chain:** 5/7 days completed (71%)\n"}}

id: 4
event: message.completed
data: {"eventId":4,"type":"message.completed","runId":"run_01HQV...","payload":{"runId":"run_01HQV...","messageId":"msg_01HQW...","content":"## Weekly Summary: March 10-16\n\n..."}}

id: 5
event: run.settlement.completed
data: {"eventId":5,"type":"run.settlement.completed","runId":"run_01HQV...","payload":{"status":"completed"}}

Bağlantı Kopmalarını İşleme ​

SSE bağlantıları ağ sorunları nedeniyle kopabilir. Yeniden bağlantıyı işlemek için:

  1. Aldığınız son olayı izleyin
  2. Bağlantı koptuğunda, aynı uç noktaya yeniden bağlanın
  3. Üretim hala devam ediyorsa, sunucu kaldığı yerden devam edecektir
bash
# Bağlantı koparsa, sadece yeniden bağlanın:
curl -N "https://api.chainabit.com/api/v1/ai/sessions/$SESSION_ID/messages/$MESSAGE_ID/stream" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: text/event-stream"

Eğer run.settlement.completed, run.failed veya run.error alırsanız, akış sonlanmıştır ve yeniden bağlantı gerekmez.


Özet ​

Bu öğreticide şunları yaptınız:

  1. Planınızdaki mevcut AI modellerini listelediniz
  2. Bir konuşma zinciri için bir AI oturumu oluşturdunuz
  3. Bir mesaj gönderdiniz ve ID'sini yakaladınız
  4. SSE aracılığıyla gerçek zamanlı olarak AI yanıtını akış olarak aldınız
  5. Tam konuşma geçmişini aldınız
  6. Belirli bir özellik için bir AI çalıştırması oluşturdunuz
  7. Aynı SSE deseniyle çalıştırma çıktısını akış olarak aldınız

Sonraki Adımlar ​

Built with purpose.