package com.musicfy.productos;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/productos")
public class CategorizacionProductosController {
private final ChatClient chatClient;
public CategorizacionProductosController(ChatClient.Builder chatClientBuilder) {
this.chatClient = chatClientBuilder.build();
}
@GetMapping("/categorizar")
public String categorizarProducto(@RequestParam String descripcion) {
String prompt = """
Eres un asistente especializado en categorización de productos para e-commerce.
Tu tarea es analizar la descripción del producto y devolver únicamente una categoría válida.
Reglas:
1. Responde solo con una de estas categorías:
- Electrónica
- Ropa
- Hogar
- Deportes
- Belleza
- Juguetes
- Alimentos
- Libros
- Mascotas
- Otros
2. No expliques tu respuesta.
3. No agregues texto adicional.
4. Si la descripción es ambigua o no encaja claramente, responde: Otros.
Ejemplos:
Descripción: "Smartphone con pantalla OLED de 6.5 pulgadas y 256 GB de almacenamiento"
Categoría: Electrónica
Descripción: "Camiseta deportiva de algodón para hombre"
Categoría: Ropa
Descripción: "Silla ergonómica para oficina con soporte lumbar"
Categoría: Hogar
Ahora categoriza este producto:
Descripción: "%s"
Categoría:
""".formatted(descripcion);
return this.chatClient.prompt()
.user(prompt)
.call()
.content();
}
}
@GetMapping("/categorizar-json")
public String categorizarProductoJson(@RequestParam String descripcion) {
String prompt = """
Eres un asistente especializado en categorización de productos.
Analiza la descripción y responde únicamente en formato JSON válido,
sin comentarios ni texto adicional.
Categorías permitidas:
["Electrónica", "Ropa", "Hogar", "Deportes", "Belleza", "Juguetes", "Alimentos", "Libros", "Mascotas", "Otros"]
Reglas:
- Usa solo una categoría.
- Si no estás seguro, usa "Otros".
Formato de salida:
{"categoria":"<valor>"}
Descripción del producto: "%s"
""".formatted(descripcion);
return this.chatClient.prompt()
.user(prompt)
.call()
.content();
}