स्ट्रीमिंग और मल्टी-टर्न बातचीत
API पर चैट-जैसे अनुभव बनाने की दो व्यावहारिक वास्तविकताएँ: स्ट्रीम करें ताकि उपयोगकर्ता आउटपुट तुरंत देखें, और इतिहास का प्रबंधन ख़ुद करें क्योंकि API स्टेटलेस है।
स्ट्रीमिंग
स्ट्रीमिंग के बिना, उपयोगकर्ता पूरे उत्तर का इंतज़ार करता है। स्ट्रीमिंग के साथ, टोकन उत्पन्न होते ही आते हैं — कहीं बेहतर अनुभवित गति। SDK के स्ट्रीमिंग हेल्पर का उपयोग करें:
- Python
- TypeScript
with client.messages.stream(
model="claude-sonnet-4-6", 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-4-6", 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 में कॉल्स के बीच कोई मेमोरी नहीं होती (क्यों)। बातचीत जारी रखने के लिए, हर बार पूरा पिछला आदान-प्रदान वापस भेजें:
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
लंबी बातचीत विंडो को भर देती है
जैसे-जैसे इतिहास बढ़ता है यह कॉन्टेक्स्ट विंडो को खाता है और लागत बढ़ती है। रणनीतियाँ:
- पुराने टर्न को एक छोटे रीकैप में सारांशित/संपीड़ित करें जिसे आप आगे ले जाते हैं।
- अप्रासंगिक पुराने टर्न को छाँटें।
- एक स्थिर प्रीफ़िक्स के लिए फिर से भुगतान करने से बचने हेतु प्रॉम्प्ट कैशिंग के साथ जोड़ें।