Axın
"stream": true təyin edin və eyni endpoint bütün cavabın bitməsini gözləmək əvəzinə cavabı server-sent events üzərindən tədricən qaytarır.
Niyə axın
Axın olmayan bir sorğu, model bütün cavabı yaratmağı bitirənə qədər bloklanır, sonra hamısını bir dəfəyə qaytarır. Qısa bir cavab üçün bu nadir hallarda nəzərə çarpır. Daha uzun bir cavab üçün isə bu, mətn görünməzdən əvvəl bir neçə saniyə (bəzən daha uzun) heç nəyə baxaraq gözləmək deməkdir. Axın bunu, cavabı model onu yaratdıqca tikə-tikə göndərərək düzəldir, beləliklə klient bütün cavabı gözləmək əvəzinə sorğu göndərildikdən saniyənin bir hissəsi sonra mətni göstərməyə başlaya bilər. Bu, ani hiss olunan bir söhbət interfeysi ilə hər mesajda dayanıb qalırmış kimi hiss olunan bir interfeys arasındakı fərqdir. İstəyə bağlıdır və istifadəsi əlavə heç nəyə başa gəlmir.
Aktivləşdirmək
{
"model": "tai-4.1",
"messages": [{"role": "user", "content": "1'den 5'e kadar say"}],
"stream": true
}
Cavabın Content-Type-i application/json əvəzinə text/event-stream olur. Hər hadisə sətri data: prefiksi daşıyır, və bağlantı açıq qalır, hər yeni məzmun parçası üçün bir hadisə göndərərək, ta ki axın literal bir data: [DONE] sətri ilə bitənə qədər.
Bir chunk-un forması
Əksər chunk-lar choices[0].delta.content-də yeni yaradılmış kiçik bir mətn parçası daşıyır:
data: {"id": "chatcmpl-b94...", "object": "chat.completion.chunk", "created": 1788960276, "model": "tai-4.0.6P", "choices": [{"index": 0, "delta": {"content": "1"}, "finish_reason": null}]}
data: {"id": "chatcmpl-b94...", "object": "chat.completion.chunk", "created": 1788960276, "model": "tai-4.0.6P", "choices": [{"index": 0, "delta": {"content": ", 2"}, "finish_reason": null}]}
Hər chunk-dakı bütün delta.content dəyərlərini sıra ilə birləşdirmək tam cavab mətnini yenidən qurur. Bu birləşdirməni qurmaq klientin işidir; API heç bir anda yığılmış mətni göndərmir, yalnız hər chunk-un əlavə etdiyi artımı göndərir.
Bitirmə chunk-u
Məzmun daşıyan son chunk boş bir delta və real bir finish_reason daşıyır ("stop", və ya model bir alət çağırmaq istəyirsə "tool_calls", bax Alət çağırışı):
data: {"id": "chatcmpl-b94...", "object": "chat.completion.chunk", "created": 1788960276, "model": "tai-4.0.6P", "choices": [{"index": 0, "delta": {}, "finish_reason": "stop"}]}
İstifadə chunk-u
Bitirmə chunk-undan sonra, boş bir choices array-i və dolu bir usage obyekti ilə, axın olmayan cavabın usage sahəsi ilə eyni formada, bir chunk daha göndərilir:
data: {"id": "chatcmpl-b94...", "object": "chat.completion.chunk", "created": 1788960276, "model": "tai-4.0.6P", "choices": [], "usage": {"prompt_tokens": 2, "completion_tokens": 3, "total_tokens": 5}}
data: [DONE]
Yalnız görünən mətnlə maraqlanan bir klient boş choices array-i olan hər hansı chunk-u təhlükəsiz şəkildə görməzdən gələ bilər; sonradan token istifadəsini və ya təxmini xərci göstərmək istəyən bir klient isə bunun bitirmə chunk-unda olduğunu güman etmək əvəzinə xüsusi olaraq bu chunk-u axtarmalıdır.
Kodda axını oxumaq
# Python, rəsmi openai paketindən istifadə edərək stream = client.chat.completions.create( model="tai-4.1", messages=[{"role": "user", "content": "Kısa bir şiir yaz"}], stream=True, ) for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)
Rəsmi OpenAI SDK-ları (Python və Node) bu hadisə formasını necə parse edəcəyini artıq bilir, çünki bu, onların öz API-lərinin istifadə etdiyi eyni formadır; base_url-u Autentifikasiya səhifəsində göstərildiyi kimi https://api.artfical.com/v1-ə yönəltməkdən başqa klientdə tAI-yə xas heç nə tələb olunmur.
Axın həmişə səliqəli bitir
Yarı yolda nəsə səhv gedərsə belə — generasiya uğursuz olur, sorğu daxili olaraq vaxt aşımına uğrayır, səbəb nə olursa olsun — axın yenə də bağlantının heç bir izahat vermədən sadəcə kəsilməsi əvəzinə görünən bir siqnalla bitir. Bu halda mötərizədə qısa bir bildiriş daşıyan bir məzmun chunk-u, "finish_reason": "stop" olan bir bitirmə chunk-u, sonra isə [DONE] görəcəksiniz — normal, uğurlu bir axının bitdiyi eyni düzgün formalı sonluq. Klient [DONE]-un gəlişini həmişə növbənin dəqiq sonu kimi qəbul etməlidir və onsuz bitən bir axının uğurlu olduğunu da güman etməməlidir; [DONE] olmadan kəsilən bir bağlantı, vaxt aşımına uğrayan axın olmayan bir sorğuda etdiyiniz kimi, sorğunu uğursuz hesab edib yenidən cəhd etmək deməkdir.