تاریخ انتشار: 21 اکتبر 2024
فروشگاه های آنلاین می توانند با نمایش نظرات محصول، افزایش 270 درصدی در تبدیل را مشاهده کنند. بررسی های منفی نیز کلیدی هستند، زیرا اعتبار ایجاد می کنند. 82 درصد از خریداران آنلاین قبل از خرید به دنبال آنها هستند.
تشویق مشتریان به ارائه نظرات مفید درباره محصول، به ویژه زمانی که منفی باشد، می تواند مشکل باشد. در اینجا، نحوه استفاده از هوش مصنوعی مولد برای کمک به کاربران برای نوشتن نظرات آموزنده که به تصمیم گیری خرید دیگران کمک می کند را بررسی خواهیم کرد.
نسخه ی نمایشی و کد
با نسخه نمایشی بررسی محصول ما بازی کنید و کد را در GitHub بررسی کنید.
چگونه این را ساختیم
هوش مصنوعی سمت مشتری
برای این نسخه ی نمایشی، ویژگی سمت کلاینت را به دلایل زیر پیاده سازی کردیم:
- تاخیر ما میخواهیم بهمحض اینکه کاربر تایپ را متوقف کند، به سرعت پیشنهادهایی ارائه کنیم. ما می توانیم این را با اجتناب از رفت و برگشت سرور ارائه دهیم.
- هزینه در حالی که این یک نسخه ی نمایشی است، اگر قصد راه اندازی یک ویژگی مشابه در تولید را دارید، بسیار خوب است که با هزینه صفر سمت سرور آزمایش کنید تا زمانی که بتوانید تأیید کنید که آیا این ویژگی برای کاربران شما منطقی است یا خیر.
هوش مصنوعی مولد MediaPipe
ما استفاده از مدل Gemma 2B را از طریق MediaPipe LLM Inference API ( بسته MediaPipe GenAI ) به دلایل زیر انتخاب کردهایم:
- دقت مدل : Gemma 2B تعادل عالی اندازه و دقت را ارائه می دهد. هنگامی که به درستی از شما خواسته شد، نتایجی به دست آمد که برای این نسخه نمایشی رضایت بخش بود.
- پشتیبانی از بین مرورگرها : MediaPipe در تمام مرورگرهایی که از WebGPU پشتیبانی می کنند پشتیبانی می شود.
تجربه کاربری
بهترین شیوه های عملکرد را اعمال کنید
در حالی که Gemma 2B یک LLM کوچک است، اما هنوز یک دانلود بزرگ است. بهترین شیوه های عملکرد را اعمال کنید ، که شامل استفاده از وب کارگر است.
ویژگی را اختیاری کنید
ما می خواهیم پیشنهادات بررسی مبتنی بر هوش مصنوعی گردش کار کاربر را برای ارسال یک بررسی محصول بهبود بخشد. در پیادهسازی ما، کاربر میتواند یک بررسی ارسال کند، حتی اگر مدل بارگیری نشده باشد، و در نتیجه نکات بهبود ارائه نمیدهد.
حالت های رابط کاربری و انیمیشن ها
استنتاج معمولاً بیش از آنچه که فوری به نظر می رسد زمان می برد، بنابراین به کاربر سیگنال می دهیم که مدل در حال اجرای استنتاج یا «فکر کردن» است. ما از انیمیشنها برای کاهش انتظار استفاده میکنیم و در عین حال به کاربر اطمینان میدهیم که برنامه طبق برنامه کار میکند. حالت های مختلف رابط کاربری را که در نسخه نمایشی خود پیاده سازی کرده ایم، همانطور که توسط آدام آرگیل طراحی شده است، کشف کنید.
ملاحظات دیگر
در یک محیط تولید، ممکن است بخواهید:
- مکانیزم بازخورد ارائه کنید. اگر پیشنهادات متوسط باشد یا منطقی نباشد چه؟ یک مکانیسم بازخورد سریع (مانند شست بالا و پایین) را اجرا کنید و برای تعیین آنچه که کاربران مفید میدانند، به روشهای اکتشافی تکیه کنید. به عنوان مثال، ارزیابی کنید که چه تعداد از کاربران شما با این ویژگی تعامل دارند و آیا آن را خاموش می کنند.
- انصراف را مجاز کنید. اگر کاربر ترجیح دهد از کلمات خود بدون کمک هوش مصنوعی استفاده کند یا این ویژگی را آزاردهنده بداند، چه؟ به کاربر اجازه دهید تا در صورت تمایل خود را انصراف دهد و دوباره شرکت کند.
- توضیح دهید که چرا این ویژگی وجود دارد. یک توضیح کوتاه ممکن است کاربران شما را به استفاده از ابزار بازخورد تشویق کند. به عنوان مثال، "بازخورد بهتر به خریداران همکار کمک می کند تا تصمیم بگیرند چه چیزی بخرند، و به ما کمک می کند تا محصولات مورد نظر شما را ایجاد کنیم." میتوانید توضیحی طولانی درباره نحوه عملکرد این ویژگی و دلیل ارائه آن اضافه کنید، شاید به عنوان پیوندی بیشتر بدانید.
- در صورت لزوم، استفاده از هوش مصنوعی را افشا کنید. با هوش مصنوعی سمت سرویس گیرنده، محتوای کاربر برای پردازش به سرور ارسال نمی شود، بنابراین می توان آن را خصوصی نگه داشت. با این حال، اگر یک نسخه بازگشتی سمت سرور ایجاد میکنید یا اطلاعاتی را با هوش مصنوعی جمعآوری میکنید، آن را به خطمشی رازداری، شرایط خدمات یا مکانهای دیگر اضافه کنید.
پیاده سازی
اجرای ما برای پیشنهاد بازبینی محصول می تواند برای طیف وسیعی از موارد استفاده کار کند. اطلاعات زیر را به عنوان پایه ای برای ویژگی های هوش مصنوعی سمت مشتری آینده خود در نظر بگیرید.
MediaPipe در یک وب کارگر
با استنباط MediaPipe LLM ، کد AI فقط چند خط است: با ارسال یک URL مدل، یک حلکننده فایل و یک شی استنتاج LLM ایجاد کنید و بعداً از آن نمونه استنتاج LLM برای ایجاد پاسخ استفاده کنید.
با این حال، نمونه کد ما کمی گسترده تر است. این به این دلیل است که در یک وب کارگر پیاده سازی شده است، بنابراین پیام ها را با اسکریپت اصلی از طریق کدهای پیام سفارشی ارسال می کند. در مورد این الگو بیشتر بدانید.
// 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',
};
ورودی و خروجی
اعلان کامل ما با درخواست چند شات ساخته شد. این شامل ورودی کاربر یا به عبارت دیگر پیش نویس بررسی نوشته شده توسط کاربر است.
برای ایجاد اعلان بر اساس ورودی کاربر، در زمان اجرا تابع ابزار خود را generatePrompt
فراخوانی می کنیم.
مدلها و کتابخانههای هوش مصنوعی سمت کلاینت معمولاً با ابزارهای کمتری نسبت به هوش مصنوعی سمت سرور ارائه میشوند. به عنوان مثال، حالت JSON اغلب در دسترس نیست. این بدان معنی است که ما باید ساختار خروجی مورد نظر را در داخل prompt خود ارائه دهیم. این نسبت به ارائه طرحواره از طریق پیکربندی مدل کمتر تمیز، قابل نگهداری و قابل اعتماد است. علاوه بر این، مدلهای سمت مشتری کوچکتر هستند، به این معنی که بیشتر مستعد خطاهای ساختاری در خروجیشان هستند.
در عمل، مشاهده کردیم که Gemma 2B در ارائه یک خروجی ساختاریافته به عنوان متن در مقایسه با JSON یا جاوا اسکریپت عملکرد بهتری دارد. بنابراین برای این نسخه آزمایشی، ما یک فرمت خروجی مبتنی بر متن را انتخاب کردیم. این مدل متنی را تولید میکند و سپس خروجی را در یک شی جاوا اسکریپت برای پردازش بیشتر در برنامه وب خود تجزیه میکنیم.
بهبود سریع ما
ما از یک 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>
به وضوح ساختار اعلان به مدل در تمایز بین فهرست مثال (چند عکس) و ورودی واقعی کمک می کند.
هدف اشتباه گاهی اوقات، مدل به جای متن بررسی، تغییراتی را در محصول پیشنهاد میکرد. بهعنوان مثال، برای مروری که بیان میکند «من از این جورابها متنفرم»، مدل میتواند پیشنهاد کند «جایگزین جورابها با مارک یا سبک متفاوتی را در نظر بگیرید»، که این اثر مطلوب نیست. تقسیم اعلان به روشن شدن کار کمک کرد و تمرکز مدل را بر بررسی بهبود بخشید.