Aplikasi penganalisis makanan adalah aplikasi web nutrisi GenAI yang dipersonalisasi untuk resep belanja dan memasak Anda yang dibuat dengan arsitektur tanpa server dan kemampuan AI generatif. Ini pertama kali dibuat sebagai pemenang AWS Hackathon France 2024 dan kemudian diperkenalkan sebagai pameran stan di AWS Summit Paris 2024.
Back-end aplikasi dibuat menggunakan layanan AWS seperti:
Aplikasi ini dirancang untuk memiliki kode minimal, dapat diperluas, dapat diskalakan, dan hemat biaya. Ia menggunakan Pemuatan Lambat untuk mengurangi biaya dan memastikan pengalaman pengguna terbaik.
Kami mengembangkan pameran ini untuk membuat aplikasi interaktif tanpa server menggunakan layanan AI generatif.
Informasi produk yang dipersonalisasi : Ingin tahu tentang apa yang ada dalam suatu produk dan apakah itu baik untuk Anda? Cukup pindai kode batang dengan aplikasi untuk mengetahui daftar bahan/alergen yang dijelaskan dan ringkasan yang dipersonalisasi berdasarkan preferensi Anda.
Generator resep yang dipersonalisasi : Ambil foto bahan-bahan di lemari es Anda, dan aplikasi akan menghasilkan resep berdasarkan preferensi Anda menggunakan bahan-bahan tersebut.
Arsitektur aplikasi dapat dibagi menjadi 4 blok:
Implementasi : Menggunakan AWS Lambda untuk logika sisi server, Amazon Bedrock sebagai platform pembangunan kecerdasan buatan generatif (GenAI), Anthropic Claude sebagai Large Language Models (LLM) dan Stable Diffusion XL dari StabilityAI sebagai model difusi untuk menghasilkan gambar.
Pengembangan Model AI : Pemilihan model LLM berdampak pada kualitas respons dan latensi. Pada akhirnya, kami memilih Anthropic Claude 3 Haiku karena rasio yang baik antara latensi dan kualitas.
Gambar yang Dihasilkan AI : Meminta suatu gambar sangatlah sensitif dan merupakan tantangan untuk menghasilkan gambar yang benar-benar menonjolkan fitur nutrisi suatu produk. Untuk menyusun prompt, kami menggunakan LLM pertama untuk menghasilkan prompt berdasarkan fitur nutrisi produk. Teknik ini mirip dengan self-query untuk database vektor. Menggunakan rekayasa prompt multi-shot juga banyak membantu meningkatkan kualitas prompt.
Strategi : "Jangan menemukan kembali roda"
Implementasi : Pemindai kode batang sudah ada sejak lama, kami memilih perpustakaan sumber terbuka yang kompatibel dengan tumpukan kami. Dengan keterbatasan waktu, kami tidak menghabiskan banyak waktu untuk membandingkan perpustakaan, fokus pada memiliki prototipe yang berfungsi daripada menemukan yang sempurna. "Sempurna adalah musuh kebaikan".
Strategi : Mengakui keragaman preferensi pengguna dan kebutuhan diet, aplikasi kami menggabungkan fitur personalisasi yang kuat. Selain menyediakan data mentah, aplikasi ini bertujuan untuk mengedukasi pengguna tentang implikasi nutrisi dari pilihan mereka.
Implementasi : Pengguna merasakan rasa kepemilikan dan koneksi saat aplikasi menyesuaikan wawasannya agar selaras dengan tujuan kesehatan individu dan batasan pola makan mereka. Memasukkan konten yang ringkas dan informatif ke dalam aplikasi memastikan bahwa pengguna memahami pentingnya berbagai komponen nutrisi. Aspek pendidikan ini mengubah aplikasi menjadi alat pembelajaran, membina hubungan yang lebih dalam dengan pengguna yang ingin meningkatkan literasi nutrisi mereka.
Strategi : Untuk menarik perhatian pengguna dan mengkomunikasikan informasi nutrisi penting secara efektif, aplikasi kami menggunakan gambar yang dihasilkan AI.
Implementasi : Amazon Bedrock menawarkan pengalaman pengembang yang unik dalam menghasilkan representasi visual yang mencolok dari produk yang dipindai. Jika suatu produk mengandung gula berlebihan, misalnya, gambar AI mengelilinginya dengan gambaran visual gula, yang berfungsi sebagai isyarat visual yang menarik dan mudah diingat.
Strategi : Ekstrak bahan-bahan dari gambar, bekerja dengan baik pada buah-buahan dan sayuran.
Implementasi : Kami menggunakan Anthropic Claude 3 Sonnet di Amazon Bedrock dengan kemampuan visinya untuk mengekstrak hanya elemen makanan dari gambar. Hal ini memungkinkan kita untuk fokus pada elemen makanan dan mengabaikan latar belakang atau elemen lain pada gambar. Claude 3 adalah model multi-modal yang dapat menangani teks dan gambar. Outputnya adalah daftar bahan-bahan yang ada pada gambar.
Rekayasa Prompt : Untuk memanfaatkan potensi penuh model, kami menggunakan prompt sistem. Prompt sistem adalah cara untuk memberikan konteks, instruksi, dan pedoman kepada Claude sebelum menyajikan pertanyaan atau tugas. Dengan menggunakan prompt sistem, Anda dapat mengatur tahapan percakapan, menentukan peran Claude, kepribadian, nada bicara, atau informasi relevan lainnya yang akan membantunya untuk lebih memahami dan merespons masukan pengguna.
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"
Strategi : Hasilkan 3 resep dari bahan-bahan yang cocok pada gambar:
Implementasi : Kami menggunakan Claude 3 Sonnet untuk menghasilkan 3 resep. Setiap resep berisi informasi JSON berikut:
{
"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
}
Strategi : Hasilkan resep langkah demi langkah untuk diikuti pengguna.
Implementasi : Kami menggunakan Anthropic Claude 3 Haiku di Amazon Bedrock untuk menghasilkan resep langkah demi langkah. Langkah-langkah tersebut dialirkan ke pengguna untuk mengurangi latensi respons, kami memanfaatkan streaming URL lambda. Metode ini memastikan akses yang lebih lancar ke konten teks, meningkatkan pengalaman dan interaksi pengguna.
Format outputnya adalah file Markdown untuk memudahkan tampilan resep di website. Ini juga sangat menyederhanakan penguraian resep oleh front-end saat menggunakan mode streaming.
Memilih Model AI yang Tepat
Tantangan : Pemilihan Model Bahasa (LM) secara signifikan memengaruhi latensi dan kualitas respons, sehingga menjadi titik keputusan penting.
Solusi : Setelah melakukan penilaian komprehensif terhadap berbagai model, kami telah memilih model Anthropic Claude berikut untuk berbagai komponen dalam aplikasi:
Gunakan Lazy Loading untuk mengurangi biaya/bandwidth
Tantangan : AI generatif membutuhkan biaya dan bandwidth yang mahal. Kami ingin hemat dan efisien saat berlari di acara yang padat.
Solusi : Menggunakan Lazy Loading dengan kunci sebagai hash dari prompt memungkinkan kami mengurangi biaya dan memberikan respons lebih cepat.
Rekayasa Cepat untuk Pembuatan Gambar AI
Tantangan : Membuat permintaan untuk menghasilkan gambar AI yang secara efektif menyoroti fitur nutrisi merupakan tantangan tersendiri.
Solusi : Dengan memanfaatkan pendekatan dua langkah, kami menggunakan LLM pertama untuk menghasilkan perintah berdasarkan fitur nutrisi produk. Teknik self-query ini (mirip dengan proses self-query untuk database vektor) dilengkapi dengan penggabungan multi-shot prompting. Metode ini secara signifikan meningkatkan kualitas dan relevansi gambar yang dihasilkan, memastikan bahwa pengguna menerima representasi fitur produk yang menarik secara visual.
Kompleksitas Personalisasi Pengguna
Tantangan : Mengintegrasikan preferensi dan pembatasan diet yang dipersonalisasi ke dalam model menimbulkan kompleksitas.
Solusi : Untuk meningkatkan pemahaman LLM, kami secara dinamis memasukkan header di prompt kami yang berisi masukan alergi dan diet yang dipersonalisasi. Pendekatan ini secara signifikan meningkatkan keakuratan dan relevansi tanggapan LLM, memastikan pengalaman yang disesuaikan bagi pengguna. Perintah yang dipersonalisasi menjadi landasan dalam menyampaikan informasi yang tepat dan relevan berdasarkan preferensi individu.
Dukungan multi bahasa
Tantangan : Menyajikan aplikasi dalam berbagai bahasa
Solusi : Prompt yang sama digunakan, namun LLM diinstruksikan untuk menghasilkan output dalam bahasa tertentu, sesuai dengan preferensi bahasa pengguna (Inggris/Prancis).
URL AWS Lambda & Amazon CloudFront
Tantangan : Memanggil LLM untuk menjalankan beberapa tugas dalam mode respons permintaan bisa jadi lambat.
Solusi : Untuk mengatasi batas waktu 30 detik pada titik akhir API Gateway, pendekatan yang dipilih melibatkan penggunaan URL AWS Lambda melalui Amazon CloudFront. Dalam Amazon CloudFront, fungsi Lambda@Edge dipicu untuk setiap permintaan, yang bertanggung jawab untuk memverifikasi autentikasi pengguna terhadap Amazon Cognito. Jika autentikasi berhasil, fungsi Lambda@Edge menandatangani permintaan ke URL Lambda (yang menggunakan AWS_IAM
sebagai metode autentikasi). Meskipun penggunaan URL Lambda menawarkan solusi yang layak, penting untuk diketahui bahwa memilih AWS AppSync memberikan alternatif yang menawarkan manfaat tambahan. AWS AppSync menawarkan solusi alternatif, yang menampilkan mekanisme autentikasi dan otorisasi bawaan yang memenuhi kebutuhan ini dengan lancar. Namun, untuk aplikasi demo ini, kami memilih untuk menggunakan URL Lambda.
Respons sinkron/asinkron Amazon Bedrock
Tantangan : Memperoleh respons dari Amazon Bedrock dapat terjadi dalam mode permintaan/respons atau dalam mode streaming, di mana Lambda memulai streaming respons alih-alih menunggu seluruh respons dihasilkan.
Solusi : Beberapa bagian aplikasi beroperasi dalam mode permintaan/respons (seperti Product ingredients description
atau mengambil tiga proposal resep), sementara bagian lain ( Product summary
, Getting the Step-by-Step Recipe
) menggunakan mode streaming untuk mendemonstrasikan kedua implementasi metode.
Ilustrasi Kasus Penggunaan Aplikasi GenAi
npm install
us-east-1
. cdk deploy
Sebelum mengakses aplikasi, pastikan Anda telah membuat akun pengguna di Amazon Cognito. Untuk mencapai hal ini, navigasikan ke Konsol AWS, lalu Amazon Cognito, dan temukan kumpulan pengguna dengan nama yang mirip dengan AuthenticationFoodAnalyzerUserPoolXXX
.
Periksa keluaran tumpukan untuk URL yang menyerupai Food analyzer app.domainName
. Rekatkan URL ini ke browser Anda, masuk dengan pengguna yang dibuat sebelumnya, dan mulailah menikmati aplikasinya.
Anda dapat menjalankan aplikasi vite react ini secara lokal dengan mengikuti langkah-langkah berikut.
Ikuti petunjuk di atas untuk menerapkan aplikasi cdk.
Ambil aws-exports.json
dari titik akhir distribusi Amazon CloudFront yang Anda peroleh dari Output CDK, dan simpan ke dalam folder ./resources/ui/public/
.
URL-nya seperti:
https://dxxxxxxxxxxxx.cloudfront.net/aws-exports.json
cd resources/ui
npm run dev
Node JS 18+ harus diinstal pada mesin penerapan. (Instruksi)
AWS CLI 2+ harus diinstal pada mesin penerapan. (Instruksi)
Minta akses ke model Anthropic Claude dan Stable Diffusion XL di Amazon Bedrock
Proyek ini dilisensikan di bawah Lisensi MIT-0. Lihat file LISENSI.