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