Objetivo
Que el bot responda correctamente preguntas de seguimiento. Son dos problemas
distintos que hay que resolver juntos porque el usuario los ve como uno.
Contexto
Observado el 10/08/2026 con el bot en uso real: pregunta "qué es Attention is
All You Need" → responde bien. Pregunta "cuál es el mecanismo" → dice que no
tiene contexto.
Problema 1 — sin memoria. answer_query no recibe historial ni
session_id. Cada mensaje es una llamada independiente.
Problema 2 — sin reescritura de query. Aunque hubiera memoria, el retrieval
se hace con la query cruda. "cuál es el mecanismo" es anafórica: su embedding no
se parece a ningún chunk del corpus. Agregar memoria no arregla retrieval.
El Protocol MemoryStore ya existe en domain/interfaces.py y
config.py ya tiene memory_store y sqlite_db_path. El andamiaje está; la
implementación no.
Criterios de aceptación
Memoria:
Reescritura de query:
Verificación de extremo a extremo:
Lo que NO se debe hacer:
Capas afectadas
infrastructure/memory/sqlite.py — nuevo
application/agents/research_agent/ — nodo de reescritura, checkpointer
scripts/run_telegram_bot.py — wiring del store y del thread_id
Decisiones a documentar
¿Checkpointer de LangGraph o MemoryStore propio? LangGraph trae
SqliteSaver. Usarlo es más rápido pero acopla la persistencia al framework y
deja el Protocol MemoryStore sin uso. Implementar el Protocol propio es más
trabajo pero mantiene la abstracción. Decidir y justificar; si se usa
SqliteSaver, documentar si MemoryStore se elimina o para qué queda.
Cuántos turnos de historial se pasan. Todo el historial crece sin límite y
consume tokens. Definir una ventana (últimos N turnos) o una estrategia de
resumen.
Objetivo de aprendizaje
Que memoria y retrieval son capas distintas del mismo problema visible.
Entender por qué el retrieval necesita una query autocontenida y qué es una
referencia anafórica en términos de embeddings.
Fuera de alcance
Resumen de conversaciones largas. Memoria de largo plazo entre sesiones
distintas (esto es memoria de sesión).
Estimación
5h
Depende de
T18. Independiente de T20 y T21.
Objetivo
Que el bot responda correctamente preguntas de seguimiento. Son dos problemas
distintos que hay que resolver juntos porque el usuario los ve como uno.
Contexto
Observado el 10/08/2026 con el bot en uso real: pregunta "qué es Attention is
All You Need" → responde bien. Pregunta "cuál es el mecanismo" → dice que no
tiene contexto.
Problema 1 — sin memoria.
answer_queryno recibe historial nisession_id. Cada mensaje es una llamada independiente.Problema 2 — sin reescritura de query. Aunque hubiera memoria, el retrieval
se hace con la query cruda. "cuál es el mecanismo" es anafórica: su embedding no
se parece a ningún chunk del corpus. Agregar memoria no arregla retrieval.
El Protocol
MemoryStoreya existe endomain/interfaces.pyyconfig.pyya tienememory_storeysqlite_db_path. El andamiaje está; laimplementación no.
Criterios de aceptación
Memoria:
infrastructure/memory/sqlite.pyimplementando el ProtocolMemoryStorethread_idderivado delchat_idde TelegramReescritura de query:
lo que ya está bien)
reescrita contiene el referente
Verificación de extremo a extremo:
el mecanismo", y obtener respuesta con contexto correcto
Lo que NO se debe hacer:
context.user_datadepython-telegram-bot: es memoria en RAM que se pierde al reiniciar, no se
comparte entre canales, y pondría estado del motor en el adaptador
Capas afectadas
infrastructure/memory/sqlite.py— nuevoapplication/agents/research_agent/— nodo de reescritura, checkpointerscripts/run_telegram_bot.py— wiring del store y del thread_idDecisiones a documentar
¿Checkpointer de LangGraph o
MemoryStorepropio? LangGraph traeSqliteSaver. Usarlo es más rápido pero acopla la persistencia al framework ydeja el Protocol
MemoryStoresin uso. Implementar el Protocol propio es mástrabajo pero mantiene la abstracción. Decidir y justificar; si se usa
SqliteSaver, documentar siMemoryStorese elimina o para qué queda.Cuántos turnos de historial se pasan. Todo el historial crece sin límite y
consume tokens. Definir una ventana (últimos N turnos) o una estrategia de
resumen.
Objetivo de aprendizaje
Que memoria y retrieval son capas distintas del mismo problema visible.
Entender por qué el retrieval necesita una query autocontenida y qué es una
referencia anafórica en términos de embeddings.
Fuera de alcance
Resumen de conversaciones largas. Memoria de largo plazo entre sesiones
distintas (esto es memoria de sesión).
Estimación
5h
Depende de
T18. Independiente de T20 y T21.