# RF-LLM-005: Integración de Herramientas (Tools)

**É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 poder ejecutar herramientas (tools) para obtener información en tiempo real, realizar cálculos y ejecutar acciones en la plataforma. Las herramientas permiten al agente interactuar con sistemas externos y proporcionar respuestas precisas basadas en datos actuales.

---

## Requisitos Funcionales

### RF-LLM-005.1: Herramienta de Market Data
- El agente debe consultar precio actual de cualquier símbolo
- El agente debe obtener OHLCV de múltiples timeframes
- El agente debe consultar indicadores técnicos calculados
- El agente debe obtener datos históricos para análisis
- El agente debe manejar símbolos de stocks y crypto

### RF-LLM-005.2: Herramienta de Portfolio
- El agente debe consultar posiciones actuales del usuario
- El agente debe obtener P&L de posiciones
- El agente debe consultar historial de trades
- El agente debe calcular métricas de portfolio
- El agente debe verificar capital disponible

### RF-LLM-005.3: Herramienta de Noticias
- El agente debe buscar noticias relevantes por símbolo
- El agente debe obtener sentiment de noticias
- El agente debe filtrar noticias por fecha
- El agente debe identificar noticias de impacto alto

### RF-LLM-005.4: Herramienta de ML Signals
- El agente debe consultar predicciones del ML Engine
- El agente debe obtener nivel de confianza de predicciones
- El agente debe acceder a features usados en predicción
- El agente debe obtener histórico de precisión del modelo

### RF-LLM-005.5: Herramienta de Paper Trading
- El agente debe poder crear órdenes de paper trading
- El agente debe consultar órdenes pendientes
- El agente debe cancelar órdenes si el usuario lo solicita
- El agente debe calcular impacto de orden propuesta

### RF-LLM-005.6: Herramienta de Alerts
- El agente debe crear alertas de precio
- El agente debe listar alertas activas
- El agente debe modificar/eliminar alertas
- El agente debe configurar alertas de indicadores

### RF-LLM-005.7: Herramienta de Cálculos
- El agente debe calcular position sizing
- El agente debe calcular risk/reward ratios
- El agente debe convertir monedas
- El agente debe calcular correlaciones entre activos

### RF-LLM-005.8: Herramienta de Watchlist
- El agente debe agregar símbolos a watchlist
- El agente debe consultar watchlist actual
- El agente debe remover símbolos de watchlist
- El agente debe obtener resumen de watchlist

---

## Criterios de Aceptación

```gherkin
Feature: Integración de Herramientas

Scenario: Consultar precio actual
  Given el usuario pregunta "¿Cuál es el precio de BTC?"
  When el agente usa la herramienta get_price
  Then obtiene precio actualizado (max 15 seg delay)
  And responde con precio formateado
  And incluye cambio porcentual 24h

Scenario: Crear orden de paper trading
  Given soy usuario Premium
  And tengo paper trading habilitado
  When digo "Compra 10 acciones de AAPL"
  Then el agente usa herramienta create_paper_order
  And confirma los parámetros antes de ejecutar
  And muestra orden creada

Scenario: Consultar señales ML
  Given soy usuario Pro
  When pregunto "¿Qué dice el ML sobre TSLA?"
  Then el agente usa herramienta get_ml_signals
  And muestra predicción con confianza
  And explica los features principales

Scenario: Crear alerta de precio
  Given digo "Avísame cuando AAPL llegue a $190"
  When el agente procesa la solicitud
  Then usa herramienta create_alert
  And confirma alerta creada
  And muestra listado de alertas activas

Scenario: Herramienta no disponible por plan
  Given soy usuario Free
  When digo "Crea una orden de paper trading"
  Then el agente detecta herramienta restringida
  And informa que requiere plan Pro
  And sugiere upgrade
```

---

## Reglas de Negocio

| Regla | Descripción |
|-------|-------------|
| RN-001 | Confirmar antes de ejecutar acciones (órdenes, alertas) |
| RN-002 | Paper trading solo para Pro/Premium |
| RN-003 | ML signals solo para Pro/Premium |
| RN-004 | Máximo 10 herramienta-calls por mensaje |
| RN-005 | Cache de market data: 5 segundos |
| RN-006 | No ejecutar trades reales (solo paper) |
| RN-007 | Logging de todas las herramientas ejecutadas |

---

## Catálogo de Herramientas

### Herramientas de Lectura (Todos los planes)

| Tool ID | Nombre | Descripción | Rate Limit |
|---------|--------|-------------|------------|
| T-001 | `get_price` | Obtener precio actual | 60/min |
| T-002 | `get_ohlcv` | Obtener velas OHLCV | 30/min |
| T-003 | `get_indicators` | Obtener indicadores técnicos | 30/min |
| T-004 | `get_news` | Buscar noticias por símbolo | 10/min |
| T-005 | `get_watchlist` | Obtener watchlist del usuario | 60/min |
| T-006 | `calculate` | Cálculos financieros | 100/min |

### Herramientas Pro (Pro/Premium)

| Tool ID | Nombre | Descripción | Rate Limit |
|---------|--------|-------------|------------|
| T-007 | `get_ml_signals` | Obtener señales ML | 30/min |
| T-008 | `get_portfolio` | Obtener portfolio actual | 30/min |
| T-009 | `create_paper_order` | Crear orden paper trading | 10/min |
| T-010 | `cancel_paper_order` | Cancelar orden | 20/min |
| T-011 | `create_alert` | Crear alerta de precio | 20/min |
| T-012 | `manage_alerts` | Listar/modificar alertas | 30/min |

### Herramientas Premium

| Tool ID | Nombre | Descripción | Rate Limit |
|---------|--------|-------------|------------|
| T-013 | `backtest_strategy` | Ejecutar backtest | 5/min |
| T-014 | `get_correlations` | Análisis de correlaciones | 10/min |
| T-015 | `portfolio_analysis` | Análisis avanzado portfolio | 10/min |
| T-016 | `export_data` | Exportar datos a CSV | 5/min |

---

## Esquema de Tool Calls

```yaml
# Ejemplo: get_price
tool_call:
  name: "get_price"
  parameters:
    symbol: "AAPL"

tool_response:
  success: true
  data:
    symbol: "AAPL"
    price: 185.50
    change_24h: 2.35
    change_percent: 1.28
    volume: 45000000
    timestamp: "2025-12-05T15:30:00Z"

# Ejemplo: create_paper_order
tool_call:
  name: "create_paper_order"
  parameters:
    symbol: "AAPL"
    side: "buy"
    quantity: 10
    order_type: "market"

tool_response:
  success: true
  data:
    order_id: "paper-12345"
    status: "pending_confirmation"
    estimated_cost: 1855.00
    message: "Confirma la orden: Comprar 10 AAPL a mercado (~$1,855)"
```

---

## Flujo de Ejecución de Tools

```
┌─────────────────────────────────────────────────────────────┐
│ 1. Usuario envía mensaje                                     │
│    "Compra 5 TSLA si el precio baja a $240"                 │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 2. LLM analiza intent                                        │
│    - Acción: crear alerta + orden condicional                │
│    - Tools necesarios: get_price, create_alert               │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 3. Verificar permisos                                        │
│    - ¿Usuario tiene plan Pro? ✓                              │
│    - ¿Rate limit OK? ✓                                       │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 4. Ejecutar tool: get_price("TSLA")                         │
│    Response: { price: 245.30, ... }                          │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 5. Ejecutar tool: create_alert                               │
│    { symbol: "TSLA", condition: "<=", price: 240 }          │
└──────────────────────────┬──────────────────────────────────┘
                           ↓
┌─────────────────────────────────────────────────────────────┐
│ 6. LLM genera respuesta con resultados                       │
│    "He creado una alerta para TSLA a $240..."               │
└─────────────────────────────────────────────────────────────┘
```

---

## Dependencias

### Épicas Requeridas
- **OQI-001:** Autenticación (verificar plan del usuario)
- **OQI-003:** Market data y paper trading
- **OQI-006:** ML Signals

### Servicios Internos
- MarketDataService
- PaperTradingService
- AlertService
- MLSignalService
- PortfolioService

---

## Especificaciones Técnicas Relacionadas

- [ET-LLM-005: Arquitectura de Tools](../especificaciones/ET-LLM-005-arquitectura-tools.md)
- [ET-LLM-006: Rate Limiting y Seguridad](../especificaciones/ET-LLM-006-seguridad.md)

---

## Historias de Usuario Relacionadas

- US-LLM-009: Consultar datos de mercado vía chat
- US-LLM-010: Crear órdenes de paper trading vía chat

---

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