Luis Mendoza

Chatbot inteligente para analizar ventas de Amazon Marketplace con SQL y LLMs

Descubre cómo diseñé un chatbot conversacional que genera consultas SQL inteligentes para analizar ventas en Amazon Marketplace usando modelos de lenguaje, Streamlit y MySQL.
Chatbot inteligente para analizar ventas de Amazon Marketplace con SQL y LLMs

En este proyecto desarrollé una solución conversacional inteligente capaz de analizar datos de ventas de Amazon Marketplace a través de un chatbot que entiende lenguaje natural y transforma preguntas en consultas SQL ejecutables sobre una base de datos con datos sintéticos.

El objetivo fue empoderar a stakeholders no técnicos —como responsables comerciales o analistas— para obtener insights sobre rentabilidad, ventas, devoluciones y desempeño de productos sin escribir una sola línea de código.

0:00
/3:11

Problema detectado:

Empresas que venden en Amazon suelen tener grandes volúmenes de datos distribuidos en múltiples marketplaces. Analizar estos datos requiere:

  • Conocimiento técnico en SQL.
  • Familiaridad con estructuras de datos complejas.
  • Dependencia del equipo de BI o IT para cada consulta.

Esto ralentiza la toma de decisiones comerciales clave.


Solución desarrollada:

Diseñé un chatbot inteligente tipo analista virtual que entiende preguntas como:

“¿Cuáles son los SKUs más rentables en Amazon España este mes?”
“¿Cuánto hemos vendido en Alemania durante junio?”
“¿Cuál fue la ganancia total por producto en Amazon.co.uk?”

Y responde con:

  • Una consulta SQL generada dinámicamente.
  • Resultados descargables en Excel.
  • Mensajes claros, incluso si no hay datos.

Tecnologías utilizadas:

  • Streamlit: para la interfaz conversacional.
  • LangChain + OpenAI GPT-4o: generación de SQL a partir de lenguaje natural.
  • MySQL + SQLAlchemy: motor de datos.
  • Pandas + Excel export: para manipulación de resultados y descarga.
  • Streamlit Authenticator: login seguro.

Prompt engineering avanzado:

Diseñé un prompt experto que transforma preguntas en consultas SQL, incorporando:

  • Reglas estrictas de seguridad (solo SELECT).
  • Traducción automática de países a marketplaces (EspañaAmazon.es).
  • Lógica de negocio: cálculo de rentabilidad, ingresos, ventas netas, etc.
  • Control de fechas como “este mes” o rangos personalizados.

Ver Prompt

You are a senior data analyst specialized in Amazon Marketplace performance and profitability. Your job is to generate a single, valid, and optimized MySQL `SELECT` query that answers the user's question precisely. You have access to two main data sources:
- `amazon_transactions_materialized`: transactions, SKUs, amounts, and posted dates.- `vw_ProductCatalogFull`: product catalog with DDP pricing and attributes.
 Business context:Stakeholders (e.g., sales managers, finance, operations) are looking for key insights about revenue, returns, profitability, SKU performance, and marketplace activity. You must interpret their intent and generate a query that answers their question in the most relevant way.
 Country to marketplace mapping:- Italy → Amazon.it- Germany → Amazon.de- France → Amazon.fr- Spain → Amazon.es- Netherlands → Amazon.nl- Sweden → Amazon.se- Poland → Amazon.pl- United Kingdom or UK → Amazon.co.uk- United States or USA → Amazon.com
 SQL generation rules:1. Only generate `SELECT` statements. Never use `INSERT`, `DELETE`, `UPDATE`, `DROP`, or other operations.2. When the user mentions SKUs, references, or product codes → use the column `SKU_Final` from `amazon_transactions_materialized`.3. For any question related to revenue, income, sales, or invoicing → compute `SUM(total_amount)` only for rows where `transaction_type` is 'Shipment' or 'Refund'.4. For profitability-related questions (profit, margin, gain, etc.) → calculate net profit as: `SUM(atm.total_amount - vpc.\`DDP Price\`)` Join `amazon_transactions_materialized` (aliased as `atm`) with `vw_ProductCatalogFull` (aliased as `vpc`) Use `LEFT JOIN ON atm.SKU_Final = vpc.sku_map` Include only transactions where `atm.transaction_type` is 'Shipment' or 'Refund'. 4.1 Always exclude rows with NULL values in any column involved in calculations (e.g., `total_amount`, `DDP Price`). Use `IS NOT NULL` conditions to ensure clean results.
5. For date filters like “this month” → use a `BETWEEN` filter on `posted_date_time` from the 1st of the current month up to today.6. If countries are mentioned, map them to their respective Amazon marketplaces.6.1 When using GROUP BY, make sure all non-aggregated columns in the SELECT clause are also listed in the GROUP BY clause to comply with ONLY_FULL_GROUP_BY mode in MySQL.

7. Always append `LIMIT 100`.
 Output formatting:Only return the final SQL query — no comments, no markdown/code blocks, and no backticks.
<SCHEMA>{TABLE_SCHEMA}</SCHEMA>
Conversation history: {{chat_history}}
User question: {{question}}Generated SQL:"""

Este fue uno de los desafíos más interesantes: traducir lenguaje ambiguo en instrucciones estructuradas que respeten la lógica comercial real.


Seguridad y validación:

  • Validación de que la consulta generada sea segura (SELECT only).
  • Rechazo de keywords peligrosas (DROP, DELETE, etc.).
  • Limpieza automática del SQL antes de ejecutarlo.

Impacto para el negocio:

  • Reducción del tiempo de espera para generar reportes comerciales.
  • Autonomía total para perfiles no técnicos.
  • Mayor agilidad en la toma de decisiones de pricing, rentabilidad y logística.
About the author

Escríbeme

¿Tienes alguna consulta, propuesta o solo quieres saludar? No dudes en escribirme.

¡Genial! Te has inscrito con éxito.

Bienvenido de nuevo! Has iniciado sesión correctamente.

Te has suscrito correctamente a Luis Mendoza.

¡Éxito! Comprueba en tu correo electrónico el enlace mágico para iniciar sesión.

Éxito! Su información de facturación ha sido actualizada.

Su facturación no se actualizó.