पाठ 14 / 31

Chat History और Memory

बातचीत के turns रखें और मॉडल को वापस दें।

मॉडल सिर्फ़ वही याद रखता है जो आप दोबारा भेजें

Chat models stateless हैं। Chat message history बातचीत के messages (human, AI, tool) रखती है। हर turn पर आप संचित messages को MessagesPlaceholder से prompt में रखते हैं, फिर नया सवाल और उत्तर जोड़ते हैं। आधुनिक LangChain इस state को स्पष्ट रूप से रखने की सलाह देता है, जैसे RunnableWithMessageHistory wrapper से या, समृद्ध ज़रूरतों के लिए, LangGraph persistence/checkpointers से। बढ़त नियंत्रित करें: अंतिम N messages रखें, पुराने का सार करें, या मुख्य तथ्य अलग रखें, और इतिहास session ID से कुंजीबद्ध करें ताकि users एक-दूसरे की बातचीत कभी न देखें।

In-memory chat history, चलाकर

मैंने यह Python virtual environment में langchain-core 1.6.6, langchain-text-splitters 1.1.2 और llama-index-core 0.14.25 के साथ ऑफ़लाइन चलाया। किसी API key या network call की ज़रूरत नहीं क्योंकि असली मॉडल की जगह fake मॉडल या खिलौना embedding है। History तीन messages क्रम में रखती है, human, ai, human से चिह्नित। अगले prompt के साथ उन्हें वापस देना ही मॉडल को "What is my name?" का उत्तर देने देता है।

from langchain_core.chat_history import InMemoryChatMessageHistory

history = InMemoryChatMessageHistory()
history.add_user_message("My name is Asha.")
history.add_ai_message("Nice to meet you, Asha.")
history.add_user_message("What is my name?")
for m in history.messages:
    print(m.type, "|", m.content)
print("messages kept:", len(history.messages))

Output:

human | My name is Asha.
ai | Nice to meet you, Asha.
human | What is my name?
messages kept: 3

त्वरित जाँच: Chat histories को session ID से क्यों कुंजीबद्ध करें?

  • सिर्फ़ prompts छोटे करने के लिए
  • Tokens तेज़ करने के लिए
  • मॉडल प्रशिक्षित करने के लिए
  • ताकि users एक-दूसरे की बातचीत कभी न देखें
Answer

ताकि users एक-दूसरे की बातचीत कभी न देखें — Session अलगाव users के बीच डेटा लीक होने से रोकता है।