~/tools / Yerel LLM'i kendi sunucunuzda çalıştırın / Ollama Stream Reader
Ollama Stream Reader — Akış halindeki Ollama yanıtını birleştirin, hızı ve durma nedenini görün
Ollama'dan gelen akış halindeki bir yanıtı, /api/chat, /api/generate ya da OpenAI uyumlu /v1/chat/completions çıktısını yapıştırın; araç parçaları yeniden tam metne, thinking'e ve araç çağrılarına birleştirir. Modelin neden durduğunu, ne kadar hızlı ürettiğini ve prompt'u ne kadar hızlı işlediğini, akışın kesilip kesilmediğini gösterir ve bir sonraki isteğe eklenecek assistant mesajını verir. Hiçbir veri tarayıcınızdan çıkmaz.
Bir akış curl ile nasıl kaydedilir
-N curl'ün arabelleğe almasını kapatır, > stream.txt ise akışı bir dosyaya kaydeder. Modeli ve mesajı kendinizinkilerle değiştirin.
curl -sN http://localhost:11434/api/chat -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"Hello"}]}' > stream.txt
curl -sN http://localhost:11434/v1/chat/completions -H "Content-Type: application/json" -d '{"model":"qwen2.5:7b","stream":true,"stream_options":{"include_usage":true},"messages":[{"role":"user","content":"Hello"}]}' > stream.txtbir /api/chat akışı (satır başına bir JSON nesnesi) olarak okundu.
Özet
- Model
- qwen2.5:7b
- Durma nedeni
- stop
- Parçalar
- 7
- Üretilen token'lar
- 7
- Üretim hızı
- 10.4 token/sn
- Prompt token'ları
- 35
- Prompt hızı (önbellekte olmayan token'lar)
- 64.1 token/sn
- Model yükleme süresi
- 4.923 sn
- Toplam süre
- 6.310 sn
- İlk parçadan sonuncuya
- 0.675 sn
Metin
Hello, nice to meet.
Sonraki istek için assistant mesajı
Bunu messages'a ekleyin, varsa ardından araç çağrılarının sonuçlarını ekleyin.
{
"role": "assistant",
"content": "Hello, nice to meet."
}eval_count, metin olarak akıtılmayan araç çağrılarının token'larını da sayar. Testimizde bir araç çağrısı, eval_count 20 ile tek bir parçada geldi.
Ollama'nın belgeleri prompt_eval_duration değerinin yalnızca önbellekte olmayan prompt token'larını kapsadığını söyler. Buradaki prompt hızı yalnızca o token'ları böler. Tüm süreler nanosaniye cinsindendir; OpenAI biçiminde timings tam milisaniye cinsindendir.
OpenAI uyumlu biçimde token sayıları yalnızca stream_options.include_usage ile, data: [DONE]'dan önceki ek bir parçada gönderilir. Akış kesilirse bu parça gelmez.
Biçimler Ollama'nın akış ve usage belgelerinden ve kaynak kodundan (v0.40.15) alındı, 2026-11-07 tarihinde Ollama 0.40.11'in gerçek akışlarıyla denetlendi. Ollama: Streaming
Her şey tarayıcınızda yapılır. Araç hiçbir yere bağlanmaz.
Ollama yanıtlarını varsayılan olarak akış halinde gönderir. /api/chat ve /api/generate satır başına bir JSON nesnesi gönderir (newline-delimited JSON): her satır yanıtın birkaç karakterini taşır, son satırda done true olur ve token sayıları ile nanosaniye cinsinden süreler bulunur. OpenAI uyumlu /v1/chat/completions yalnızca stream true olduğunda akış yapar. O zaman server-sent events gönderir: data: ile başlayan satırlar, boş bir delta ve finish_reason içeren ayrı bir parça ve sonda data: [DONE]. Token sayıları yalnızca istek stream_options.include_usage ayarını yaparsa, boş bir choices listesi olan ek bir parçada gelir ve Ollama ona bir timings nesnesi ekler. Bu araç üç biçimi de okur, HTTP başlıklarıyla birlikte curl -i çıktısını da, content, thinking (OpenAI biçiminde reasoning) ve araç çağrılarını birleştirir ve neyin yanlış olduğunu listeler: done satırı ya da [DONE] olmayan akış kesilmiştir; {"error": …} satırı, Ollama'nın göndermeye başladıktan sonra bir hatayla durduğu anlamına gelir; done_reason length, num_predict ya da max_tokens sınırına ulaşıldığı anlamına gelir. Üretim hızı eval_count değerinin eval_duration değerine bölünmesidir. Prompt için Ollama'nın belgeleri prompt_eval_duration değerinin yalnızca önbellekte olmayan prompt token'larını kapsadığını söyler, bu yüzden araç bu süreye yalnızca o token'ları böler. OpenAI biçiminde Ollama'nın kendi timings.prompt_per_second değeri, önbellekten gelenler dahil tüm prompt token'larını bu süreye böler. Testimizde, 35 token'ın 34'ünün önbellekten geldiği ve kalan tek token'ın 97 ms sürdüğü bir prompt için saniyede 360.8 token bildirdi. OpenAI biçimindeki araç çağrıları aynı index'i paylaşan parçalar halinde gelebilir, bu yüzden araç argümanları index'e göre birleştirir; Ollama'nın kendisi her araç çağrısını tek parçada, bütün olarak gönderir. Aracı qwen2.5:7b ile Ollama 0.40.11'in gerçek akışlarında, biçimleri ise Ollama'nın belgeleri ve kaynak koduyla karşılaştırarak denetledik.
Bu aracın temel mantığı MIT lisansıyla açık kaynaktır. github.com/seigo5555/toolkitbox-lib/src/ollama-stream.ts
Kullanım örnekleri
- curl ile yaptığınız akışlı bir isteğin tüm yanıtını satır satır parça parça okumak yerine bir arada görmek
- Bir akışın kesilip kesilmediğini, uzunluk sınırında mı durduğunu yoksa bir hatayla mı bittiğini öğrenmek
- Bir modelin makinenizdeki ya da sunucunuzdaki üretim ve prompt hızını ölçmek
Nasıl kullanılır
- İsteğinizi curl -sN ile çalıştırıp çıktıyı bir dosyaya kaydedin ya da programınızın aldığını kopyalayın.
- Akışın tamamını yapıştırın. Araç, akışın /api/chat, /api/generate ya da /v1/chat/completions'tan gelip gelmediğini algılar.
- Sorunları ve sayıları okuyun, metni ya da sonraki istek için assistant mesajını kopyalayın.
SSS
/v1/chat/completions akışımda neden token sayıları yok?
OpenAI uyumlu biçimde sayılar yalnızca istek stream_options değerini {"include_usage": true} olarak ayarlarsa gönderilir. O zaman boş bir choices listesi olan ek bir parçada, data: [DONE]'dan hemen önce gelirler. /api/chat ve /api/generate bunları her zaman son satıra koyar.
Prompt hızı neden timings.prompt_per_second'dan bu kadar farklı?
Ollama'nın belgeleri prompt_eval_duration değerinin yalnızca önbellekte olmayan prompt token'larını kapsadığını söyler. Ollama'nın timings.prompt_per_second değeri, önbellekten gelenler dahil tüm prompt token'larını bu süreye böler, bu yüzden önbellek kullanıldığında çok daha hızlı görünür. Araç yalnızca önbellekte olmayan token'ları böler.
Model bir araç çağırdı ama eval_count 20. Bu token'lar nerede?
Bir araç çağrısının metni content olarak akıtılmaz; Ollama onu tool_calls'a çevirir ve tek parçada gönderir. Token'lar yine de üretilir ve sayılır. Testimizde bir argümanlı tek bir araç çağrısı, eval_count 20 ile tek bir parçada geldi.
Model bir araç çağırdığında /api/chat neden stop diyor?
/api/chat done_reason değerini stop olarak bırakır. OpenAI uyumlu uç nokta, bir araç çağrısı gönderildiğinde finish_reason içindeki stop değerini tool_calls olarak değiştirir.
Assistant mesajıyla ne yapmalıyım?
Ollama'nın belgeleri, konuşma geçmişini korumak için akıtılan parçaları birleştirmeniz gerektiğini belirtir; bu en çok araç çağrıları için önemlidir. Mesajı messages'a ekleyin, her araç çağrısının sonucunu tool rolüyle bir mesaj olarak ekleyin ve sonraki isteği gönderin.
Verilerim bir yere gönderiliyor mu?
Hayır. Akış tarayıcınızda okunur. curl komutları yalnızca sizin çalıştırmanız için metindir.
İlgili makaleler
- Küçük bir VPS'te Ollama'nın bellek kullanımını izleyinOllama'nın bellekte neyi tuttuğunu, orada ne kadar kaldığını ve hangi ayarların bunu değiştirdiğini görün: ollama ps, keep_alive ve sınırlar, resmî FAQ'ye göre.
- Dify'ı kendi VPS'inizdeki Ollama'ya bağlayınDify'ı kendi VPS'inizde çalıştırın ve modeli Ollama'dan alın: kurulum, eklenti alanları, Docker adres sorunu ve embedding'ler, resmî belgelere dayanarak.
- Pahalı bir bilgisayar olmadan yerel LLM başlatın: VPS kullanımı için yeni başlayanlara rehberGüçlü bir bilgisayarınız yok mu? Bir VPS kiralayın ve küçük bir yerel LLM'yi tarayıcınızdan çalıştırın: bellek tahmininden korumalı sohbet ekranına altı adım, sınırlar dürüstçe belirtilerek.