食物分析儀應用程式是一款個性化的 GenAI 營養 Web 應用程序,適用於您的購物和烹飪食譜,採用無伺服器架構和生成式 AI 功能構建。它最初是作為 2024 年法國 AWS 黑客馬拉鬆的獲勝者創建的,然後在 2024 年巴黎 AWS 峰會上作為展位展覽推出。
該應用程式的後端是使用 AWS 服務製作的,例如:
該應用程式的設計目標是程式碼最少、可擴展、可伸縮且經濟高效。它使用延遲加載來降低成本並確保最佳的用戶體驗。
我們開發這個展覽是為了使用生成式人工智慧服務創建互動式無伺服器應用程式。
個人化產品資訊:想知道產品中含有什麼以及它是否對您有好處?只需使用應用程式掃描條碼即可取得成分/過敏原的解釋清單以及根據您的喜好提供的個人化摘要。
個人化食譜產生器:拍攝冰箱中食材的照片,應用程式將根據您的喜好使用這些食材產生食譜。
應用程式的架構可以分為 4 個區塊:
實作:使用 AWS Lambda 作為伺服器端邏輯,使用 Amazon Bedrock 作為生成人工智慧 (GenAI) 建置平台,使用 Anthropic Claude 作為大型語言模型 (LLM),使用 StabilityAI 的 Stable Diffusion XL 作為產生影像的擴散模型。
AI 模型開發:選擇 LLM 模型會對回應品質和延遲產生影響。最終,我們選擇了 Anthropic Claude 3 Haiku,因為它在延遲和品質之間具有良好的比例。
人工智慧產生的圖像:提示輸入圖像非常敏感,並且產生真正突出產品營養特徵的圖像是一項挑戰。為了製作提示,我們使用第一個法學碩士根據產品營養特徵產生提示。該技術類似於向量資料庫的自查詢。使用多鏡頭提示工程也對提升提示品質有很大幫助。
策略:“不要重新發明輪子”
實作:條碼掃描器已經存在很久了,我們選擇了一個與我們的堆疊相容的開源函式庫。由於時間有限,我們沒有花太多時間進行庫比較,而是專注於擁有一個可用的原型,而不是尋找完美的原型。 「完美是優秀的敵人」。
策略:考慮到使用者偏好和飲食需求的多樣性,我們的應用程式融入了強大的個人化功能。除了提供原始數據外,該應用程式還旨在教育用戶了解其選擇的營養影響。
實施:當應用程式根據個人健康目標和飲食限制調整其見解時,使用者會感到一種主人翁感和連結感。在應用程式中加入簡潔且資訊豐富的內容可確保使用者了解各種營養成分的重要性。這種教育方面將應用程式轉變為學習工具,與尋求提高營養素養的用戶建立更深入的聯繫。
策略:為了吸引用戶的注意力並有效地傳達關鍵營養訊息,我們的應用程式採用人工智慧生成的圖像。
實作:Amazon Bedrock 在生成掃描產品的視覺上引人注目的表示方面提供了開箱即用的開發人員體驗。例如,如果產品含有過量的糖,人工智慧圖像就會用糖的視覺描繪圍繞它,作為引人入勝且令人難忘的視覺提示。
策略:從影像中提取成分,適用於水果和蔬菜。
實作:我們在 Amazon Bedrock 上使用 Anthropic Claude 3 Sonnet 及其視覺功能,僅從影像中提取食物元素。這使我們能夠專注於食物元素,而忽略圖像中的背景或其他元素。 Claude 3 是一個多模態模型,可以處理文字和圖像。輸出是影像中存在的成分列表。
提示工程:為了充分發揮模型的潛力,我們使用系統提示。系統提示是在向 Claude 提出問題或任務之前向 Claude 提供上下文、說明和指南的一種方式。透過使用系統提示,您可以為對話做好準備,指定 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 產生 3 個食譜。每個配方包含以下 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
}
策略:產生一個逐步的配方供使用者遵循。
實作:我們使用 Amazon Bedrock 上的 Anthropic Claude 3 Haiku 來生成分步配方。這些步驟會串流傳輸給用戶,以減少回應的延遲,我們利用 lambda URL 串流傳輸。此方法保證了文字內容的存取更加順暢,提高了使用者體驗和互動。
輸出格式是Markdown文件,方便食譜在網站上的顯示。它也大大簡化了使用流模式時前端對配方的解析。
選擇正確的人工智慧模型
挑戰:語言模型 (LM) 的選擇顯著影響反應延遲和質量,構成關鍵決策點。
解決方案:在對各種模型進行全面評估後,我們為應用程式中的不同元件選擇了以下 Anthropic Claude 模型:
使用延遲加載來降低成本/頻寬
挑戰:生成式人工智慧的價格和頻寬成本高。我們希望在擁擠的賽事中跑步時保持節儉和高效。
解決方案:使用延遲加載,金鑰是提示的雜湊值,使我們能夠降低成本並更快地提供回應。
AI 影像生成的快速工程
挑戰:製作有效突顯營養特徵的 AI 影像提示是一項細緻的挑戰。
解決方案:利用兩步驟法,我們利用第一個法學碩士根據產品營養特徵產生提示。這種自查詢技術(類似於向量資料庫的自查詢過程)透過合併多鏡頭提示得到了補充。這種方法顯著提高了生成影像的品質和相關性,確保使用者收到視覺上引人注目的產品功能表示。
使用者個性化複雜性
挑戰:將個人化飲食偏好和限制融入模型中,呈現複雜性。
解決方案:為了增強法學碩士的理解,我們在提示中動態合併了一個標題,其中包含個人化的過敏和飲食輸入。這種方法顯著提高了法學碩士回答的準確性和相關性,確保為使用者提供量身定制的體驗。個人化提示成為根據個人喜好提供準確且相關資訊的基石。
多語言支援
挑戰:以多種語言展示應用程式
解決方案:使用相同的提示,但法學碩士被指示以特定語言產生輸出,以滿足使用者的語言偏好(英語/法語)。
AWS Lambda URL 和 Amazon CloudFront
挑戰:呼叫 LLM 以請求回應模式執行某些任務可能會很慢。
解決方案:為了解決 API Gateway 終端節點 30 秒逾時的問題,所選方法涉及透過 Amazon CloudFront 使用 AWS Lambda URL。在 Amazon CloudFront 中,每個請求都會觸發 Lambda@Edge 函數,負責根據 Amazon Cognito 驗證使用者驗證。如果驗證成功,Lambda@Edge 函數會將請求簽署到 Lambda URL(使用AWS_IAM
作為驗證方法)。雖然利用 Lambda URL 提供了可行的解決方案,但必須承認,選擇 AWS AppSync 是一種提供額外優勢的替代方案。 AWS AppSync 提供了一種替代解決方案,具有內建的身份驗證和授權機制,可無縫滿足這些需求。但是,對於此演示應用程序,我們選擇使用 Lambda URL。
Amazon Bedrock 同步/非同步回應
挑戰:從 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
使用者池。
檢查堆疊輸出中是否存在類似Food analyzer app.domainName
的 URL。將此 URL 貼到瀏覽器中,使用先前建立的使用者登錄,然後開始使用該應用程式。
您可以按照以下步驟在本機上執行此 vite React 應用程式。
按照上述說明部署 cdk 應用程式。
從您從 CDK 輸出取得的 Amazon CloudFront 分發終端節點取得aws-exports.json
,並將其儲存至./resources/ui/public/
資料夾。
網址類似:
https://dxxxxxxxxxxxx.cloudfront.net/aws-exports.json
cd resources/ui
npm run dev
Node JS 18+ 必須安裝在部署電腦上。 (指示)
AWS CLI 2+ 必須安裝在部署電腦上。 (指示)
請求訪問 Amazon Bedrock 上的 Anthropic Claude 模型和 Stable Diffusion XL
該專案根據 MIT-0 許可證獲得許可。請參閱許可證文件。