تطبيق Food Analysis هو تطبيق ويب GenAI غذائي مخصص لوصفات التسوق والطهي الخاصة بك، وهو مصمم باستخدام بنية بدون خادم وقدرات الذكاء الاصطناعي التوليدية. تم إنشاؤه لأول مرة باعتباره الفائز في AWS Hackathon France 2024 ثم تم تقديمه كمعرض في AWS Summit Paris 2024.
يتم إنشاء الواجهة الخلفية للتطبيق باستخدام خدمات AWS مثل:
تم تصميم التطبيق بحيث يحتوي على الحد الأدنى من التعليمات البرمجية، وأن يكون قابلاً للتوسعة وقابلاً للتطوير وفعالاً من حيث التكلفة. يستخدم Lazy Loading لتقليل التكلفة وضمان أفضل تجربة للمستخدم.
لقد قمنا بتطوير هذا المعرض لإنشاء تطبيق تفاعلي بدون خادم باستخدام خدمات الذكاء الاصطناعي التوليدية.
معلومات المنتج الشخصية : هل لديك فضول لمعرفة ما هو موجود في المنتج وما إذا كان مفيدًا لك؟ ما عليك سوى مسح الرمز الشريطي ضوئيًا باستخدام التطبيق للحصول على قائمة موضحة بالمكونات/مسببات الحساسية وملخص مخصص بناءً على تفضيلاتك.
منشئ الوصفات المخصص : التقط صورة للمكونات الموجودة في ثلاجتك، وسيقوم التطبيق بإنشاء وصفات بناءً على تفضيلاتك باستخدام تلك المكونات.
يمكن تقسيم بنية التطبيق إلى 4 كتل:
التنفيذ : استخدام AWS Lambda للمنطق من جانب الخادم، وAmazon Bedrock كمنصة بناء للذكاء الاصطناعي التوليدي (GenAI)، وAnthropic Claude كنماذج لغة كبيرة (LLM) وStable Diffusion XL من StabilityAI كنموذج نشر لإنشاء الصور.
تطوير نموذج الذكاء الاصطناعي : كان لاختيار نموذج LLM تأثير على جودة الاستجابة وزمن الوصول. في النهاية، اخترنا Anthropic Claude 3 Haiku كنسبة جيدة بين الكمون والجودة.
الصور التي تم إنشاؤها بواسطة الذكاء الاصطناعي : تعد المطالبة بالصورة أمرًا حساسًا للغاية وكان يمثل تحديًا لإنشاء صورة تسلط الضوء حقًا على الميزات الغذائية للمنتجات. لصياغة الموجه، استخدمنا أول ماجستير في القانون لإنشاء الموجه بناءً على الميزات الغذائية للمنتج. تشبه هذه التقنية الاستعلام الذاتي لقواعد البيانات المتجهة. كما ساعد استخدام هندسة اللقطات المتعددة كثيرًا في تحسين جودة المطالبة.
الإستراتيجية : "لا تعيد اختراع العجلة"
التنفيذ : كانت الماسحات الضوئية للرموز الشريطية موجودة منذ فترة طويلة، وقد اخترنا مكتبة مفتوحة المصدر متوافقة مع مجموعتنا. ومع ضيق الوقت، لم نقضي الكثير من الوقت في مقارنة المكتبات، مع التركيز على الحصول على نموذج أولي فعال بدلاً من العثور على النموذج المثالي. "الكمال هو عدو الخير".
الإستراتيجية : إدراكًا لتنوع تفضيلات المستخدم واحتياجاته الغذائية، يشتمل تطبيقنا على ميزة تخصيص قوية. إلى جانب توفير البيانات الأولية، يهدف التطبيق إلى تثقيف المستخدمين حول الآثار الغذائية لخياراتهم.
التنفيذ : يشعر المستخدمون بإحساس بالملكية والاتصال حيث يقوم التطبيق بتخصيص رؤيته لتتماشى مع أهدافهم الصحية الفردية والقيود الغذائية. يضمن دمج محتوى موجز وغني بالمعلومات داخل التطبيق فهم المستخدمين لأهمية المكونات الغذائية المختلفة. يحول هذا الجانب التعليمي التطبيق إلى أداة تعليمية، مما يعزز التواصل الأعمق مع المستخدمين الذين يسعون إلى تحسين معرفتهم بالتغذية.
الإستراتيجية : لجذب انتباه المستخدمين وتوصيل المعلومات الغذائية الأساسية بشكل فعال، يستخدم تطبيقنا صورًا تم إنشاؤها بواسطة الذكاء الاصطناعي.
التنفيذ : تقدم Amazon Bedrock تجربة مطور غير تقليدية في إنشاء تمثيلات بصرية مذهلة للمنتجات الممسوحة ضوئيًا. إذا كان المنتج يحتوي على كميات كبيرة من السكر، على سبيل المثال، فإن صورة الذكاء الاصطناعي تحيطه بتصوير مرئي للسكر، ليكون بمثابة إشارة بصرية جذابة لا تُنسى.
الاستراتيجية : استخراج المكونات من الصورة، ويعمل بشكل جيد على الفواكه والخضروات.
التنفيذ : نستخدم Anthropic Claude 3 Sonnet على Amazon Bedrock بقدراتها البصرية لاستخراج العناصر الغذائية فقط من الصورة. يتيح لنا ذلك التركيز على العناصر الغذائية وتجاهل الخلفية أو العناصر الأخرى في الصورة. Claude 3 هو نموذج متعدد الوسائط يمكنه التعامل مع كل من النصوص والصور. الإخراج هو قائمة المكونات الموجودة في الصورة.
الهندسة السريعة : لاستغلال الإمكانات الكاملة للنموذج، نستخدم موجه النظام. تعد مطالبة النظام طريقة لتوفير السياق والتعليمات والإرشادات إلى Claude قبل تقديم سؤال أو مهمة إليه. باستخدام موجه النظام، يمكنك تمهيد الطريق للمحادثة، وتحديد دور كلود، أو شخصيته، أو لهجته، أو أي معلومات أخرى ذات صلة من شأنها أن تساعده على فهم مدخلات المستخدم والاستجابة لها بشكل أفضل.
system_prompt = "You have perfect vision and pay great attention to ingredients in each picture, you are very good at detecting food ingredients on images"
الإستراتيجية : قم بإنشاء 3 وصفات من المكونات المتطابقة في الصور:
التنفيذ : نستخدم Claude 3 Sonnet لإنشاء الوصفات الثلاث. تحتوي كل وصفة على معلومات JSON التالية:
{
"recipe_title" : " Succulent Grilled Cheese Sandwich " ,
"description" : " A classic comforting and flavorful dish, perfect for a quick meal " ,
"difficulty" : " easy " ,
"ingredients" : [ " bread " , " cheese " , " butter " ],
"additional_ingredients" : [ " ham " , " tomato " ],
"preparation_time" : 5 ,
"cooking_time" : 6
}
الإستراتيجية : قم بإنشاء وصفة خطوة بخطوة ليتبعها المستخدم.
التنفيذ : نستخدم Anthropic Claude 3 Haiku على Amazon Bedrock لإنشاء الوصفة خطوة بخطوة. يتم بث الخطوات إلى المستخدم لتقليل زمن الاستجابة للاستجابة، ونحن نستفيد من تدفق عنوان URL الخاص بـ lambda. تضمن هذه الطريقة وصولاً أكثر سلاسة إلى محتوى النص، مما يحسن تجربة المستخدم وتفاعله.
تنسيق الإخراج هو ملف Markdown لتسهيل عرض الوصفة على الموقع. كما أنه يبسط إلى حد كبير تحليل الوصفة بواسطة الواجهة الأمامية عند استخدام وضع البث.
اختيار نموذج الذكاء الاصطناعي الصحيح
التحدي : أثر اختيار نموذج اللغة (LM) بشكل كبير على زمن الاستجابة وجودتها، مما يشكل نقطة قرار حاسمة.
الحل : بعد إجراء تقييم شامل لمختلف النماذج، اخترنا نماذج Anthropic Claude التالية لمكونات مختلفة داخل التطبيق:
استخدم التحميل البطيء لتقليل التكلفة/النطاق الترددي
التحدي : الذكاء الاصطناعي التوليدي مكلف من حيث السعر وعرض النطاق الترددي. أردنا أن نكون مقتصدين وفعالين عند العمل في الأحداث المزدحمة.
الحل : يتيح لنا استخدام التحميل البطيء مع كون المفتاح تجزئة المطالبة تقليل التكلفة وتقديم الاستجابة بشكل أسرع.
الهندسة السريعة لتوليد الصور بالذكاء الاصطناعي
التحدي : صياغة مطالبة لإنشاء صور الذكاء الاصطناعي التي تسلط الضوء بشكل فعال على الميزات الغذائية تمثل تحديًا دقيقًا.
الحل : من خلال الاستفادة من نهج مكون من خطوتين، استخدمنا أول ماجستير في القانون لإنشاء رسالة موجهة بناءً على الميزات الغذائية للمنتج. تم استكمال تقنية الاستعلام الذاتي هذه (المشابهة لعملية الاستعلام الذاتي لقاعدة بيانات متجهة) من خلال دمج المطالبة المتعددة اللقطات. أدت هذه الطريقة إلى تحسين جودة الصور التي تم إنشاؤها وملاءمتها بشكل كبير، مما يضمن حصول المستخدمين على عروض مقنعة بصريًا لميزات المنتج.
تعقيد تخصيص المستخدم
التحدي : أدى دمج التفضيلات والقيود الغذائية الشخصية في النموذج إلى تعقيد الأمر.
الحل : لتعزيز فهم LLM، قمنا بشكل ديناميكي بدمج رأس في موجهنا الذي يحتوي على مدخلات مخصصة للحساسية والنظام الغذائي. أدى هذا النهج إلى تحسين دقة وأهمية استجابات LLM بشكل كبير، مما يضمن تجربة مخصصة للمستخدمين. أصبحت المطالبات الشخصية حجر الزاوية في تقديم معلومات دقيقة وذات صلة بناءً على التفضيلات الفردية.
دعم متعدد اللغات
التحدي : تقديم الطلب بلغات متعددة
الحل : يتم استخدام نفس الموجه، ولكن يتم توجيه LLM لإنشاء المخرجات بلغة معينة، بما يلبي تفضيلات اللغة للمستخدم (الإنجليزية/الفرنسية).
عنوان URL الخاص بـ AWS Lambda وAmazon CloudFront
التحدي : يمكن أن يكون استدعاء LLM لتنفيذ بعض المهام في وضع الاستجابة للطلب بطيئًا.
الحل : لمعالجة مهلة 30 ثانية لنقطة نهاية بوابة API، يتضمن الأسلوب المحدد استخدام عنوان URL الخاص بـ AWS Lambda عبر Amazon CloudFront. داخل Amazon CloudFront، يتم تشغيل وظيفة Lambda@Edge لكل طلب، وتكون مسؤولة عن التحقق من مصادقة المستخدم مقابل Amazon Cognito. إذا نجحت المصادقة، تقوم وظيفة Lambda@Edge بتوقيع الطلب إلى عنوان URL الخاص بـ Lambda (الذي يستخدم AWS_IAM
كطريقة للمصادقة). على الرغم من أن استخدام عنوان URL الخاص بـ Lambda يوفر حلاً ممكنًا، فمن الضروري الاعتراف بأن اختيار AWS AppSync يقدم بديلاً يقدم فوائد إضافية. يقدم AWS AppSync حلاً بديلاً، يتميز بآليات المصادقة والتفويض المضمنة التي تلبي هذه الاحتياجات بسلاسة. ومع ذلك، بالنسبة لهذا التطبيق التجريبي، اخترنا استخدام Lambda URL بدلاً من ذلك.
استجابة أمازون بيدروك المتزامنة/غير المتزامنة
التحدي : يمكن أن يتم الحصول على الاستجابة من Amazon Bedrock إما في وضع الطلب/الاستجابة أو في وضع البث، حيث يبدأ Lambda في دفق الاستجابة بدلاً من انتظار إنشاء الاستجابة بأكملها.
الحل : تعمل بعض أقسام التطبيق في وضع الطلب/الاستجابة (مثل Product ingredients description
أو استرداد مقترحات الوصفات الثلاثة)، بينما يستخدم جزء آخر ( Product summary
، Getting the Step-by-Step Recipe
) وضع البث لتوضيح كلا التنفيذين طُرق.
حالات الاستخدام الموضحة لتطبيق GenAi
npm install
us-east-1
. cdk deploy
قبل الوصول إلى التطبيق، تأكد من إنشاء حساب مستخدم في Amazon Cognito. لتحقيق ذلك، انتقل إلى وحدة تحكم AWS، ثم Amazon Cognito، وحدد موقع تجمع مستخدمين يحمل اسمًا مشابهًا لـ AuthenticationFoodAnalyzerUserPoolXXX
.
تحقق من مخرجات المكدس بحثًا عن عنوان URL يشبه Food analyzer app.domainName
. الصق عنوان URL هذا في متصفحك، وقم بتسجيل الدخول باستخدام المستخدم الذي تم إنشاؤه مسبقًا، وابدأ في الاستمتاع بالتطبيق.
يمكنك تشغيل تطبيق vite React هذا محليًا باتباع الخطوات التالية.
اتبع الإرشادات المذكورة أعلاه لنشر تطبيق cdk.
احصل على aws-exports.json
من نقطة نهاية توزيع Amazon CloudFront التي حصلت عليها من مخرجات CDK، واحفظه في مجلد ./resources/ui/public/
.
عنوان URL يشبه:
https://dxxxxxxxxxxxx.cloudfront.net/aws-exports.json
cd resources/ui
npm run dev
يجب تثبيت Node JS 18+ على جهاز النشر. (تعليمات)
يجب تثبيت AWS CLI 2+ على جهاز النشر. (تعليمات)
اطلب الوصول إلى نماذج Anthropic Claude وStable Diffusion XL على Amazon Bedrock
هذا المشروع مرخص بموجب ترخيص MIT-0. انظر ملف الترخيص.