食物分析器应用程序是一款个性化的 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 许可证获得许可。请参阅许可证文件。