पाठ 9 / 27
Streaming कैसे काम करती है
Server-sent events समझें और हर SDK से उन्हें उपयोग करें।
एक बड़े response की जगह events
लंबा उत्तर बनने में कई सेकंड लग सकते हैं। Streaming में server उत्तर को छोटे events की शृंखला के रूप में भेजता है (सामान्य HTTP response पर Server-Sent Events से) जबकि मॉडल अभी बना रहा होता है, इसलिए user को पहले शब्द लगभग तुरंत दिखते हैं। कुल समय समान है, पर अनुभव की latency तेज़ी से घटती है। Anthropic की stream में typed events हैं (message शुरू, content-block शुरू, पाठ deltas, content-block समाप्त, stop reason व usage वाला message delta, message समाप्त); OpenAI ऐसे chunks stream करता है जिनके delta में नया पाठ होता है, अंत में अंतिम chunk और [DONE]। SDKs parsing छिपाते हैं: आप पाठ टुकड़ों पर iterate करते हैं और अंत में जुड़ा हुआ अंतिम message और usage माँग सकते हैं।
पाठ बनते ही दिखाएँ
Streaming उत्तर छोटे events में भेजती है ताकि users उसे तुरंत देखें।
दोनों SDKs के साथ streaming, चलाकर
मैंने यह Python virtual environment में anthropic 1.11.0 और openai 3.22.1 SDKs के साथ छोटे स्थानीय stand-in server (testing विषय में दिखाया, mock.py नाम से सहेजा) के विरुद्ध चलाया। Server तैयार उत्तर लौटाता है, इसलिए कोई key, network या असली मॉडल शामिल नहीं: यह साबित करता है कि SDK requests कैसे बनाता और उत्तर कैसे सँभालता है, यह नहीं कि असली मॉडल क्या कहता। दोनों SDKs वही तीन पाठ टुकड़े ("Hel", "lo ", "there") देते हैं। Anthropic stop reason सहित अंतिम जुड़ा message भी देता है; OpenAI में आप delta.content टुकड़े ख़ुद जोड़ते हैं।
import mock, anthropic, openai
srv = mock.start(); base = f"http://127.0.0.1:{srv.server_address[1]}" # local stand-in server, not a real API
a = anthropic.Anthropic(api_key="k", base_url=base)
with a.messages.stream(model="demo-model", max_tokens=50, messages=[{"role": "user", "content": "Hi"}]) as stream:
pieces = list(stream.text_stream)
final = stream.get_final_message()
print("anthropic pieces:", pieces, "| final:", final.content[0].text, "|", final.stop_reason)
o = openai.OpenAI(api_key="k", base_url=base + "/v1")
chunks = o.chat.completions.create(model="demo-model", stream=True, messages=[{"role": "user", "content": "Hi"}])
parts = []
for ch in chunks:
delta = ch.choices[0].delta.content
if delta: parts.append(delta)
print("openai pieces: ", parts, "| joined:", "".join(parts))
Output:
anthropic pieces: ['Hel', 'lo ', 'there'] | final: Hello there | end_turn openai pieces: ['Hel', 'lo ', 'there'] | joined: Hello there
Stream का अंत सँभालें
Stop reason और usage के लिए अंतिम event पढ़ें; जो stream उसके बिना समाप्त हो वह बीच में कटी हो सकती है।
त्वरित जाँच: Streaming मुख्य रूप से क्या सुधारती है?
- Token क़ीमत
- उत्तरों की सटीकता
- अनुभव की latency, क्योंकि पाठ बनते समय दिखता है
- Key सुरक्षा
Answer
अनुभव की latency, क्योंकि पाठ बनते समय दिखता है — कुल समय समान हो तब भी users को पहले शब्द जल्दी दिखते हैं।