Crea un asistente de Shopping inteligente con AlloyDB y Vertex AI Agent Builder (parte 2)

1. Descripción general

En el acelerado panorama actual de la venta minorista, es primordial brindar una atención al cliente excepcional y brindar experiencias de compra personalizadas. Te llevaremos por un recorrido técnico a través de la creación de una aplicación de chat basada en el conocimiento, diseñada para responder las preguntas de los clientes, guiar el descubrimiento de productos y adaptar los resultados de la búsqueda. Esta solución innovadora combina la potencia de AlloyDB para el almacenamiento de datos, un motor de estadísticas interno para la comprensión contextual, Gemini (modelo de lenguaje grande) para la validación de la relevancia y Agent Builder de Google para iniciar rápidamente un asistente de conversación inteligente.

El desafío: Los clientes minoristas modernos esperan respuestas instantáneas y recomendaciones de productos que se alineen con sus preferencias únicas. Los métodos de búsqueda tradicionales no suelen proporcionar este nivel de personalización.

La solución: Nuestra aplicación de chat basada en el conocimiento aborda este desafío de manera directa. Aprovecha una amplia base de conocimiento derivada de tus datos de venta minorista para comprender la intención de los clientes, responder de forma inteligente y generar resultados sumamente relevantes.

Qué compilarás

Como parte de este lab (Parte 2), harás lo siguiente:

  1. Compilar un agente de Vertex AI Agent Builder
  2. Integra la herramienta de AlloyDB al agente

Requisitos

  • Un navegador, como Chrome o Firefox.
  • Un proyecto de Google Cloud con facturación habilitada.

2. Arquitectura

Flujo de datos: Analicemos con más detalle cómo se mueven los datos a través de nuestro sistema:

Transferencia:

Los datos de venta minorista (inventario, descripciones de productos, interacciones con los clientes) se cargan de forma continua a AlloyDB.

Motor de estadísticas:

Usaremos AlloyDB como motor de estadísticas para realizar lo siguiente:

  1. Extracción de contexto: El motor analiza los datos almacenados en AlloyDB para comprender las relaciones entre los productos, las categorías, el comportamiento de los clientes, etcétera, según corresponda.
  2. Creación de incorporaciones: Las incorporaciones (representaciones de texto matemáticas) se generan tanto para la consulta del usuario como para la información almacenada en AlloyDB.
  3. Búsqueda de vectores: El motor realiza una búsqueda de similitud, comparando la incorporación de consultas con las incorporaciones de descripciones de productos, opiniones y otros datos relevantes. Esto identifica los 25 “vecinos más cercanos” más relevantes.

Validación de Gemini:

Estas posibles respuestas se envían a Gemini para su evaluación. Gemini determina si son realmente relevantes y seguros para compartir con el usuario.

Generación de respuestas:

Las respuestas validadas se estructuran en un array JSON y todo el motor se empaqueta en una Cloud Run Function sin servidores que se invoca desde Agent Builder.

Los pasos anteriores ya se abordan en la parte 1 del lab.

Analizamos los detalles técnicos de la creación de un motor de analítica basado en el conocimiento que funcione nuestro asistente de compras inteligente. Ahora, exploremos cómo aprovechamos la magia de Agent Builder para darle vida a este motor en una interfaz conversacional. Asegúrate de tener lista la URL del extremo antes de comenzar la parte 2. El siguiente paso es lo que abordaremos en este lab:

Interacción conversacional:

Agent Builder presenta las respuestas al usuario en un formato de lenguaje natural, lo que facilita un diálogo de ida y vuelta.

3. Antes de comenzar

Crea un proyecto

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información para verificar si la facturación está habilitada en un proyecto .
  3. Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud y que viene precargado en bq. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.

Imagen del botón Activa Cloud Shell

  1. Cuando te conectes a Cloud Shell, usa el siguiente comando para comprobar que ya estés autenticado y que el proyecto esté configurado con tu ID del proyecto:
gcloud auth list
  1. Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de gcloud conoce tu proyecto.
gcloud config list project
  1. Si tu proyecto no está configurado, usa el siguiente comando para hacerlo:
gcloud config set project <YOUR_PROJECT_ID>
  1. Habilita las API necesarias. La alternativa al comando de gcloud es a través de la consola buscando cada producto o usando este vínculo.

Si falta alguna API, siempre puedes habilitarla durante el curso de la implementación.

Consulta la documentación para ver los comandos y el uso de gcloud.

Nota importante: Además, asegúrate de haber completado la PARTE 1 del lab para completar este proceso.

4. Creación del agente

Presentación de Agent Builder

Agent Builder es una herramienta potente y con poco código que nos permite crear agentes conversacionales con rapidez y eficiencia. Agiliza el proceso de diseño de flujos de diálogo, integración de bases de conocimiento y conexión a APIs externas. En este caso, usaremos Agent Builder para conectarnos sin problemas con el extremo de Cloud Function que compilamos en la Parte 1, lo que permitirá que nuestro Shopping Assistant acceda a nuestra base de conocimiento de venta minorista y responda las consultas de los clientes de manera inteligente.

Compila el agente

Comencemos con la creación de este nuevo agente para responder las preguntas de los usuarios sobre los productos de indumentaria.

  1. Primero, accede a la plataforma de Agent Builder. Si te solicita que actives la API, haz clic en CONTINUAR Y ACTIVA LA API.
  2. Haz clic en "CREAR APLICACIÓN". y asígnale un nombre descriptivo (p.ej., "Asistente de venta minorista").
  3. Haz clic en el tipo de app "Agente".

462bb48664e9a14e.png

  1. de Google Cloud. Asígnale un nombre descriptivo a tu agente, como “Asistente de venta minorista”. y establece la región como us-central1.

10eceef44b1600d1.png

  1. Ingresa los detalles del agente:
  2. Cambie el nombre del agente a "Retail Shopping Agent".
  3. Agregue el siguiente "Objetivo":
You are a shopping assistant agent! Your job is to help the customer search for their ideal apparels, allow them to add items to their cart, remove items from their cart, and review items in their cart. Once a user is done searching, open the search results in a user friendly html page.

537a87a842aae897.png

  1. Guárdala y, por ahora, deja las instrucciones en blanco.
  2. Luego, haz clic en Herramientas en el menú de navegación y haz clic en CREAR.

2ffae953bbad38e5.png

Ingresa el nombre de la herramienta: Retail Shopping Tool

Ingresa la descripción de la herramienta:

This tool refers to the dataset in the backend as the context information for product inventory. It takes as input the user's search text summarized by the agent and matches with the most appropriate list of items and returns as an array of items.

Ingresa el esquema: OpenAPI en formato YAML:

Esta es la parte en la que usaremos el extremo de backend para potenciar el agente. Copia la siguiente especificación de OpenAPI y reemplaza el marcador de posición de URL (encerrado entre corchetes angulares) por tu extremo de Cloud Function:

openapi: 3.0.0
info:
 title: AlloyDB Product Matcher
 description: A Cloud Function to query AlloyDB for product matches based on user search text.
 version: 1.0.0
servers:
 - url: <<https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/alloy-gem>>
paths:
 /:
   post:
     summary: Find matching products based on search text.
     operationId: apparelSearch
     requestBody:
       description: JSON object containing the search text.
       required: true
       content:
         application/json:
           schema:
             type: object
             properties:
               search:
                 type: string
                 description: The user's search query for product matching.
     responses:
       '200':
         description: Successful response with a JSON array of matching products.
         content:
           application/json:
             schema:
               type: array
               items:
                 type: object
                 properties:
                   id:
                     type: string
                     description: Product ID.
                   category:
                     type: string
                     description: Product category.
                   sub_category:
                     type: string
                     description: Product sub-category.
                   uri:
                     type: string
                     description: Product URI or URL.
                   description:
                     type: string
                     description: Product description.
                   literature:
                     type: object
                     description: JSON object containing match information from the ML model.
                     properties:
                       MATCH:
                         type: string
                         description: Whether the product matches the search query (YES/NO).
                       PERCENTAGE:
                         type: string
                         description: Percentage of match.
                       DIFFERENCE:
                         type: string
                         description: Description of differences between the search and product.
       '500':
         description: Internal server error.

Deja las otras configuraciones con sus valores predeterminados y haz clic en “Guardar”.

  1. Regresemos al agente en este punto porque queremos agregar la "Herramienta". configuración a las “Instrucciones” del agente. Agrega lo siguiente al marcador de posición de las instrucciones (recuerda que las sangrías son importantes para definir el flujo):
- Greet the user and answer their question to the best of your knowledge.
- Summarize the user's request and ask them to confirm that you understood correctly.
   - Check if the request has details like gender, color, material, style and other key apparel details already.
   - If not, seek clarifying details.
   - If the search request is very broad, then ask the user to narrow down the request with specific details that you believe could be personal preferences.
   - Once all the necessary details are met, summarize your final understanding of the request with the user.
- Use ${TOOL: Retail Shopping Tool} to help the user with their task.
- If the request has unrelated input text, gracefully convey that you don't have information on that topic.
- Do not give product availability information outside the source that is provided to you in ${TOOL: Retail Shopping Tool}.
- Do not assist with any information unless you are certain that you know the answer and it is grounded in the source of truth.
- Thank the user for their business and say goodbye.

Asegúrate de usar la herramienta "Retail Shopping Tool". está seleccionado en las "Herramientas disponibles" y, luego, vuelve a guardar el agente.

5. Prueba el agente

En el panel de la derecha, deberías ver la sección del agente de vista previa, que te permite probar tu agente.

Como puedes ver en la siguiente captura de pantalla, me saludé como usuario y comencé mi chat con una solicitud de camisa blanca con diseños:

63ac3ef6d1f0f614.png

Esta es la respuesta JSON:

acf3cb0e2be2ed91.png

Este es el resultado JSON sin procesar de la Cloud Function que procesa la búsqueda de similitud de AlloyDB. Eso es todo. Ya estamos listos con el agente.

6. Ejemplo de flujo de conversación

En este punto, puedes probar y, luego, iterar el flujo de tu agente de diálogo (conversación):

User: I'm looking for women's boots for winter. 

Agent: (OpenAPI call to Cloud Function that works with AlloyDB Similarity Search) 

Cloud Function: (Processes query, returns JSON array) 

Agent: Based on your preferences, here are some options: [Product 1, Product 2, Product 3]. Would you like to see more details about any of these?

User: No, That is all. Bye!

Agent: Have a good day!

Pocas instrucciones de toma

Ahora, digamos que quieres ver el resultado en el agente conversacional en un cierto formato gráfico que incluye imágenes y vínculos. Para ello, usaremos ejemplos de conversaciones, también conocidas como "Instrucción de tomas escasas".

Esto significa que queremos agregar algunos ejemplos al compilador del agente para tener un formato de resultado coherente.

En una de las capturas de pantalla anteriores del estudio "Probar el agente" vemos la respuesta del agente como "Ya veo. ¿Buscas una camisa blanca con estampados azules...". Ve a esa respuesta o crea una conversación de prueba nueva desde el panel derecho del agente:

  1. Escribe lo siguiente en "Enter User Input". sección:

dc8c010c36400e64.png

Verás una respuesta como la siguiente:

e31d9f53bf5564c8.png

También verás el array JSON que muestra el extremo de la API.

  1. Ahora haz clic en Nombre del agente (como se muestra en la siguiente imagen, resaltada con una marca de verificación roja) en el margen de la sección de vista previa y se destacarán todas las pestañas de la sección de vista previa del chat. Ahora haz clic en "Save Example". arriba a la derecha en la sección de vista previa. Se verá de la siguiente forma:

1e0a9f6815f63bf9.png

  1. Guarda la conversación con el nombre visible “Respuesta con imágenes” (Response with images) o algo similar, y haz clic en "Crear".
  2. Ahora, ve a la pestaña de respuestas destacada con una marca de verificación negra en la imagen de arriba y reemplaza el texto "Ya veo. Supongamos que buscas unas sandalias amarillas. ¿Es correcto?". con lo siguiente:
I see you are looking for yellow sandals. Here are a few options for you:
<!DOCTYPE html>
<html>
<body>

<h2>Featured Sandals</h2>

<table style="overflow-x: auto; white-space: nowrap;">
    <tr>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/d27dbd8e9666b9af2d72fbfde315f76d_images.jpg" alt="Yellow sandals from Estd. 1977" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/b7a479fe5f56457e930541a789c5df68_images.jpg" alt="Yellow sandals from Gliders" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/b6c813734b29b89d1055fd000ea50743_images.jpg" alt="Yellow sandals from Rocia" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/ee0e918c229e76e0e7e61712e9d2ecb3_images.jpg" alt="Yellow flip flops from Numero Uno" width="300">
        </td>
        <td>
            <img src="https://assets.myntassets.com/v1/images/style/properties/5bdd4c9e739205e28ee134ff7849bc60_images.jpg" alt="Yellow flip flops from Numero Uno" width="300">
        </td>
    </tr>
</table>

</body>
</html>
  1. Haz clic en "Guardar". en la parte superior.

Repite el proceso para todos los ejemplos que desees con diferentes variaciones y flujos de la conversación.

Ahora, pruébalo con una entrada del usuario:

450166a929645353.png

Otros tipos de respuestas:

be8908c99cd33730.png

Eso es todo. Creamos y probamos con éxito un Conversational Agent para nuestra app de venta minorista.

7. Implementación e integración

Una vez que estés satisfecho con tu agente, puedes implementarlo fácilmente en varios canales mediante las integraciones de Agent Builder. Puedes insertarlo en tu sitio web, integrarlo a plataformas de mensajería populares o incluso crear una aplicación móvil dedicada. También podemos usar la API de Agent Builder directamente en nuestras aplicaciones cliente web, como se explica en este blog.

8. Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta publicación:

  1. En la consola de Google Cloud, ve a Administrar
  2. recursos.
  3. En la lista de proyectos, elige el proyecto que deseas borrar y haz clic en Borrar.
  4. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.

9. Felicitaciones

¡Felicitaciones! Gracias a la integración de la potencia de nuestro motor de estadísticas personalizado con la interfaz intuitiva de Agent Builder, creamos un asistente de compras inteligente que ofrece experiencias personalizadas, responde preguntas con precisión y, en última instancia, impulsa la satisfacción del cliente y las ventas. Con la combinación de las capacidades de AlloyDB, Vertex AI y Vector Search, dimos un gran paso hacia adelante para hacer que las búsquedas contextuales y vectoriales sean accesibles, eficientes, verdaderamente centradas en el significado y a agentes.