DarkCodePE / chatbot-rag-front

https://chatbot-rag-front.vercel.app
0 stars 0 forks source link

La memoria del chat, esta compartida #2

Open DarkCodePE opened 4 weeks ago

DarkCodePE commented 4 weeks ago

Cuando dos usuarios inician un chat su memoria esta compartida, entonces los fragmentos se recuperan desde una única colección

def get_session_history(session_id: str): qdrant_client = QdrantClient(url=QDRANT_URL, api_key=QDRANT_API_KEY) return QdrantChatMessageHistory(session_id, qdrant_client, CHAT_HISTORY_COLLECTION)

conversational_rag_chain = RunnableWithMessageHistory( rag_chain, get_session_history, input_messages_key="input", history_messages_key="chat_history", output_messages_key="answer", ) Le falta pasar el session.id

DarkCodePE commented 4 weeks ago

No era un error precisamente, solo que no entendi completamente el paso de funcion por referencia,

Pasando get_session_history: Cuando creamos RunnableWithMessageHistory, efectivamente pasamos la función get_session_history, no su resultado: pythonCopyconversational_rag_chain = RunnableWithMessageHistory( rag_chain, get_session_history, input_messages_key="input", history_messages_key="chat_history", output_messages_key="answer", ) Aquí, get_session_history es una referencia a la función, no una llamada a la función. Usando el session_id: El session_id se pasa en la configuración cuando se invoca la cadena: pythonCopyresponse = await conversational_rag_chain.ainvoke( {"input": question}, config={"configurable": {"session_id": chat_session.id}} )

Cómo funciona internamente: RunnableWithMessageHistory utiliza estos dos elementos de la siguiente manera:

Cuando necesita acceder al historial de chat, llama internamente a get_session_history(session_id). El session_id que usa es el que se pasa en la configuración durante la invocación.

Entonces, efectivamente, el session_id llega al método get_session_history a través de la configuración que pasas en ainvoke. RunnableWithMessageHistory se encarga de hacer la conexión entre la función get_session_history que le pasaste al inicializarlo y el session_id que le pasas en cada invocación.