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:
@@ -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:
|
||||
|
||||
@@ -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..."
|
||||
"""
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user