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