fix(pos): chatbot busca partes automaticamente con traduccion ES→EN

- System prompt: SIEMPRE devuelve search_query en ingles
- Diccionario de traducciones (balatas→Brake Pad, etc.)
- Busca directo sin preguntar mas info
- Fallback: extrae keywords si AI no da search_query

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-02 07:39:47 +00:00
parent 9908c045c9
commit b5d62c2812
2 changed files with 42 additions and 21 deletions

View File

@@ -46,10 +46,23 @@ def chat():
vehicle_match = _resolve_vehicle(master, vehicle)
# Run catalog search if we have a search query
if search_query and master and tenant:
# Also search if AI identified a vehicle but didn't give a search_query
effective_query = search_query
if not effective_query and vehicle:
# Extract likely part keywords from the user's message
import re
# Remove brand/model/year from message to get the part description
part_words = user_message.lower()
for remove in [vehicle.get('brand',''), vehicle.get('model',''), str(vehicle.get('year',''))]:
part_words = part_words.replace(remove.lower(), '')
part_words = re.sub(r'necesito|quiero|busco|para|un|una|el|la|de|del|los|las|mi|\d{4}', '', part_words).strip()
if len(part_words) >= 3:
effective_query = part_words
if effective_query and master and tenant:
try:
results = catalog_service.smart_search(
master, search_query, tenant, branch_id, limit=10
master, effective_query, tenant, branch_id, limit=10
)
search_results = results if results else []
except Exception:

View File

@@ -10,28 +10,36 @@ MODEL = "anthropic/claude-haiku-4.5" # Fast + cheap for chat
SYSTEM_PROMPT = """Eres un asistente de refaccionaria automotriz mexicana. Tu trabajo es ayudar a encontrar autopartes.
Cuando el usuario describe lo que necesita, extrae:
1. Marca del vehiculo (si la menciona)
2. Modelo del vehiculo (si lo menciona)
3. Ano del vehiculo (si lo menciona)
4. Tipo de parte que busca
Responde en espanol, de forma breve y directa. Si puedes identificar el numero de parte OEM, incluyelo.
Si no tienes suficiente informacion, pregunta lo que falte.
IMPORTANTE: Responde SIEMPRE en formato JSON con esta estructura:
IMPORTANTE: Responde SIEMPRE en formato JSON valido con esta estructura:
{
"message": "Tu respuesta al usuario",
"search_query": "texto para buscar en el catalogo" | null,
"vehicle": {"brand": "TOYOTA", "model": "Corolla", "year": 2020} | null
"message": "Tu respuesta al usuario en español",
"search_query": "termino de busqueda EN INGLES para el catalogo",
"vehicle": {"brand": "TOYOTA", "model": "Corolla", "year": 2020}
}
Reglas:
- "message" es tu respuesta conversacional al usuario.
- "search_query" es el texto clave para buscar partes en la base de datos (nombre de parte en ingles, numero OEM, etc). Usa null si no hay busqueda.
- "vehicle" extrae marca, modelo y ano si los menciona. Usa null si no hay vehiculo.
- La marca debe ir en MAYUSCULAS (NISSAN, TOYOTA, CHEVROLET, etc).
- Nombres comunes mexicanos: Tsuru = Sentra/Tsuru, Aveo, Jetta, Pointer, Chevy = Corsa, Vocho = Beetle.
Reglas OBLIGATORIAS:
1. "search_query" SIEMPRE debe tener un valor cuando el usuario menciona una parte. NUNCA dejes null si el usuario pide algo.
2. "search_query" debe estar EN INGLES porque el catalogo TecDoc tiene nombres en ingles. Traducciones comunes:
- Balatas/Pastillas de freno = "Brake Pad"
- Discos de freno = "Brake Disc"
- Amortiguador = "Shock Absorber"
- Filtro de aceite = "Oil Filter"
- Filtro de aire = "Air Filter"
- Bujias = "Spark Plug"
- Banda serpentina = "V-Belt" o "Serpentine Belt"
- Bomba de agua = "Water Pump"
- Alternador = "Alternator"
- Radiador = "Radiator"
- Sensor de oxigeno = "Oxygen Sensor"
- Terminal de direccion = "Tie Rod End"
- Bomba de gasolina = "Fuel Pump"
- Clutch/Embrague = "Clutch Kit"
- Mofle/Escape = "Exhaust"
- Inyector = "Injector"
3. "vehicle" extrae marca, modelo y ano. La marca en MAYUSCULAS.
4. Nombres mexicanos: Tsuru = TSURU, Aveo = AVEO, Jetta = JETTA, Pointer = POINTER, Chevy = CORSA, Vocho = BEETLE.
5. No preguntes mas info si ya puedes buscar. Si el usuario dice "balatas para Tsuru 2015", busca directo.
6. "message" es breve y directo: "Buscando balatas para Nissan Tsuru 2015..."
"""