---
id: "RF-LLM-006"
title: "Gestión de Contexto y Memoria"
type: "Requirement"
status: "Done"
priority: "Alta"
epic: "OQI-007"
project: "trading-platform"
version: "1.0.0"
created_date: "2025-12-05"
updated_date: "2026-01-04"
---

# RF-LLM-006: Gestión de Contexto y Memoria

**Épica:** OQI-007 - LLM Strategy Agent
**Versión:** 1.0
**Fecha:** 2025-12-05
**Estado:** Planificado
**Prioridad:** P0 - Crítico

---

## Descripción

El agente LLM debe mantener contexto coherente durante las conversaciones, recordar información relevante del usuario entre sesiones, y enriquecer automáticamente cada interacción con datos de mercado y perfil del usuario.

---

## Requisitos Funcionales

### RF-LLM-006.1: Contexto de Conversación
- El sistema debe mantener historial de mensajes de la conversación actual
- El sistema debe limitar contexto a N mensajes para optimizar tokens
- El sistema debe resumir conversaciones largas automáticamente
- El sistema debe preservar información crítica al resumir
- El sistema debe detectar cambio de tema y ajustar contexto

### RF-LLM-006.2: Memoria de Usuario
- El sistema debe recordar preferencias del usuario
- El sistema debe recordar símbolos de interés frecuente
- El sistema debe recordar estilo de comunicación preferido
- El sistema debe recordar preguntas y respuestas relevantes pasadas
- El sistema debe actualizar memoria basado en interacciones

### RF-LLM-006.3: Enriquecimiento Automático
- El sistema debe inyectar datos de mercado relevantes
- El sistema debe incluir posiciones actuales del usuario
- El sistema debe incluir alertas activas relacionadas
- El sistema debe incluir progreso educativo si es relevante
- El sistema debe incluir señales ML si el usuario tiene acceso

### RF-LLM-006.4: Contexto de Sistema
- El agente debe conocer fecha y hora actual
- El agente debe conocer estado del mercado (abierto/cerrado)
- El agente debe conocer eventos económicos próximos
- El agente debe conocer configuración regional del usuario

### RF-LLM-006.5: Gestión de Tokens
- El sistema debe monitorear uso de tokens por conversación
- El sistema debe comprimir contexto cuando se acerca al límite
- El sistema debe priorizar información más reciente/relevante
- El sistema debe estimar tokens antes de llamar al LLM

---

## Criterios de Aceptación

```gherkin
Feature: Gestión de Contexto

Scenario: Mantener contexto en conversación
  Given inicié conversación preguntando sobre AAPL
  And el agente analizó AAPL
  When pregunto "¿Y qué opinas del volumen?"
  Then el agente entiende que me refiero a AAPL
  And no necesito repetir el símbolo

Scenario: Recordar preferencias entre sesiones
  Given ayer configuré preferencia "siempre mostrar disclaimer"
  And cerré la aplicación
  When inicio nueva conversación hoy
  Then el agente recuerda mi preferencia
  And incluye disclaimers automáticamente

Scenario: Enriquecimiento automático de contexto
  Given tengo posición abierta en TSLA
  And hay alerta activa para TSLA a $240
  When pregunto "¿Cómo va mi inversión?"
  Then el agente automáticamente incluye info de TSLA
  And menciona la alerta activa
  And muestra P&L actual

Scenario: Resumen de conversación larga
  Given tenemos 30 mensajes en la conversación
  And se acerca el límite de tokens
  When envío nuevo mensaje
  Then el sistema resume mensajes antiguos
  And preserva puntos clave de la conversación
  And el agente responde coherentemente

Scenario: Contexto de mercado automático
  Given el mercado US está cerrado (es sábado)
  When pregunto "¿Debería comprar AAPL ahora?"
  Then el agente indica que el mercado está cerrado
  And sugiere usar paper trading o esperar apertura
```

---

## Reglas de Negocio

| Regla | Descripción |
|-------|-------------|
| RN-001 | Máximo 20 mensajes en contexto inmediato |
| RN-002 | Resumir automáticamente después de 15 mensajes |
| RN-003 | Memoria de usuario persiste máximo 90 días |
| RN-004 | No recordar información financiera sensible |
| RN-005 | Límite de tokens por request: 8000 input, 2000 output |
| RN-006 | Contexto de mercado actualizado cada 60 segundos |

---

## Estructura de Contexto

```yaml
context:
  # Información del usuario
  user:
    id: "user-123"
    name: "Carlos"
    plan: "premium"
    risk_profile: "moderate"
    experience: "intermediate"
    language: "es"
    timezone: "America/Mexico_City"

  # Preferencias recordadas
  preferences:
    show_disclaimers: true
    preferred_timeframe: "4h"
    favorite_indicators: ["RSI", "MACD"]
    notification_style: "detailed"

  # Contexto de mercado (auto-inyectado)
  market:
    status: "open"
    current_time: "2025-12-05T10:30:00-06:00"
    next_close: "2025-12-05T15:00:00-05:00"
    upcoming_events:
      - event: "Fed Minutes"
        date: "2025-12-06"
        impact: "high"

  # Portfolio del usuario (si es relevante)
  portfolio:
    positions:
      - symbol: "AAPL"
        quantity: 50
        avg_price: 175.00
        current_pnl: 525.00
      - symbol: "TSLA"
        quantity: 20
        avg_price: 250.00
        current_pnl: -100.00
    alerts:
      - symbol: "TSLA"
        condition: "<="
        price: 240

  # Historial de conversación
  conversation:
    id: "conv-456"
    started_at: "2025-12-05T10:00:00"
    messages_count: 8
    summary: null  # Se genera cuando supera 15 mensajes
    recent_topics: ["AAPL analysis", "RSI interpretation"]

  # Señales ML (si tiene acceso)
  ml_signals:
    AAPL:
      prediction: "bullish"
      confidence: 0.72
      updated_at: "2025-12-05T10:25:00"
```

---

## Proceso de Gestión de Contexto

```
┌─────────────────────────────────────────────────────────────┐
│ 1. RECIBIR MENSAJE DEL USUARIO                               │
│    "¿Cómo va mi posición de Tesla?"                          │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 2. CONSTRUIR CONTEXTO                                        │
│    a) Cargar perfil de usuario                               │
│    b) Cargar preferencias de memoria                         │
│    c) Cargar historial de conversación                       │
│    d) Identificar símbolos mencionados (TSLA)               │
│    e) Cargar datos de mercado relevantes                     │
│    f) Cargar posiciones del portfolio                        │
│    g) Cargar alertas activas                                 │
│    h) Cargar señales ML (si tiene acceso)                    │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 3. VERIFICAR TOKENS                                          │
│    - Estimar tokens del contexto actual                      │
│    - Si > 6000 tokens → comprimir/resumir                    │
│    - Priorizar: mensaje actual > historial reciente > datos  │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 4. GENERAR SYSTEM PROMPT                                     │
│    - Incluir rol del agente                                  │
│    - Incluir contexto comprimido                             │
│    - Incluir instrucciones específicas                       │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 5. LLAMAR AL LLM                                             │
│    - Enviar system prompt + messages                         │
│    - Procesar respuesta                                      │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 6. ACTUALIZAR MEMORIA                                        │
│    - Guardar mensaje en historial                            │
│    - Actualizar temas recientes                              │
│    - Detectar preferencias nuevas                            │
│    - Actualizar símbolos de interés                          │
└─────────────────────────────────────────────────────────────┘
```

---

## Algoritmo de Compresión de Contexto

```markdown
## Prioridad de Información (de mayor a menor)

1. **Crítico** (nunca comprimir)
   - Mensaje actual del usuario
   - Últimos 3 mensajes de contexto
   - Posiciones abiertas mencionadas

2. **Alto** (comprimir si es necesario)
   - Historial de conversación (resumir)
   - Datos de mercado (reducir a esenciales)
   - Preferencias de usuario

3. **Medio** (comprimir agresivamente)
   - Alertas no relacionadas al tema
   - Progreso educativo
   - Eventos económicos lejanos

4. **Bajo** (eliminar si falta espacio)
   - Memoria de conversaciones antiguas
   - Símbolos no mencionados
   - Detalles de portfolio no relevantes
```

---

## Dependencias

### Épicas Requeridas
- **OQI-001:** Perfil de usuario y preferencias
- **OQI-003:** Datos de mercado y portfolio
- **OQI-006:** Señales ML

### Servicios de Base de Datos
- Conversations table (historial)
- User_Preferences table (memoria)
- User_Memory table (información recordada)

---

## Especificaciones Técnicas Relacionadas

- [ET-LLM-001: Arquitectura del Chat](../especificaciones/ET-LLM-001-arquitectura-chat.md)
- [ET-LLM-006: Gestión de Memoria](../especificaciones/ET-LLM-006-gestion-memoria.md)

---

## Historias de Usuario Relacionadas

- US-LLM-001: Enviar mensaje al copilot (contexto básico)
- US-LLM-002: Conversación continua con memoria

---

*Documento de requerimientos - Sistema NEXUS*
*Trading Platform*
