ساخت دستیار خرید هوشمند با AlloyDB و Vertex AI Agent Builder - قسمت 2

۱. مرور کلی

در چشم‌انداز پرشتاب خرده‌فروشی امروزی، ارائه خدمات استثنایی به مشتریان و در عین حال فراهم کردن تجربیات خرید شخصی‌سازی‌شده از اهمیت بالایی برخوردار است. ما شما را در یک سفر فنی به سوی ایجاد یک اپلیکیشن چت دانش‌محور که برای پاسخ به سوالات مشتری، هدایت کشف محصول و سفارشی‌سازی نتایج جستجو طراحی شده است، همراهی خواهیم کرد. این راهکار نوآورانه، قدرت AlloyDB را برای ذخیره‌سازی داده‌ها، یک موتور تحلیلی داخلی برای درک زمینه‌ای، Gemini (مدل زبان بزرگ) برای اعتبارسنجی مرتبط بودن و Agent Builder گوگل را برای راه‌اندازی سریع یک دستیار مکالمه هوشمند ترکیب می‌کند.

چالش: مشتریان خرده‌فروشی مدرن انتظار پاسخ‌های فوری و توصیه‌های محصولی را دارند که با ترجیحات منحصر به فرد آنها همسو باشد. روش‌های جستجوی سنتی اغلب در ارائه این سطح از شخصی‌سازی با شکست مواجه می‌شوند.

راه حل: اپلیکیشن چت دانش‌محور ما مستقیماً با این چالش مقابله می‌کند. این اپلیکیشن از یک پایگاه دانش غنی برگرفته از داده‌های خرده‌فروشی شما برای درک قصد مشتری، پاسخگویی هوشمندانه و ارائه نتایج بسیار مرتبط استفاده می‌کند.

آنچه خواهید ساخت

به عنوان بخشی از این آزمایشگاه (بخش 2)، شما:

  1. یک عامل سازنده Vertex AI بسازید
  2. ادغام ابزار AlloyDB با عامل

الزامات

  • یک مرورگر، مانند کروم یا فایرفاکس
  • یک پروژه گوگل کلود با قابلیت پرداخت.

۲. معماری

جریان داده‌ها: بیایید نگاهی دقیق‌تر به نحوه‌ی حرکت داده‌ها در سیستم خود بیندازیم:

بلعیدن :

داده‌های خرده‌فروشی (موجودی، توضیحات محصول، تعاملات مشتری) به‌طور مداوم در AlloyDB بارگذاری می‌شوند.

موتور تجزیه و تحلیل:

ما از AlloyDB به عنوان موتور تحلیلی برای انجام موارد زیر استفاده خواهیم کرد:

  1. استخراج محتوا: موتور، داده‌های ذخیره شده در AlloyDB را تجزیه و تحلیل می‌کند تا روابط بین محصولات، دسته‌ها، رفتار مشتری و غیره را در صورت لزوم درک کند.
  2. ایجاد جاسازی: جاسازی‌ها (نمایش‌های ریاضی متن) هم برای پرس‌وجوی کاربر و هم برای اطلاعات ذخیره شده در AlloyDB ایجاد می‌شوند.
  3. جستجوی برداری: موتور جستجویی بر اساس شباهت انجام می‌دهد و جاسازی پرس‌وجو را با جاسازی‌های توضیحات محصول، نقدها و سایر داده‌های مرتبط مقایسه می‌کند. این کار ۲۵ مورد از مرتبط‌ترین «همسایه‌های نزدیک» را شناسایی می‌کند.

اعتبارسنجی جمینی:

این پاسخ‌های بالقوه برای ارزیابی به Gemini ارسال می‌شوند. Gemini تعیین می‌کند که آیا آنها واقعاً مرتبط و برای اشتراک‌گذاری با کاربر ایمن هستند یا خیر.

تولید پاسخ:

پاسخ‌های اعتبارسنجی‌شده در یک آرایه JSON ساختاردهی می‌شوند و کل موتور در یک تابع Cloud Run بدون سرور بسته‌بندی می‌شود که از Agent Builder فراخوانی می‌شود.

مراحل فوق قبلاً در بخش ۱ آزمایشگاه پوشش داده شده‌اند.

ما در مورد جزئیات فنی ایجاد یک موتور تحلیلی مبتنی بر دانش که دستیار خرید هوشمند ما را تقویت می‌کند، بحث کردیم. حال، بیایید بررسی کنیم که چگونه از جادوی Agent Builder برای زنده کردن این موتور در یک رابط کاربری محاوره‌ای استفاده می‌کنیم. قبل از شروع بخش ۲، مطمئن شوید که URL نقطه پایانی را آماده دارید. مرحله بعدی چیزی است که در این آزمایشگاه پوشش می‌دهیم:

تعامل مکالمه‌ای:

ایجنت بیلدر پاسخ‌ها را در قالب زبان طبیعی به کاربر ارائه می‌دهد و گفتگوی دوطرفه را تسهیل می‌کند.

۳. قبل از شروع

ایجاد یک پروژه

  1. در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید.
  2. مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
  3. شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا می‌شود و bq از قبل روی آن بارگذاری شده است، استفاده خواهید کرد. روی Activate Cloud Shell در بالای کنسول Google Cloud کلیک کنید.

تصویر دکمه فعال کردن Cloud Shell

  1. پس از اتصال به Cloud Shell، با استفاده از دستور زیر بررسی می‌کنید که آیا از قبل احراز هویت شده‌اید و پروژه روی شناسه پروژه شما تنظیم شده است یا خیر:
gcloud auth list
  1. دستور زیر را در Cloud Shell اجرا کنید تا تأیید شود که دستور gcloud از پروژه شما اطلاع دارد.
gcloud config list project
  1. اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
  1. APIهای مورد نیاز را فعال کنید. جایگزین دستور gcloud از طریق کنسول با جستجوی هر محصول یا استفاده از این لینک است.

اگر هر API از قلم افتاده باشد، می‌توانید همیشه آن را در طول پیاده‌سازی فعال کنید.

برای دستورات و نحوه‌ی استفاده از gcloud به مستندات مراجعه کنید.

نکته مهم: همچنین، برای تکمیل این بخش، مطمئن شوید که بخش ۱ آزمایشگاه را تکمیل کرده‌اید.

۴. ایجاد عامل

معرفی سازنده عامل

Agent Builder ابزاری قدرتمند و کم‌کد است که به ما امکان می‌دهد تا عامل‌های محاوره‌ای را به سرعت و به طور کارآمد ایجاد کنیم. این ابزار فرآیند طراحی جریان‌های محاوره‌ای، ادغام پایگاه‌های دانش و اتصال به APIهای خارجی را ساده می‌کند. در مورد ما، از Agent Builder برای اتصال یکپارچه با نقطه پایانی Cloud Function که در بخش 1 ساختیم استفاده خواهیم کرد و دستیار خرید ما را قادر می‌سازد تا به پایگاه دانش خرده‌فروشی ما دسترسی پیدا کند و به طور هوشمندانه به سوالات مشتری پاسخ دهد.

ساخت عامل

بیایید با ایجاد این عامل جدید برای پاسخ به سوالات کاربران در مورد محصولات پوشاک شروع کنیم.

  1. با ورود به پلتفرم Agent Builder شروع کنید. اگر از شما خواسته شد API را فعال کنید، ادامه دهید و روی «ادامه و فعال کردن API» کلیک کنید.
  2. روی «ایجاد برنامه» کلیک کنید و یک نام توصیفی به نماینده خود بدهید (مثلاً «دستیار خرید خرده‌فروشی»).
  3. روی نوع برنامه "عامل" کلیک کنید.

462bb48664e9a14e.png

  1. به نماینده خود یک نام توصیفی مانند "دستیار خرید خرده فروشی" بدهید و منطقه را به عنوان us-central1 تنظیم کنید.

10eceef44b1600d1.png

  1. مشخصات نماینده را وارد کنید:
  2. نام نماینده را به «نماینده خرید خرده فروشی» تغییر دهید.
  3. عبارت "Goal" زیر را اضافه کنید:
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. در این مرحله آن را ذخیره کنید و فعلاً دستورالعمل‌ها را خالی بگذارید.
  2. سپس از منوی ناوبری روی ابزارها کلیک کرده و روی ایجاد کلیک کنید.

2ffae953bbad38e5.png

نام ابزار را وارد کنید: ابزار خرید خرده فروشی

توضیحات ابزار را وارد کنید:

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.

Schema — OpenAPI را با فرمت YAML وارد کنید:

این بخشی است که ما از نقطه پایانی backend برای قدرت بخشیدن به عامل استفاده می‌کنیم. مشخصات OpenAPI زیر را کپی کنید و محل نگهدارنده URL (که در داخل براکت‌های زاویه‌دار قرار دارد) را با نقطه پایانی 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.

سایر تنظیمات را به مقادیر پیش‌فرض خود رها کنید و روی «ذخیره» کلیک کنید.

  1. در این مرحله به Agent برگردید زیرا می‌خواهیم پیکربندی "Tool" را به "Instructions" مربوط به Agent اضافه کنیم. کد زیر را به محل قرارگیری instructions اضافه کنید (به یاد داشته باشید، تورفتگی‌ها در تعریف جریان مهم هستند):
- 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.

مطمئن شوید که ابزار «ابزار خرید خرده‌فروشی» در بخش «ابزارهای موجود» انتخاب شده است و سپس دوباره نماینده را ذخیره کنید.

۵. عامل را آزمایش کنید

در پنل سمت راست، باید بخش پیش‌نمایش عامل (Preview Agent) را ببینید که به شما امکان می‌دهد عامل خود را آزمایش کنید.

همانطور که در تصویر زیر مشاهده می‌کنید، من به عنوان یک کاربر خوشامدگویی کرده‌ام و چت خود را با درخواست پیراهن سفید با طرح‌های آبی شروع کرده‌ام:

63ac3ef6d1f0f614.png

این پاسخ JSON است:

acf3cb0e2be2ed91.png

این نتیجه خام JSON از تابع Cloud است که جستجوی شباهت AlloyDB را پردازش می‌کند. همین! اکنون همه چیز با عامل آماده است.

۶. نمونه جریان مکالمه

در این مرحله، می‌توانید جریان عامل گفتگو (گفتگو) خود را آزمایش و تکرار کنید:

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!

چند دستور شلیک

حالا فرض کنید می‌خواهید نتیجه را در عامل مکالمه در قالب گرافیکی خاصی شامل تصاویر و لینک‌ها ببینید. ما این کار را با استفاده از مثال‌هایی از مکالمات که با عنوان Few Shot Prompting نیز شناخته می‌شوند، انجام خواهیم داد.

این یعنی ما می‌خواهیم چند مثال به سازنده‌ی عامل اضافه کنیم تا قالب نتیجه‌ی ثابتی داشته باشیم.

در یکی از اسکرین‌شات‌های قبلی‌مان در بخش « آزمایش نماینده »، پاسخ نماینده را به صورت «متوجه شدم. شما به دنبال یک پیراهن سفید با طرح‌های آبی هستید...» می‌بینیم. به آن پاسخ بروید یا از پنل سمت راست نماینده، یک مکالمه آزمایشی جدید ایجاد کنید:

  1. عبارت زیر را در قسمت «ورودی کاربر» تایپ کنید:

d8c010c36400e64.png

پاسخی مانند این خواهید دید:

e31d9f53bf5564c8.png

و همچنین آرایه JSON برگردانده شده توسط نقطه پایانی API را مشاهده خواهید کرد.

  1. حالا از حاشیه بخش پیش‌نمایش، روی نام نماینده (همانطور که در تصویر زیر با علامت تیک قرمز مشخص شده است) کلیک کنید تا تمام تب‌های شما در بخش پیش‌نمایش چت، هایلایت شوند. حالا روی «ذخیره مثال» در گوشه بالا سمت راست در بخش پیش‌نمایش کلیک کنید. چیزی شبیه به این خواهد بود:

1e0a9f6815f63bf9.png

  1. مکالمه را با نام نمایشی «پاسخ با تصاویر» یا چیزی مشابه ذخیره کنید و روی «ایجاد» کلیک کنید.
  2. حالا به تب پاسخ که در تصویر بالا با علامت تیک مشکی مشخص شده است بروید و متن «متوجه شدم. شما دنبال صندل‌های زرد هستید. درست است؟» را با متن زیر جایگزین کنید:
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. روی «ذخیره» در بالا کلیک کنید.

این فرآیند را برای هر تعداد مثالی که می‌خواهید با تغییرات و جریان‌های مختلف مکالمه تکرار کنید.

حالا ادامه دهید و آن را با ورودی کاربر امتحان کنید:

450166a929645353.png

برخی از انواع دیگر پاسخ‌ها:

be8908c99cd33730.png

همین. ما با موفقیت یک عامل مکالمه‌ای برای اپلیکیشن خرده‌فروشی خود ایجاد و آزمایش کردیم.

۷. استقرار و یکپارچه‌سازی

وقتی از عامل خود راضی شدید، می‌توانید به راحتی آن را با استفاده از ادغام‌های Agent Builder در کانال‌های مختلف مستقر کنید. می‌توانید آن را در وب‌سایت خود جاسازی کنید، با پلتفرم‌های پیام‌رسان محبوب ادغام کنید یا حتی یک برنامه تلفن همراه اختصاصی ایجاد کنید. ما همچنین می‌توانیم از API عامل سازنده مستقیماً در برنامه‌های کلاینت وب خود استفاده کنیم، که در این وبلاگ به آن پرداخته‌ایم.

۸. تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید:

  1. در کنسول گوگل کلود، به بخش مدیریت بروید
  2. صفحه منابع .
  3. در لیست پروژه‌ها، پروژه‌ای را که می‌خواهید حذف کنید انتخاب کنید و سپس روی «حذف» کلیک کنید.
  4. در کادر محاوره‌ای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن کلیک کنید.

۹. تبریک

تبریک! با ادغام قدرت موتور تحلیلی سفارشی خود با رابط کاربری بصری Agent Builder، ما یک دستیار خرید هوشمند خرده‌فروشی ایجاد کرده‌ایم که تجربیات شخصی‌سازی‌شده ارائه می‌دهد، به سؤالات به طور دقیق پاسخ می‌دهد و در نهایت رضایت مشتری و فروش را افزایش می‌دهد. با ترکیب قابلیت‌های AlloyDB ، Vertex AI و Vector Search ، ما جهش بزرگی در قابل دسترس، کارآمد، واقعاً معنادار و عامل‌محور کردن جستجوهای متنی و برداری برداشته‌ایم!