Fecha de publicación: 21 de octubre de 2024
Las tiendas en línea pueden obtener un aumento del 270% en las conversiones si muestran opiniones sobre los productos. Las opiniones negativas también son clave, ya que generan credibilidad. El 82% de los compradores en línea los buscan antes de comprar.
Animar a los clientes a que dejen opiniones útiles sobre los productos, en especial cuando son negativas, puede ser complicado. Aquí, exploraremos cómo usar la IA generativa para ayudar a los usuarios a escribir opiniones informativas que ayuden a las decisiones de compra de otras personas.
Demostración y código
Prueba nuestra demo de opiniones sobre productos y explora el código en GitHub.
Cómo lo hicimos
IA del cliente
Para esta demostración, implementamos la función del cliente por los siguientes motivos:
- Latencia. Queremos proporcionar sugerencias rápidamente, en cuanto el usuario deja de escribir. Podemos ofrecer esto evitando los viajes de ida y vuelta del servidor.
- Costo. Si bien esta es una demostración, si estás considerando lanzar una función similar en producción, es bueno experimentar sin costo del servidor hasta que puedas validar si la función tiene sentido para tus usuarios.
IA generativa de MediaPipe
Elegimos usar el modelo Gemma 2B a través de la API de inferencia de LLM de MediaPipe (paquete de GenAI de MediaPipe) por los siguientes motivos:
- Precisión del modelo: Gemma 2B ofrece un gran equilibrio entre tamaño y precisión. Cuando se le hizo la pregunta correcta, proporcionó resultados que consideramos satisfactorios para esta demostración.
- Compatibilidad con varios navegadores: MediaPipe es compatible con todos los navegadores que admiten WebGPU.
Experiencia del usuario
Aplica las prácticas recomendadas de rendimiento
Si bien Gemma 2B es un LLM pequeño, sigue siendo una descarga grande. Aplica las prácticas recomendadas de rendimiento, que incluyen el uso de un trabajador web.
Cómo hacer que la función sea opcional
Queremos que las sugerencias de opiniones basadas en IA mejoren el flujo de trabajo del usuario para publicar una opinión sobre un producto. En nuestra implementación, el usuario puede publicar una opinión incluso si el modelo no se cargó y, por lo tanto, no ofrece sugerencias de mejora.
Estados y animaciones de la IU
Por lo general, la inferencia tarda más tiempo de lo que se siente inmediato, por lo que le indicamos al usuario que el modelo está ejecutando la inferencia o "pensando". Usamos animaciones para facilitar la espera y, al mismo tiempo, asegurarle al usuario que la aplicación funciona según lo previsto. Descubre los diferentes estados de la IU que implementamos en nuestra demostración, según el diseño de Adam Argyle.
Otras consideraciones
En un entorno de producción, te recomendamos que hagas lo siguiente:
- Proporciona un mecanismo de comentarios. ¿Qué sucede si las sugerencias son mediocres o no tienen sentido? Implementa un mecanismo de comentarios rápidos (como Me gusta y No me gusta) y recurre a la heurística para determinar qué les resulta útil a los usuarios. Por ejemplo, evalúa cuántos de tus usuarios interactúan con la función y si la desactivan.
- Permitir inhabilitar ¿Qué sucede si el usuario prefiere usar sus propias palabras sin asistencia de IA o considera que la función es molesta? Permite que el usuario inhabilite la opción y la vuelva a habilitar cuando lo desee.
- Explica por qué existe esta función. Una explicación breve puede alentar a los usuarios a usar la herramienta de comentarios. Por ejemplo, "Los comentarios más útiles ayudan a los compradores a decidir qué comprar y nos ayudan a crear los productos que desean". Puedes agregar una explicación detallada de cómo funciona la función y por qué la proporcionaste, quizás como un vínculo para obtener más información.
- Divulga el uso de IA cuando corresponda. Con la IA del cliente, el contenido del usuario no se envía a un servidor para su procesamiento, por lo que se puede mantener en privado. Sin embargo, si compilas un resguardo del servidor o recopilas información con IA, considera agregarlo a tu política de privacidad, condiciones del servicio o a otros lugares.
Implementación
Nuestra implementación del generador de sugerencias de opiniones sobre productos podría funcionar para una amplia variedad de casos de uso. Considera la siguiente información como base para tus futuras funciones de IA del cliente.
MediaPipe en un trabajador web
Con la inferencia de LLM de MediaPipe, el código de IA es de solo unas pocas líneas: crea un solucionador de archivos y un objeto de inferencia de LLM pasándole una URL de modelo y, luego, usa esa instancia de inferencia de LLM para generar una respuesta.
Sin embargo, nuestro ejemplo de código es un poco más extenso. Esto se debe a que se implementa en un trabajador web, por lo que pasa mensajes con la secuencia de comandos principal a través de códigos de mensajes personalizados. Obtén más información sobre este patrón.
// Trigger model preparation *before* the first message arrives
self.postMessage({ code: MESSAGE_CODE.PREPARING_MODEL });
try {
// Create a FilesetResolver instance for GenAI tasks
const genai = await FilesetResolver.forGenAiTasks(MEDIAPIPE_WASM);
// Create an LLM Inference instance from the specified model path
llmInference = await LlmInference.createFromModelPath(genai, MODEL_URL);
self.postMessage({ code: MESSAGE_CODE.MODEL_READY });
} catch (error) {
self.postMessage({ code: MESSAGE_CODE.MODEL_ERROR });
}
// Trigger inference upon receiving a message from the main script
self.onmessage = async function (message) {
// Run inference = Generate an LLM response
let response = null;
try {
response = await llmInference.generateResponse(
// Create a prompt based on message.data, which is the actual review
// draft the user has written. generatePrompt is a local utility function.
generatePrompt(message.data),
);
} catch (error) {
self.postMessage({ code: MESSAGE_CODE.INFERENCE_ERROR });
return;
}
// Parse and process the output using a local utility function
const reviewHelperOutput = generateReviewHelperOutput(response);
// Post a message to the main thread
self.postMessage({
code: MESSAGE_CODE.RESPONSE_READY,
payload: reviewHelperOutput,
});
};
export const MESSAGE_CODE ={
PREPARING_MODEL: 'preparing-model',
MODEL_READY: 'model-ready',
GENERATING_RESPONSE: 'generating-response',
RESPONSE_READY: 'response-ready',
MODEL_ERROR: 'model-error',
INFERENCE_ERROR: 'inference-error',
};
INPUT y OUTPUT
Nuestro prompt completo se compiló con instrucciones con varios ejemplos. Incluye la entrada del usuario o, en otras palabras, el borrador de la opinión que escribió el usuario.
Para generar nuestro mensaje según la entrada del usuario, llamamos a nuestra función de utilidad generatePrompt
durante el tiempo de ejecución.
Por lo general, los modelos y las bibliotecas de IA del cliente tienen menos utilidades que la IA del servidor. Por ejemplo, el modo JSON a menudo no está disponible. Esto significa que debemos proporcionar la estructura de salida deseada dentro de la instrucción. Esto es menos claro, mantenible y confiable que proporcionar un esquema a través de la configuración del modelo. Además, los modelos del cliente suelen ser más pequeños, lo que significa que son más propensos a errores estructurales en su salida.
En la práctica, observamos que Gemma 2B hace un mejor trabajo para proporcionar un resultado estructurado como texto en comparación con JSON o JavaScript. Por lo tanto, para esta demostración, optamos por un formato de salida basado en texto. El modelo genera texto, que luego analizamos en un objeto JavaScript para procesarlo en nuestra app web.
Mejoramos nuestra instrucción
Usamos un LLM para iterar en nuestra instrucción.
- Instrucciones con varios ejemplos. Para generar los ejemplos de nuestras instrucciones con varios ejemplos, nos basamos en Gemini Chat. Gemini Chat usa los modelos de Gemini más potentes. Esto garantizó que generáramos ejemplos de alta calidad.
- Pulido de la instrucción. Una vez que la estructura de la instrucción estaba lista, también usamos Gemini Chat para definirla mejor. Esto mejoró la calidad del resultado.
Usa el contexto para aumentar la calidad
Incluir el tipo de producto en la instrucción ayudó al modelo a proporcionar sugerencias más relevantes y de mejor calidad. En esta demostración, el tipo de producto es estático. En una aplicación real, podrías incluir el producto de forma dinámica en tu instrucción, según la página que visite el usuario.
Review: "I love these."
Helpful: No
Fix: Be more specific, explain why you like these **socks**.
Example: "I love the blend of wool in these socks. Warm and not too heavy."
Uno de los ejemplos de la sección de algunas imágenes de nuestra consigna: el tipo de producto ("calcetines") se incluye en la solución sugerida y en la opinión de ejemplo.
Errores y correcciones de LLM
Por lo general, Gemma 2B requiere más ingeniería de instrucciones que un modelo más potente y más grande del servidor.
Encontramos algunos desafíos con Gemma 2B. A continuación, te mostramos cómo mejoramos los resultados:
- Muy bien. Gemma 2B tuvo dificultades para marcar las opiniones como “poco útiles” y, al parecer, tenía dudas para juzgarlas. Intentamos que el lenguaje de las etiquetas fuera más neutral ("específico" y "no específico", en lugar de "útil" y "no útil") y agregamos ejemplos, pero esto no mejoró los resultados. Lo que mejoró los resultados fue la insistencia y la repetición en la instrucción. Es probable que un enfoque de cadena de pensamiento también genere mejoras.
Las instrucciones no son claras. A veces, el modelo interpretó demasiado la instrucción. En lugar de evaluar la opinión, continuó con la lista de ejemplos. Para solucionar esto, incluimos una transición clara en la instrucción:
I'll give you example reviews and outputs, and then give you one review to analyze. Let's go: Examples: <... Examples> Review to analyze: <... User input>
Estructurar claramente la instrucción ayuda al modelo a diferenciar entre la lista de ejemplos (pocas tomas) y la entrada real.
Objetivo incorrecto. En ocasiones, el modelo sugería cambios en el producto en lugar del texto de la opinión. Por ejemplo, para una opinión que dice "Odio estos calcetines", el modelo podría sugerir "Considera reemplazar los calcetines por una marca o un estilo diferente", que no es el efecto deseado. Dividir la instrucción ayudó a aclarar la tarea y mejoró el enfoque del modelo en la revisión.