Descriere & Utilizare
Modelele LLM sunt complet stateless (fără memorie): dacă îi spui ‘Mă numesc Andrei’ și în apelul următor îl întrebi ‘Cum mă cheamă?’, nu va ști răspunsul dacă nu îi retrimiți toată conversația anterioară.
RunnableWithMessageHistory automatizează această gestionare pentru aplicații multi-utilizator: înainte de a apela modelul, încarcă mesajele asociate unui session_id și le injectează în MessagesPlaceholder('istoric'). După ce modelul răspunde, salvează automat atât întrebarea utilizatorului, cât și răspunsul AI în istoric.
Pentru teste locale se folosește InMemoryChatMessageHistory, iar în producție se conectează la Redis, PostgreSQL sau MongoDB.
Cum să o reții ușor
💡 Ca un dosar medical la recepția unei clinici: când pacientul își spune CNP-ul (`session_id`), asistenta îi scoate fișa cu toate vizitele trecute, i-o dă medicului, iar la plecare notează în dosar noua consultație.
Opțiuni și parametri tehnici
- Interceptează apelul
.invoke()și citește parametrulconfig={'configurable': {'session_id': '...'}}. - Apelează funcția callback
get_session_history(session_id)pentru a obține depozitul de mesaje. - Populează cheia de istoric și atașează noile mesaje
HumanMessageșiAIMessagela finalul execuției.
Exemple practice și cazuri de utilizare
- Funcție de stocare în RAM:
store = {}
def get_session_history(sid: str):
if sid not in store: store[sid] = InMemoryChatMessageHistory()
return store[sid] - Apel cu sesiune:
chain_cu_memorie.invoke({'input': 'Salut, sunt Alex'}, config={'configurable': {'session_id': 'user_42'}})
Sfaturi de configurare & capcane
Dacă dezvolți aplicații noi complexe sau agenți în 2025+, echipa LangChain recomandă utilizarea LangGraph cu un MemorySaver checkpointer în locul RunnableWithMessageHistory, deoarece oferă un control mult mai fin asupra stării.
Comenzi și ghiduri înrudite
langgraph-memory-saver: Resursă asociată din acest modul.chat-prompt-template: Resursă asociată din acest modul.lcel-pipe-runnable: Resursă asociată din acest modul.