استكشاف اقتراحات مراجعات المنتجات باستخدام الذكاء الاصطناعي من جهة العميل

Maud Nalpas
Maud Nalpas

تاريخ النشر: 21 تشرين الأول (أكتوبر) 2024

يمكن للمتاجر على الإنترنت الاطّلاع على زيادة بنسبة 270% في الإحالات الناجحة من خلال عرض مراجعات المنتجات. والمراجعات السلبية مهمة أيضًا، لأنّها تساهم في بناء الثقة. 82% من المتسوّقين على الإنترنت يبحثون عنها قبل شرائها

قد يكون من الصعب تشجيع العملاء على كتابة مراجعات مفيدة عن المنتجات، خاصةً إذا كانت مراجعاتهم سلبية. سنستكشف هنا كيفية استخدام الذكاء الاصطناعي التوليدي لمساعدة المستخدمين في كتابة مراجعات غنية بالمعلومات تساعد الآخرين في اتخاذ قرارات الشراء.

العرض التوضيحي والرمز البرمجي

ندعوك إلى تجربة عرض توضيحي لمراجعة المنتج ونتحقق من على GitHub.

كيف أنشأنا ذلك

الذكاء الاصطناعي من جهة العميل

في هذا العرض التوضيحي، نفّذنا الميزة من جهة العميل للأسباب التالية:

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

الذكاء الاصطناعي التوليدي من MediaPipe

لقد اخترنا استخدام نموذج Gemma 2B من خلال MediaPipe LLM Inference API (حزمة MediaPipe GenAI)، للأسباب التالية:

  • دقة النموذج: توفِّر Gemma 2B توازنًا كبيرًا من حيث الحجم والدقة. عند توجيهه بالشكل الصحيح، قدّم نتائج جيدة لهذا العرض الترويجي.
  • التوافق مع جميع المتصفّحات: تتوفّر حزمة MediaPipe في جميع المتصفّحات المتوافقة مع WebGPU.

تجربة المستخدم

تطبيق أفضل الممارسات المتعلّقة بالأداء

على الرغم من أنّ Gemma 2B هي نموذج لغوي صغير، إلا أنّ حجمها كبير عند تنزيلها. تطبيق أفضل الممارسات المتعلّقة بالأداء، والتي تشمل استخدام Web Worker

جعل الميزة اختيارية

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

الشكل 1. لا يزال بإمكان المستخدمين نشر مراجعاتهم، حتى عندما يتم استخدام الذكاء الاصطناعي غير جاهزة بعد

حالات واجهة المستخدم والصور المتحركة

تستغرق عملية الاستنتاج عادةً وقتًا أطول مما قد يبدو فوريًا، لذلك نشير إلى المستخدم بأنّ النموذج يُجري عملية الاستنتاج أو "التفكير". نستخدم الرسوم المتحركة لتخفيف الانتظار، مع طمأنة المستخدم أن التطبيق يعمل على النحو المنشود. تعرَّف على حالات واجهة المستخدم المختلفة التي نفّذناها في العرض التوضيحي، كما صمّمها آدم أرجيل.

الشكل 2. توضح الرسوم المتحركة أن النموذج قيد التحميل، ثم "التفكير"، وأخيرًا

اعتبارات أخرى

في بيئة الإنتاج، قد تحتاج إلى:

  • توفير آلية لتلقّي الملاحظات ماذا لو كانت الاقتراحات متواضعة أو غير منطقية؟ تنفيذ آلية تقديم الملاحظات السريعة (مثل إبداء الإعجاب والإبهام لأسفل) والاعتماد على الاستدلالات لتحديد ما يجده المستخدمون مفيدة. على سبيل المثال، يمكنك تقييم عدد المستخدمين الذين يتفاعلون مع الميزة، وما إذا كانت قيد الإيقاف.
  • السماح بإيقاف الميزة ماذا لو فضل المستخدم استخدام كلماته الخاصة دون الذكاء الاصطناعي يساعد أو يجد الميزة مزعجة؟ السماح للمستخدم بإيقاف ثم العودة كما هو مطلوب.
  • اشرح سبب وجود هذه الميزة. قد يشجعك الشرح الموجز على على المستخدمين استخدام أداة الملاحظات. على سبيل المثال، "تساعد الملاحظات المحسّنة مستخدمي التسوّق الآخرين في اختيار المنتجات التي سيشترونها، وتساعدنا في إنشاء المنتجات التي تريدونها". إِنْتَ شرحًا مطوّلاً حول آلية عمل الميزة والسبب الذي دفعك إلى المقدمة، ربما كمعرفة المزيد عن طريق الارتباط.
  • الإفصاح عن استخدام الذكاء الاصطناعي عند الاقتضاء: باستخدام الذكاء الاصطناعي من جهة العميل، لا يتم إرسال محتوى المستخدم إلى خادم لمعالجته، وبالتالي يمكن الحفاظ على خصوصيته. ومع ذلك، إذا إنشاء نسخة احتياطية من جهة الخادم أو جمع المعلومات باستخدام الذكاء الاصطناعي ننصحك بإضافتها إلى سياسة الخصوصية أو بنود الخدمة أو أماكن أخرى

التنفيذ

يمكن أن ينجح استخدام أداة اقتراح مراجعات المنتجات مع مجموعة كبيرة من حالات الاستخدام. يمكنك الاطّلاع على المعلومات التالية كقاعدة لميزات الذكاء الاصطناعي القادمة على العميل.

MediaPipe في عامل على الويب

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

ومع ذلك، فإن نموذج التعليمات البرمجية لدينا أكثر شمولاً. ويرجع ذلك إلى أنّه يتم تنفيذه في web worker، لذا يُرسِل الرسائل مع النص البرمجي الرئيسي من خلال رموز الرسائل المخصّصة. مزيد من المعلومات حول هذا النمط.

// Trigger model preparation *before* the first message arrives
self.postMessage({ code: MESSAGE_CODE.PREPARING_MODEL, payload: null });
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, payload: null });
} catch (error) {
  self.postMessage({ code: MESSAGE_CODE.MODEL_ERROR, payload: null });
}

// Trigger inference upon receiving a message from the main script
self.onmessage = function (message) {
  if (!llmInference) {
    // Just in case. This condition shouldn't normally be hit because
    // the inference UI button is disabled until the model is ready
    throw new Error("Can't run inference, the model is not ready yet");
  }
  (async function () {
    // Run inference = Generate an LLM response
    try {
    const 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, payload: null });
    }
    // 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',
};

الإدخال والإخراج

الشكل 3. مخطّط بياني يوضّح معالجة الطلب من خلال الاستنتاج إلى ناتج أولي من "النموذج اللغوي الكبير" (LLM) الذي يتم تحليله بعد ذلك للوصول إلى اقتراح للقراءة على الشاشة

الطلب الكامل تم إنشاؤه باستخدام مطالبات بلقطات قليلة ويشمل ذلك إدخالات المستخدم، أو بعبارة أخرى مسودة المراجعة التي كتبها المستخدم.

لإنشاء الطلب استنادًا إلى البيانات التي أدخلها المستخدم، نستدعي الأداة في وقت التشغيل الدالة generatePrompt.

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

من الناحية العملية، لاحظنا أنّ Gemma 2B تؤدي عملًا أفضل في تقديم ناتج منظَّم كنص مقارنةً بـ JSON أو JavaScript. لذلك بالنسبة لهذا العرض التوضيحي، اخترنا تنسيق الإخراج المستند إلى النص. يُنشئ النموذج نصًا، يمكننا بعد ذلك تحليل المخرجات إلى كائن JavaScript لمزيد من المعالجة في الويب التطبيق.

تحسين طلب البحث

طلبي وردّه في واجهة Gemini Chat
الشكل 4. طلبنا من Gemini Chat تحسين الطلب، وقد أجاب عن هذا الطلب. مع شرح للتحسينات التي تم إجراؤها وتنبيه حول الفعالية.

لقد استعنا بنموذج لغوي كبير (LLM) لإعادة معالجة الطلب.

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

استخدام السياق لزيادة الجودة

وقد ساعد تضمين نوع المنتج في الطلب النموذج على تقديم اقتراحات أكثر صلةً بموضوع البحث وعالية الجودة. في هذا العرض التوضيحي، يكون نوع المنتج ثابتًا. في تطبيق حقيقي، يمكنك تضمين المنتج ديناميكيًا في الطلب، استنادًا إلى الصفحة التي يزورها المستخدم.

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."

أحد الأمثلة في قسم "عدد قليل من اللقطات" من طلبنا: نوع المنتج ("جوارب") مُدرَج في الإصلاح المقترَح وفي مثال المراجعة.

الأخطاء والإصلاحات في "النموذج اللغوي الكبير" (LLM)

تتطلب عادةً Gemma 2B هندسة مطلوبة أكثر من قوي وأكبر حجمًا من جانب الخادم.

واجهتنا بعض التحديات مع Gemma 2B. إليك كيف قمنا بتحسين النتائج:

  • رائع جدًا. واجهت Gemma 2B صعوبة في وضع علامة على المراجعات بأنّها "غير مفيدة" على ما يبدو ترد في الحكم. حاولنا جعل لغة التصنيف أكثر حيادية ("محدد" و"غير محدد" بدلاً من "مفيد" و"غير مفيد") وأضفنا مثالاً ، ولكنّ ذلك لم يؤدّ إلى تحسين النتائج. ما الذي أدى إلى تحسين النتائج هو الإصرار والتكرار في المطالبة. سلسلة تفكير من المحتمل أن يؤدي إلى تحسينات أيضًا.
  • التعليمات غير واضحة. في بعض الأحيان، قدّم النموذج تفسيرًا مفرطًا للطلب. بدلاً من تقييم المراجعة، واصل عرض قائمة الأمثلة. لحلّ هذه المشكلة، قمنا بتضمين انتقال واضح في المطالبة:

    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>
    

    تساعد صياغة الطلب بوضوح النموذج في التفريق بين قائمة الأمثلة (بضع لقطات) والمدخلات الفعلية.

  • الاستهداف غير صحيح: في بعض الأحيان، اقترح النموذج تغييرات على المنتج بدلاً من نص المراجعة. على سبيل المثال، بالنسبة إلى مراجعة تفيد بأنّ "أكره هذه الكتب جوارب"، فقد يقترح النموذج "يمكنك استبدال الجوارب العلامة التجارية أو النمط"، ليس هو التأثير المطلوب. ساعد تقسيم الطلب على لتوضيح المهمة وتحسين تركيز النموذج على المراجعة.