स्ट्रीमिंग और मल्टी-टर्न बातचीत
- प्रतिक्रियाओं को टोकन-दर-टोकन स्ट्रीम करें ताकि उपयोगकर्ता आउटपुट तुरंत देख सकें
- समझें कि API स्टेटलेस क्यों है और आप बातचीत का इतिहास ख़ुद कैसे संभालें
- पूरे पिछले आदान-प्रदान को दोबारा भेजकर मल्टी-टर्न बातचीत जारी रखें
- लंबी बातचीत को कॉन्टेक्स्ट विंडो और लागत बढ़ाने से रोकें
API पर चैट-जैसे अनुभव बनाना दो व्यावहारिक वास्तविकताओं पर आधारित है: स्ट्रीम करें ताकि उपयोगकर्ता आउटपुट तुरंत देखें, और इतिहास का प्रबंधन ख़ुद करें क्योंकि API स्टेटलेस है। दोनों में महारत हासिल करें और आपका चैट UX तेज़ महसूस होगा और सब कुछ याद रखेगा।
स्ट्रीमिंग
स्ट्रीमिंग के बिना, उपयोगकर्ता पूरे उत्तर का इंतज़ार करता है। स्ट्रीमिंग के साथ, टोकन उत्पन्न होते ही आते हैं — कहीं बेहतर अनुभवित गति।
- कच्चे इवेंट्स को हाथ से पार्स करने के बजाय SDK के स्ट्रीमिंग हेल्पर का उपयोग करें — यह आपके लिए इवेंट लाइफसाइकल को प्रबंधित करता है।
- Python
- TypeScript
with client.messages.stream(
model="claude-sonnet-5", max_tokens=1024,
messages=[{"role": "user", "content": "Explain RAG in two sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
const stream = client.messages.stream({
model: "claude-sonnet-5", max_tokens: 1024,
messages: [{ role: "user", content: "Explain RAG in two sentences." }],
});
for await (const event of stream) {
if (event.type === "content_block_delta") process.stdout.write(event.delta.text ?? "");
}
मल्टी-टर्न: इतिहास आप संभालते हैं
API में कॉल्स के बीच कोई मेमोरी नहीं होती (क्यों)। बातचीत जारी रखने के लिए, हर बार पूरा पिछला आदान-प्रदान वापस भेजें।
Guided walkthrough1 of 4
- messages सूची में पहला उपयोगकर्ता संदेश भेजें।
- परिणाम से असिस्टेंट की प्रतिक्रिया का टेक्स्ट पढ़ें।
- असिस्टेंट की प्रतिक्रिया और अगला उपयोगकर्ता संदेश उसी messages सूची में जोड़ें।
- पूरी messages सूची फिर से भेजें — इसी तरह Claude आदान-प्रदान को 'याद' रखता है।
messages = [{"role": "user", "content": "Hi, I'm planning a trip."}]
# ... get assistant reply, then append both turns:
messages.append({"role": "assistant", "content": assistant_text})
messages.append({"role": "user", "content": "Make it 3 days."})
# send the full `messages` list again
लंबी बातचीत विंडो को भर देती है
जैसे-जैसे इतिहास बढ़ता है यह कॉन्टेक्स्ट विंडो को खाता है और लागत बढ़ती है। इसे नियंत्रण में रखने की रणनीतियाँ:
- पुराने टर्न को एक छोटे रीकैप में सारांशित/संपीड़ित करें जिसे आप आगे ले जाते हैं।
- अप्रासंगिक पुराने टर्न को छाँटें।
- एक स्थिर प्रीफ़िक्स के लिए फिर से भुगतान करने से बचने हेतु प्रॉम्प्ट कैशिंग के साथ जोड़ें।
- हर कॉल पूरा इतिहास दोबारा भेजती है — लंबी बातचीत में ज़्यादा लागत आती है और अगर आप कभी संपीड़ित या छाँटते नहीं हैं तो यह अंततः कॉन्टेक्स्ट विंडो को पार कर सकती है।
- तेज़ अनुभवित गति के लिए टोकन स्ट्रीम करें; SDK हेल्पर इवेंट लाइफसाइकल को संभालता है।
- API स्टेटलेस है — कॉल्स के बीच इसकी कोई मेमोरी नहीं होती।
- हर टर्न जोड़कर और पूरी messages सूची दोबारा भेजकर बातचीत जारी रखें।
- लंबी बातचीत की लागत और आकार को नियंत्रित करने के लिए संपीड़ित करें, छाँटें और कैश करें।