إنشاء مساعد تسوّق ذكي باستخدام أداة إنشاء الوكيل من خلال AlloyDB وVertex AI Agent Builder - الجزء 2

1. نظرة عامة

في مجال البيع بالتجزئة السريع التطور اليوم، من الضروري تقديم خدمة عملاء ممتازة وتوفير تجارب تسوّق مخصّصة. سنأخذك في رحلة فنية عبر إنشاء تطبيق محادثة مستند إلى المعرفة ومصمّم للإجابة عن أسئلة العملاء وتوجيههم لاكتشاف المنتجات وتخصيص نتائج البحث. يجمع هذا الحلّ المبتكر بين قوة AlloyDB لتخزين البيانات، ومحرّك إحصاءات داخلي لفهم السياق، وGemini (نموذج لغوي كبير) للتحقّق من مدى الصلة بالموضوع، وAgent Builder من Google لتوفير مساعد حواري ذكي بسرعة.

التحدي: يتوقّع عملاء البيع بالتجزئة الحديثون الحصول على إجابات فورية واقتراحات لمنتجات تتوافق مع تفضيلاتهم الفريدة. غالبًا ما تعجز طرق البحث التقليدية عن توفير هذا المستوى من التخصيص.

الحل: يتصدّى تطبيق الدردشة المستند إلى المعرفة هذا للتحدي مباشرةً. تستفيد هذه الأداة من قاعدة معرفة غنية مستمدّة من بيانات البيع بالتجزئة لفهم نوايا العملاء والردّ بذكاء وتقديم نتائج فائقة الصلة.

ما ستنشئه

في إطار هذا الدرس التطبيقي (الجزء 2)، ستنفّذ ما يلي:

  1. إنشاء وكيل Vertex AI Agent Builder
  2. دمج أداة AlloyDB مع الوكيل

المتطلبات

  • متصفّح، مثل Chrome أو Firefox
  • مشروع Google Cloud تم تفعيل الفوترة فيه

2. الهندسة المعمارية

تدفّق البيانات: لنلقِ نظرة عن كثب على كيفية انتقال البيانات عبر نظامنا:

الاستيعاب:

يتم تحميل بيانات البيع بالتجزئة (المستودع وأوصاف المنتجات وتفاعلات العملاء) بشكل مستمر إلى AlloyDB.

محرك الإحصاءات:

سنستخدم AlloyDB كمحرّك إحصاءات لتنفيذ ما يلي:

  1. استخراج السياق: يحلّل المحرّك البيانات المخزَّنة في AlloyDB لفهم العلاقات بين المنتجات والفئات وسلوك العملاء وما إلى ذلك حسب الاقتضاء.
  2. إنشاء التضمينات: يتم إنشاء تضمينات (تمثيلات رياضية للنصوص) لكل من طلب المستخدم والمعلومات المخزّنة في AlloyDB.
  3. البحث المستند إلى المتجهات: ينفّذ محرّك البحث عملية بحث عن التشابه، ويقارن تضمين طلب البحث بتضمينات أوصاف المنتجات والمراجعات والبيانات الأخرى ذات الصلة. يحدّد هذا الإجراء 25 "جارًا أقرب" الأكثر صلةً.

التحقّق من صحة Gemini:

يتم إرسال هذه الردود المحتملة إلى Gemini لتقييمها. يحدّد Gemini ما إذا كانت هذه المعلومات ملائمة وآمنة حقًا لمشاركتها مع المستخدم.

إنشاء الردود:

يتم تنظيم الردود التي تم التحقّق من صحتها في مصفوفة JSON، ويتم تجميع المحرّك بأكمله في دالة Cloud Run غير مستنِدة إلى خادم يتم استدعاؤها من Agent Builder.

تمت تغطية الخطوات أعلاه في الجزء 1 من المختبر.

ناقشنا التفاصيل الفنية لإنشاء محرّك تحليلات مستند إلى المعرفة يوفّر خدمة "مساعد التسوّق الذكي". لنستكشف الآن كيف نستفيد من سحر "أداة إنشاء الوكلاء" لإحياء هذا المحرّك في واجهة حوارية. تأكَّد من توفّر عنوان URL لنقطة النهاية قبل البدء في الجزء 2. هذه الخطوة التالية هي ما سنتناوله في هذا الدرس التطبيقي:

التفاعل الحواري:

يعرض Agent Builder الردود على المستخدم بتنسيق لغة طبيعية، ما يسهّل إجراء حوار ذهابًا وإيابًا.

3- قبل البدء

إنشاء مشروع

  1. في Google Cloud Console، ضمن صفحة اختيار المشروع، اختَر مشروعًا على Google Cloud أو أنشِئه.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع .
  3. ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud ومحمّلة مسبقًا بأداة bq. انقر على "تفعيل 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. فعِّل واجهات برمجة التطبيقات المطلوبة. يمكنك بدلاً من استخدام أمر gcloud، البحث عن كل منتج في وحدة التحكّم أو استخدام هذا الرابط.

في حال عدم توفّر أي واجهة برمجة تطبيقات، يمكنك تفعيلها في أي وقت أثناء عملية التنفيذ.

راجِع المستندات لمعرفة أوامر gcloud وطريقة استخدامها.

ملاحظة مهمة: تأكَّد أيضًا من إكمال الجزء 1 من الدرس التطبيقي لإكمال هذا الجزء.

4. إنشاء وكيل

نقدّم لك Agent Builder

‫Agent Builder هي أداة قوية تستخدم ترميزًا منخفضًا وتتيح لنا إنشاء وكلاء محادثة بسرعة وكفاءة. فهي تبسّط عملية تصميم مسارات الحوار ودمج قواعد المعرفة والربط بواجهات برمجة التطبيقات الخارجية. في حالتنا، سنستخدم أداة Agent Builder للتواصل بسلاسة مع نقطة نهاية Cloud Function التي أنشأناها في الجزء 1، ما يتيح لمساعد التسوّق الوصول إلى قاعدة المعرفة الخاصة بمتجر البيع بالتجزئة والردّ على استفسارات العملاء بذكاء.

إنشاء الوكيل

لنبدأ بإنشاء هذا الوكيل الجديد للإجابة عن أسئلة المستخدمين حول منتجات الملابس.

  1. ابدأ بتسجيل الدخول إلى منصّة Agent Builder. إذا طُلب منك تفعيل واجهة برمجة التطبيقات، انقر على "متابعة وتفعيل واجهة برمجة التطبيقات".
  2. انقر على "إنشاء تطبيق" (CREATE APP) وقدِّم اسمًا وصفيًا للوكيل (مثل "مساعد التسوّق بالتجزئة").
  3. انقر على "نوع التطبيق" "وكيل".

462bb48664e9a14e.png

  1. . أدخِل اسمًا وصفيًا لوكيلك، مثل "مساعد التسوّق بالتجزئة"، واضبط المنطقة على us-central1

10eceef44b1600d1.png

  1. أدخِل تفاصيل موظّف الدعم:
  2. غيِّر اسم الوكيل إلى "وكيل التسوّق بالتجزئة".
  3. أضِف "الهدف" التالي:
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.

إدخال المخطط — OpenAPI بتنسيق YAML:

هذا هو الجزء الذي نستخدم فيه نقطة نهاية الواجهة الخلفية لتشغيل الوكيل. انسخ مواصفات 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. في هذه المرحلة، عليك الرجوع إلى "الوكيل" لأنّنا نريد إضافة إعدادات "الأداة" إلى "تعليمات" الوكيل. أضِف ما يلي إلى عنصر نائب التعليمات (تذكَّر أنّ المسافات البادئة مهمة في تحديد التسلسل):
- 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.

تأكَّد من اختيار الأداة "أداة التسوّق بالتجزئة" في قسم "الأدوات المتاحة"، ثم احفظ الوكيل مرة أخرى.

5- اختبار الوكيل

في اللوحة اليمنى، من المفترض أن يظهر قسم "معاينة الوكيل" الذي يتيح لك اختبار الوكيل.

كما هو موضّح في لقطة الشاشة أدناه، رحّبتُ بالمستخدم وبدأتُ محادثتي بطلب قميص أبيض بنقوش زرقاء:

63ac3ef6d1f0f614.png

في ما يلي استجابة JSON:

acf3cb0e2be2ed91.png

هذه هي نتيجة JSON الأولية من Cloud Function التي تعالج AlloyDB Similarity Search. هذا كل شيء! لقد انتهينا من التحدث مع موظف الدعم.

6. نموذج مسار المحادثة

في هذه المرحلة، يمكنك اختبار مسار وكيل الحوار (المحادثة) وتكراره:

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. اكتب ما يلي في قسم "إدخال بيانات المستخدم":

dc8c010c36400e64.png

سيظهر لك ردّ على النحو التالي:

e31d9f53bf5564c8.png

سيظهر لك أيضًا JSON Array الذي تعرضه نقطة نهاية واجهة برمجة التطبيقات.

  1. انقر الآن على "اسم الوكيل" (كما هو موضّح في الصورة أدناه مع علامة اختيار حمراء) من هامش قسم المعاينة، وسيتم تمييز جميع علامات التبويب في قسم معاينة المحادثة. انقر الآن على "حفظ المثال" (Save Example) في أعلى يسار الصفحة في قسم المعاينة. ستظهر

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

انتهيت! لقد أنشأنا واختبرنا بنجاح وكيلًا حواريًا لتطبيق البيع بالتجزئة.

7. التفعيل والدمج

بعد أن تصبح راضيًا عن تصميم وكيلك، يمكنك نشره بسهولة على قنوات مختلفة باستخدام عمليات الدمج في "أداة إنشاء الوكلاء". يمكنك تضمينها في موقعك الإلكتروني أو دمجها مع منصات المراسلة الشائعة أو حتى إنشاء تطبيق مخصّص للأجهزة الجوّالة. يمكننا أيضًا استخدام Agent Builder API مباشرةً في تطبيقات عميل الويب، كما أوضحنا في هذه المدونة.

8. تَنظيم

لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذه المشاركة، اتّبِع الخطوات التالية:

  1. في Google Cloud Console، انتقِل إلى إدارة
  2. صفحة المراجع
  3. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف.
  4. في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.

9- تهانينا

تهانينا! من خلال دمج قوة محرك الإحصاءات المخصّص مع واجهة Agent Builder السهلة الاستخدام، أنشأنا مساعدًا ذكيًا للتسوّق بالتجزئة يقدّم تجارب مخصّصة ويجيب عن الأسئلة بدقة ويساهم في تحقيق رضا العملاء وزيادة المبيعات. من خلال الجمع بين إمكانات AlloyDB وVertex AI وVector Search، حقّقنا تقدّمًا كبيرًا في إتاحة عمليات البحث السياقي والمتّجهي، وجعلها فعّالة ومستندة إلى المعنى بشكل حقيقي ويستند إلى الذكاء الاصطناعي الوكيل.