تاريخ النشر: 21 تشرين الأول (أكتوبر) 2024
يمكن أن تحقّق المتاجر على الإنترنت زيادة بنسبة% 270 في الإحالات الناجحة من خلال عرض مراجعات المنتجات. والمراجعات السلبية مهمة أيضًا، لأنّها تساهم في بناء الثقة. ويبحث عنها %82 من المتسوّقين على الإنترنت قبل الشراء.
قد يكون من الصعب تشجيع العملاء على كتابة مراجعات مفيدة عن المنتجات، خاصةً إذا كانت مراجعاتهم سلبية. سنستكشف هنا كيفية استخدام الذكاء الاصطناعي التوليدي لمساعدة المستخدمين في كتابة مراجعات غنية بالمعلومات تساعد الآخرين في اتخاذ قرارات الشراء.
العرض التجريبي والرمز
يمكنك الاطّلاع على العرض الترويجي لمراجعة المنتجات وفحص الرمز على GitHub.
كيفية إنشاء هذه الميزة
الذكاء الاصطناعي من جهة العميل
في هذا العرض التوضيحي، نفّذنا الميزة من جهة العميل للأسباب التالية:
- وقت الاستجابة: نريد تقديم اقتراحات بسرعة، فور توقُّف المستخدم عن الكتابة. ويمكننا تقديم ذلك من خلال تجنُّب عمليات التنقّل المتكرّرة بين الخادم والتطبيق.
- التكلفة: على الرغم من أنّ هذا الإصدار تجريبي، إذا كنت تفكر في إطلاق ميزة مشابهة في قناة الإصدار العلني، من الجيد إجراء التجربة بدون أي تكلفة من جهة الخادم إلى أن تتمكّن من التحقّق مما إذا كانت الميزة مناسبة للمستخدمين.
الذكاء الاصطناعي التوليدي في MediaPipe
لقد اخترنا استخدام نموذج Gemma 2B من خلال MediaPipe LLM Inference API (حزمة MediaPipe GenAI)، للأسباب التالية:
- دقة النموذج: توفّر Gemma 2B توازنًا رائعًا بين الحجم والدقة. عند توجيهه بالشكل الصحيح، قدّم نتائج جيدة لهذا العرض الترويجي.
- التوافق مع جميع المتصفّحات: تتوفّر حزمة MediaPipe في جميع المتصفّحات المتوافقة مع WebGPU.
تجربة المستخدم
تطبيق أفضل الممارسات المتعلّقة بالأداء
على الرغم من أنّ Gemma 2B هي نموذج لغوي صغير، إلا أنّ حجمها كبير عند تنزيلها. تطبيق أفضل الممارسات المتعلّقة بالأداء، والتي تشمل استخدام Web Worker
جعل الميزة اختيارية
نريد أن تساهم اقتراحات المراجعات المستندة إلى الذكاء الاصطناعي في تحسين سير عمل المستخدم لنشر مراجعة بشأن أحد المنتجات. في عملية التنفيذ التي ننفذها، يمكن للمستخدم نشر مراجعة حتى إذا لم يتم تحميل النموذج، وبالتالي لا يتم تقديم نصائح لتحسين المحتوى.
حالات واجهة المستخدم والصور المتحرّكة
تستغرق عملية الاستنتاج عادةً وقتًا أطول مما قد يبدو فوريًا، لذلك نشير إلى المستخدم بأنّ النموذج يُجري عملية الاستنتاج أو "التفكير". نستخدم الرسوم المتحركة لتسهيل الانتظار، مع التأكيد على المستخدم بأنّ التطبيق يعمل على النحو المطلوب. تعرَّف على حالات واجهة المستخدم المختلفة التي نفّذناها في العرض الترويجي، والتي صمّمها آدم أرجيل.
اعتبارات أخرى
في بيئة الإنتاج، قد تحتاج إلى إجراء ما يلي:
- توفير آلية لتلقّي الملاحظات ماذا لو كانت الاقتراحات متواضعة أو غير منطقية؟ يمكنك استخدام آلية سريعة لتلقّي الملاحظات (مثل إبداء الإعجاب والإبداء برأي سلبي) والاعتماد على الإشارات الاستدلالية لتحديد الميزات التي يجد المستخدمون أنّها مفيدة. على سبيل المثال، يمكنك تقييم عدد المستخدمين الذين يتفاعلون مع الميزة، وما إذا كانوا يوقفونها.
- السماح بإيقاف الميزة ماذا لو كان المستخدم يفضّل استخدام كلماته الخاصة بدون مساعدة الذكاء الاصطناعي، أو كان يجد الميزة مزعجة؟ اسمح للمستخدم بإيقاف الميزة و إعادة تفعيلها متى شاء.
- وضِّح سبب توفّر هذه الميزة. قد يشجّع الشرح القصير المستخدمين على استخدام أداة الملاحظات والآراء. على سبيل المثال، "تساعد الملاحظات المحسّنة مستخدمي التسوّق الآخرين في اختيار المنتجات التي سيشترونها، وتساعدنا في إنشاء المنتجات التي تريدونها". يمكنك إضافة شرح مفصّل حول آلية عمل الميزة وسبب استخدامك لها، ويمكنك مثلاً تضمين رابط يؤدي إلى صفحة تتضمّن مزيدًا من المعلومات.
- الإفصاح عن استخدام الذكاء الاصطناعي عند الاقتضاء: باستخدام الذكاء الاصطناعي من جهة العميل، لا يتم إرسال محتوى المستخدم إلى خادم لمعالجته، وبالتالي يمكن الحفاظ على خصوصيته. ومع ذلك، إذا كنت بصدد إنشاء بديل من جهة الخادم أو جمع المعلومات باستخدام الذكاء الاصطناعي، ننصحك بإضافته إلى سياسة الخصوصية أو بنود الخدمة أو أماكن أخرى.
التنفيذ
يمكن أن يكون تطبيقنا لاقتراح مراجعات المنتجات مفيدًا لمجموعة كبيرة من حالات الاستخدام. يمكنك الاطّلاع على المعلومات التالية كقاعدة لميزات الذكاء الاصطناعي القادمة على العميل.
MediaPipe في Web Worker
باستخدام استنتاج النموذج اللغوي الكبير في MediaPipe، يتكوّن رمز الذكاء الاصطناعي من بضعة أسطر فقط: إنشاء أداة حلّ ملف وكائن استنتاج نموذج لغوي كبير من خلال تمريره بعنوان URL للنموذج، واستخدام مثيل استنتاج النموذج اللغوي الكبير لاحقًا لإنشاء استجابة.
ومع ذلك، فإنّ نموذج الرمز البرمجي لدينا أكثر شمولاً. ويرجع ذلك إلى أنّه يتم تنفيذه في Web Worker، لذا يُرسِل الرسائل مع النص البرمجي الرئيسي من خلال кодات الرسائل المخصّصة. مزيد من المعلومات حول هذا النمط
// 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',
};
الإدخال والإخراج
تم إنشاء الطلب الكامل باستخدام الطلب بأمثلة قليلة. ويشمل ذلك إدخالات المستخدم، أو بعبارة أخرى مسودة المراجعة التي كتبها المستخدم.
لإنشاء الطلب استنادًا إلى إدخال المستخدم، نُطلِق أثناء التشغيل دالّة المساعدة
generatePrompt
.
عادةً ما تكون نماذج الذكاء الاصطناعي ومكتباته من جهة العميل مزوّدة بأدوات أقل من تلك المزوّدة بها نماذج الذكاء الاصطناعي من جهة الخادم. على سبيل المثال، وضع JSON لا يكون متاحًا في أغلب الأحيان. وهذا يعني أنّنا نحتاج إلى تقديم بنية الإخراج المطلوبة داخل الطلب. وهذا الإجراء أقل دقة وقابلية للصيانة وموثوقية من تقديم مخطّط من خلال إعداد النموذج. بالإضافة إلى ذلك، تميل نماذج جهة العميل إلى أن تكون أصغر حجمًا، ما يعني أنّها أكثر عرضة للأخطاء الهيكلية في النتائج التي تقدّمها.
من الناحية العملية، لاحظنا أنّ Gemma 2B تؤدي عملًا أفضل في تقديم ناتج منظَّم كنص مقارنةً بتنسيق JSON أو JavaScript. لذلك، اختَرنا في هذا العرض التوضيحي تنسيق إخراج مستند إلى نص. ينشئ النموذج نصًا، ثم تتم تحليل الإخراج إلى عنصر JavaScript لإجراء المزيد من المعالجة داخل تطبيق الويب.
تحسين طلب البحث
لقد استخدمنا نموذج تعلُّم لغوي كبيرًا (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."
أحد الأمثلة في قسم "عدد قليل من اللقطات" من طلبنا: نوع المنتج ("جوارب") مُدرَج في الحل المقترَح وفي مثال المراجعة.
الأخطاء في النماذج اللغوية الكبيرة وكيفية إصلاحها
عادةً ما تتطلّب Gemma 2B هندسة أكثر سرعة من نموذج أقوى وأكبر من جهة الخادم.
واجهنا بعض التحديات في Gemma 2B. في ما يلي كيفية تحسين النتائج:
- رائع جدًا. واجهت "جيما 2" صعوبة في وضع علامة "غير مفيدة" على المراجعات، ويبدو أنّها كانت تردد في إصدار الأحكام. حاولنا جعل لغة التصنيف أكثر حيادية ("محدد" و"غير محدد" بدلاً من "مفيد" و"غير مفيد") وأضفنا مثالاً ، ولكنّ ذلك لم يؤدّ إلى تحسين النتائج. ما أدى إلى تحسين النتائج هو الإصرار على الطلب وتكرار طلبه. من المرجّح أن يؤدي أسلوب سلسلة الأفكار إلى تحقيق تحسينات أيضًا.
التعليمات غير واضحة أحيانًا يفسّر النموذج الطلب بشكل مفرط. بدلاً من تقييم المراجعة، واصل عرض قائمة الأمثلة. لحلّ هذه المشكلة، أدرجنا انتقالًا واضحًا في الطلب:
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>
تساعد صياغة الطلب بوضوح النموذج في التفريق بين قائمة الأمثلة (بضع لقطات) والمدخلات الفعلية.
الاستهداف غير صحيح: في بعض الأحيان، اقترح النموذج تغييرات على المنتج بدلاً من نص المراجعة. على سبيل المثال، إذا كانت المراجعة تشير إلى أنّ "هذه الجوربان مقرفة"، قد يقترح النموذج "ننصحك باستبدال الجوارب بأخرى مختلفة من علامة تجارية أو طراز مختلفَين"، ما قد لا يكون التأثير المطلوب. ساعد تقسيم الطلب في توضيح المهمة وتحسين تركيز النموذج على المراجعة.