TR ▾

Deneme kredisiyle başlayın

E-posta ve parola, anahtar hemen ekranda.

https://api.uncensoredllmhub.com/v1

LLM Akışından Bilinmeyen Hata: Nedenleri ve Çözümler

LLM stream'inden sürekli olarak bilinmeyen hata alıyorsanız (daha fazla bilgi edinin), bu mesaj neredeyse her zaman belirli bir nedeni gizler: yanlış base URL, hız limiti, aşırı büyük bir istek veya olayları arabellekleyen bir proxy. Bu sayfa, hangisinin olduğunu nasıl bulacağınızı ve nasıl düzelteceğinizi gösterir.

güncellendi

Büyüteç altında kırık bir segmenti olan, akış hatasını temsil eden, parlayan veri paketleri taşıyan boru

Temel noktalar

  • Metin istemciden geldiğinden, gerçek hata gövdesini ve durumu görmek için curl ile çağrıyı yeniden üretin.
  • HTTP 429 ve rate_limited veya concurrency kodu, yoğun bir hesapta en yaygın nedendir ve bir akış, sona erene kadar slotunu korur.
  • Base URL'yi, anahtarı, model ID'sini (uncensored), gövde boyutunu (8 MB) ve toplam token sayısını (100.000) diğer her şeyden önce kontrol edin.
  • Yalnızca 429 ve ağ kesintilerini yeniden deneyin, Retry-After için bekleyin ve eşzamanlılığı anahtar limitinin altında tutun.

Mesajın aslında size neyi anlattığı

unknown error from llm stream learn more için arama yaptıysanız, büyük olasılıkla bir sohbet ön yüzünde, bir editör eklentisinde veya bir ajan çerçevesinde bir bildirim veya kırmızı satır görüyorsunuz. Bu ifade istemciden gelir. Uygulamanın akışlı bir yanıt istediğini, akış sırasında veya öncesinde bir şeylerin ters gittiğini ve uygulamanın bunu nasıl açıklayacağını bilmediğini gösterir. API, sorunları bir HTTP durumu ve bir JSON hata gövdesi ile bildirir; istemci ise bu ayrıntıyı yok saymıştır.

Bu iyi bir haber, çünkü ayrıntıyı geri alabileceğiniz anlamına gelir. İstemcinin dışında aynı isteği gönderin, durum satırını ve gövdeyi okuyun; neden genellikle bir veya iki denemede açıktır. Bu sayfanın geri kalanı, bu API'de genellikle hangi sırayla ortaya çıkan nedenleri sırayla inceler, ardından gerçek hatayı gizlemek yerine yazan küçük bir akış istemcisi sunar.

Başlangıçtan itibaren akılda tutulması gereken bir şey: akışlı bir isteğin iki hata noktası vardır. İlk bayt gelmeden önce, sunucu isteği reddettiğinde (kötü anahtar, kötü URL, bir limit) başarısız olabilir. Veya bazı metinler zaten geldikten sonra bağlantı koptuğunda, akışın ortasında başarısız olabilir. Çözümler farklıdır, bu yüzden gördüğünüz iki durumdan hangisi olduğunu not edin. Yanıt hiç başlamıyorsa iki ila dört bölümlere bakın. Başlar ve sonra durursa proxy'ler ve zaman aşımıları bölümüne bakın.

Base URL'yi, anahtarı ve modeli önce kontrol edin

Yeni kurulumlardaki çoğu akış hatası üç küçük hatadan kaynaklanır. Bunları elemek bir dakika sürer.

  1. Base URL. Bu https://api.uncensoredllmhub.com/v1 olmalıdır; /v1 içermeli ve sonuna /chat/completions eklenmemelidir. İstemciler yolu kendileri ekler. Tam uç noktayı, base bekleyen bir alana yapıştırırsanız, istemci var olmayan bir yola istek gönderir ve belirsiz bir hata bildirir.
  2. Anahtar. Başlık Authorization: Bearer YOUR_KEY şeklindedir. Yanlış bir boşluk, anahtarla birlikte kopyalanan bir satır sonu veya başka bir hizmetten gelen bir anahtar aynı şekilde başarısız olur. Emin değilseniz API anahtarı sayfasından anahtarı oluşturun veya kopyalayın.
  3. Model ID. Tek model uncensored'dir. Açılır menü sunan istemciler genellikle başka bir sağlayıcıdan bir ad ön doldurur. ID'yi elle yazın ve sunucunun ne listelendiğini doğrulamak için GET /v1/models çağrısını yapın.

Üçünü birden test etmenin hızlı bir yolu modeller çağrısıdır. Akış yapmaz, bu yüzden bağlantı veya anahtar sorununu bir akış sorunundan ayırır:

curl -i https://api.uncensoredllmhub.com/v1/models   -H "Authorization: Bearer $API_KEY"

Bu normal bir liste döndürürse, URL ve anahtar sorunlu değildir ve şüphelenmeyi bırakabilirsiniz. Hata alırsanız, akış ile ilgili herhangi bir şeyi değiştirmeden önce bu sorunu düzeltin. Ayrıca hesabınızda kredi olduğundan emin olun: API, yanıt başlıklarında X-Balance-USD aracılığıyla kalan bakiyenizi gönderir; bu, anahtar yoğun kullanım sonrası aniden çalışmayı bıraktığında işe yarar. fiyatlandırma sayfası bakiye yükleme işlemlerini açıklar ve yeni hesaplar anahtar sayfasından $0.50 deneme kredisi talep edebilir.

Hız limitleri ve slotu tutan akış

Bir sonraki en yaygın neden HTTP 429'dur. Üç farklı türü vardır ve istemciniz bunların hepsini aynı yararsız mesajda birleştirir.

SinyalAnlamıNe yapılmalı
429, kod rate_limitedAnahtar başına dakikada çok fazla istekYavaşlayın; tam anahtar dakika başına 300, deneme anahtarı 60 izin verir
429, kod concurrencyAynı anda çok fazla istek çalışıyorKuyruğa alın; tam anahtar eşzamanlı olarak 8'e izin verir, deneme anahtarı 2'ye
429 ile Retry-After: 5Servis tarafında geçici aşırı yüklenme5 saniye bekleyin, ardından yeniden deneyin

Eşzamanlılık limiti, akışın nasıl çalıştığı nedeniyle insanları şaşırtandır. Akışlı bir istek, ilk token gelmeden önce değil, akış bitene kadar slotunu işgal eder. Uygulamanız her mesaj için bir akış açar ve eskisini kapatmazsa (örneğin kullanıcı ayrılır ve UI isteği iptal etmeyi unutursa), bu slotlar alınır kalır. Limiti 2 olan bir deneme anahtarında, iki terk edilmiş akış üçüncü mesajın başarısız olması için yeterlidir.

Belirtiler tutarlıdır. İlk birkaç mesaj çalışır, sonra hatalar başlar, ardından kısa bir bekleme sonrasında her şey tekrar çalışır. Bu eşleşiyorsa, artık ihtiyaç duymadığınız akışları iptal edin (tarayıcıda bir AbortController ile, sunucuda yanıtı kapatarak) ve kendi kodunuzdaki eşzamanlı çağrı sayısını sınırlayın. Ajantlar genellikle suçludur: aynı anda on araç çağrısı başlatan bir planlayıcı, deneme anahtarında hemen limite çarpar.

Yanıt başlıkları, nerede olduğunuzu görmenize yardımcı olur. X-RateLimit-Limit-Requests ve X-RateLimit-Limit-Concurrency, kullandığınız anahtara uygulanan limitleri gösterir; X-Request-Id ise destek ile ilgili olarak sormanız gerekirse çağrıyı tanımlar.

İstek boyutu ve bağlam uzunluğu

Bir istek çok büyük olduğu için de reddedilebilir. İki sayı önemlidir. Gövde en fazla 8 MB olabilir ve istem artı tamamlama, 100,000 token'lık bir bağlam penceresine sığmalıdır. Her adımda tüm sohbeti yeniden gönderen sohbet ön uçları bu limitlere yavaşça çarpar ve sonra birdenbire: sohbet bir saat çalışır, sonra tek bir uzun mesaj veya yapıştırılmış bir dosya onu aşar ve geçmiş istekte hala olduğu için sonraki her adım başarısız olur.

Hata uzun bir oturumdan sonra başlarsa, kısa yeni bir konuşma ile test edin. Bu çalışırsa, geçmiş nedendir. Eski adımları atlayarak, bunları tek bir mesajda özetleyerek veya yeni bir sohbet başlatarak kısaltın. Büyük yapıştırılmış belgeler diğer tetikleyicidir. Yüzlerce kilobaytlık bir metin dosyası iyidir, ancak base64 blobları veya çok büyük günlükler beklediğinizden daha hızlı 8 MB'a ulaşabilir.

max_tokens ayarlamanıza gerek yoktur, çünkü tamamlama pencerede kalanı kullanabilir. Ayarlarsanız, istem token'ları ile max_tokens toplamının 100.000'in altında olduğundan emin olun. Uzun bir geçmişin üzerine büyük bir max_tokens sabit kodlayan bir istemci, istem tek başına uygun görünse bile toplamı pencerenin ötesine taşıyabilir.

Proxy'ler, arabellekleme ve zaman aşımıları

Akış, sunucu tarafından gönderilen olayları kullanır: küçük parçaları üretildikça ileten uzun ömürlü bir HTTP yanıtı. Sizin ile API arasındaki, tüm yanıtı iletmeden önce bekleyen her şey bunu bozar. Sonuç ya uzun bir sessizlik ve ardından bir patlama ya da bir zaman aşımı ve genel hatadır.

Kendi kurulumunuzda bunları arayın:

  • Ters proxy'ler. API'yi nginx gibi bir proxy üzerinden yönlendiriyorsanız yanıt arabellekleme devre dışı bırakın ve okuma zaman aşımını beklediğiniz en uzun yanıtın üzerine çıkarın. 100.000 token penceresinden gelen uzun yanıtlar biraz zaman alabilir.
  • Kurumsal veya antivirüs proxy'leri. Bazıları HTTPS trafiğini denetler ve gövdeyi tutar. Bunu elemek için bir telefon noktasından test edin.
  • Sunucusuz işlevler. Çoğu platform, akışı etkinleştirmediğiniz sürece yürütme süresini sınırlar veya yanıtları arabelleğe alır. Akış her seferinde aynı sayıda saniyede sona eriyorsa, bir platform zaman sınırı muhtemel bir nedendir.
  • Tarayıcı uzantıları ve VPN'ler. Nadiren de olsa bağlantıları kesebilirler.

Buraya işaret eden ipucu, bir yanıtın ortasında bir hatadır ve her denemede aynı kesilme süresiyle gerçekleşir. Bir hız limiti isteği başta reddederdi, bu yüzden her zaman örneğin 30 saniyede gerçekleşen akış ortası bir kesme neredeyse asla bir limit değildir.

Gerçek hatayı gösteren bir istemci

Dostane mesajdan ziyade gerçeği istediğinizde bunu kullanın. OpenAI SDK özel durumlarını yakalar, durumu ve hata gövdesini yazdırır ve varsa yeniden deneme ipucunu okur.

import time
from openai import OpenAI, APIConnectionError, APIStatusError, RateLimitError

client = OpenAI(
    base_url="https://api.uncensoredllmhub.com/v1",
    api_key="YOUR_API_KEY",
)

def stream_once(messages):
    stream = client.chat.completions.create(
        model="uncensored",
        messages=messages,
        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("\n[usage]", chunk.usage)

messages = [{"role": "user", "content": "Write two sentences about harbours."}]

for attempt in range(4):
    try:
        stream_once(messages)
        break
    except RateLimitError as e:
        wait = int(e.response.headers.get("retry-after", 5))
        print("429:", e.body, "- waiting", wait, "s")
        time.sleep(wait)
    except APIStatusError as e:
        print("status", e.status_code, e.body)
        print("request id:", e.response.headers.get("x-request-id"))
        break
    except APIConnectionError as e:
        print("connection problem:", e)
        time.sleep(2)

Terk edilmiş akışların slotlarını serbest bırakması için bir iptal sinyali ile Node'da aynı fikir:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.uncensoredllmhub.com/v1",
  apiKey: process.env.API_KEY,
});

const controller = new AbortController();

try {
  const stream = await client.chat.completions.create(
    {
      model: "uncensored",
      messages: [{ role: "user", content: "Write two sentences about harbours." }],
      stream: true,
    },
    { signal: controller.signal }
  );
  for await (const chunk of stream) {
    process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
  }
} catch (err) {
  console.error("status:", err.status, "body:", err.error);
}
// call controller.abort() when the user leaves the page

Ve her istemciyi resimden çıkaran ham bir curl çağrısı. -N curl'ün kendi arabelleklemesini kapatır ve -i durum satırını ve başlıkları, X-Request-Id dahil basar:

curl -N -i https://api.uncensoredllmhub.com/v1/chat/completions   -H "Authorization: Bearer $API_KEY"   -H "Content-Type: application/json"   -d '{"model":"uncensored","stream":true,"messages":[{"role":"user","content":"Say hello."}]}'

curl metini iyi akışıyorsa ve uygulamanız yapmıyorsa, API sağlıklıdır ve sorun uygulamada, proxy'sinde veya ayarlarında oturur. curl bir 429 veya başka bir durum gösterirse, artık kesin nedeni biliyorsunuz.

Şeyleri daha kötü yapmayan yeniden deneme kuralları

Yeniden denemeler geçici sorunlarla yardımcı olur ve kalıcı olanlarla zarar verir. Kısa bir politika sizi sorunlardan korur.

  • 429 hatalarını ve kopan bağlantıları yeniden deneyin. Retry-After varsa bekleyin, yoksa birkaç saniye bekleyin ve paralel işçilerin aynı anda yeniden denemesini önlemek için rastgele bir gecikme ekleyin.
  • Kimlik doğrulama hatalarını veya aşırı büyük istekleri yeniden denemeyin. Sonuç değişmeyecektir ve her yeniden deneme yalnızca gürültü ekler.
  • Denemeleri üç veya dört ile sınırlayın, ardından kullanıcıya gerçek hata metnini gösterin.
  • Kendi eşzamanlılığınızı anahtar limitinizin altında sınırlayın. Tam bir anahtar üzerinde 6'lık bir semafor, aynı anahtarı kullanan ikinci bir araç için yer bırakır.
  • Bir akım yarıda kesilirse, kısmi metni koruyun. Metni bir asistan mesajı olarak yeniden gönderin ve modeli devam etmesi için isteyin; sıfırdan yeniden oluşturmak yerine.

Başarısız veya reddedilen istekler ücretlendirilmez, bu nedenle tekrarlanan test çağrılarıyla hata ayıklama kredinizi tüketmez. Başarılı çağrılar, 1M input token başına $0.15 ve 1M output token başına $0.50'dan faturalandırılır; normal şekilde tamamlanan kısmi bir akış basitçe kısa bir yanıttır. İstek formatı hakkında daha fazla detay API dokümantasyonunda yer almaktadır.

Yukarıdakilerin tümünü yaptıysanız ve hâlâ mesajı görüyorsanız, başarısız bir çağrının X-Request-Id değerini, deneme zamanı ve başarısızlığın ilk token'dan önce mi sonra mı gerçekleştiği bilgisiyle birlikte destek sayfasına gönderin. Bu bilgiler, yaşananları izlemek için yeterlidir.

Sorular ve cevaplar

Uygulamam neden LLM stream'inden herhangi bir ayrıntı olmadan bilinmeyen hata bildiriyor?

Bu ifade, altta yatan HTTP durumunu gizleyen istemci uygulamasından gelir. Gerçek durumu ve JSON hata yanıtını görmek için isteği -i seçeneğiyle curl ile tekrarlayın.

429 hatası hizmetin kapalı olduğu anlamına mı gelir?

Genellikle hayır. Bu, bir dakika başına veya eşzamanlılık limitini aştığınızı veya hizmeti Retry-After üzerinden 5 saniye beklemenizi istediğini gösterir. Yavaşlayın veya istekleri kuyruğa alın ve yeniden deneyin.

Neden birkaç mesaj için çalıştıktan sonra hata veriyor?

Akışlar, tamamlanana kadar eşzamanlılık slotunu tutar. Önceki akışlar kapatılmadıysa veya geçmişiniz bağlam penceresini aştıysa, slotlar boşalana veya geçmiş kısaltılana kadar sonraki istekler başarısız olur.

Başarısız akış istekleri para tutar mı?

Başarısız veya reddedilen istekler ücretlendirilmez, bu nedenle özgürce test edebilirsiniz. Tamamlanan istekler, normal fiyattan token başına faturalandırılır.

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.

API anahtarı al

https://api.uncensoredllmhub.com/v1