ساخت برنامهریز غذا با هوش مصنوعی و بدون سرور با توابع OpenAI، AWS Step، AWS Lambda و CDK

قابلیت های مولد OpenAI امکانات جدیدی را هنگام ساخت برنامه ها ارائه می دهد. در ترکیب با فناوریهای بدون سرور، میتوانیم برنامهها را سریعتر ایجاد کنیم و در عین حال انعطافپذیری برای تکرار و بهبود آنها را در طول زمان حفظ کنیم.
در این مقاله، من به شما نشان خواهم داد که چگونه برنامهای بسازید که ایمیلهای حاوی برنامههای غذایی هفتگی تولید شده را از مجموعه موادی که کاربر ارائه میدهد ارسال کند. ما از APIهای OpenAI به همراه خدمات بدون سرور AWS استفاده خواهیم کرد: Step Functions، AWS Lambda و Amazon SES.
ما از زمان اجرا و تایپ اسکریپت NodeJs برای کد Lambda و همچنین CDK برای IaC استفاده خواهیم کرد.
قراره چی بسازیم؟
ما یک برنامه کاربردی ایجاد خواهیم کرد که به کاربران امکان می دهد از طریق یک API درخواستی حاوی مجموعه ای از مواد غذایی و یک آدرس ایمیل ارسال کنند. سپس، به طور ناهمزمان، ایمیلی حاوی یک برنامه غذایی با دستور العمل های دقیق برای یک هفته کامل برای کاربر ارسال می کند:
در اینجا نمودار معماری برنامه ای است که می خواهیم بسازیم:
بخش های مربوط به این راه حل:
-
ما از یک تابع گام برای هماهنگ کردن فراخوانیهای توابع Lambda استفاده میکنیم که درخواستهایی را به APIهای OpenAI ارسال میکنند تا دستور العملهایی را از یک دستور و همچنین تصویری برای هر دستور تهیه کنند.
-
ما از سطل S3 برای ذخیره تصاویر دستور تهیه شده استفاده می کنیم. این تصاویر از طریق یک توزیع CloudFront ارائه می شوند.
-
سپس برنامه غذایی تولید شده از طریق ایمیل با استفاده از SES ارسال می شود. ما از قابلیت قالب های SES برای ارسال ایمیل های شخصی برای هر کاربر استفاده می کنیم.
-
دروازه Rest API دارای یک مسیر POST با ادغام با Meal Planner Step Function است.
TL; DR
می توانید مخزن کامل را با خط لوله استقرار آن در اینجا پیدا کنید 👇
GitHub – ziedbentahar/برنامه-ریز-غذا-بدون-سرور-با-او-و-اپنایی
بیایید عمیقاً به کدها بپردازیم
☝️ قبل از شروع: برای استفاده از OpenAI API، باید ثبت نام کنید و یک API KEY ایجاد کنید. برای شروع می توانید این لینک را دنبال کنید. استفاده از این API رایگان نیست، با این حال حسابهای جدید اعتبار (توکن) رایگان برای شروع آزمایش دریافت میکنند.
تعریف ماشین دولتی
اولین گام این دستگاه دولتی ایجاد یک برنامه غذایی برای یک هفته است. مرحله دوم شامل ایجاد یک تصویر برای هر دستور غذا و سپس ذخیره آن در یک سطل S3 است. پردازش به صورت موازی برای هر دستور غذا با استفاده از حالت Map انجام می شود، این مزیت را دارد که زمان اجرای کلی ماشین حالت را کاهش دهد. و در نهایت، آخرین مرحله مهم، ارسال ایمیل حاوی برنامه غذایی است:
که به این تعریف ماشین حالت روان در CDK ترجمه می شود:
می توانید تعریف کامل CDK ماشین حالت را در این پیوند پیدا کنید.
تعریف توابع لامبدا
1- برنامه غذایی لامبدا را ایجاد کنید:
بخش چالش برانگیز در مورد این مرحله، یافتن بهترین درخواستی بود که نتایج خوب و ثابتی را از API تکمیل OpenAI به دست آورد. من استفاده کردم text-davinci-003
مدل GPT (همچنین به عنوان GPT-3.5 نامیده می شود).
وقتی دستورات مختلف را امتحان کردم، پیشنهادات برای تهیه برنامههای غذایی جالب با توجه به فهرستی از مواد منسجم، بسیار خوب بود. من حتی توانستم یک نتیجه ساختاریافته در قالب JSON را درخواست کنم که توسط تابع Lambda پردازش شود. من همچنین با پارامترهایی مانند temperature
، TopP
و max_tokens
جستجو برای نقطه شیرینی که نتایج رضایت بخشی به دست می آورد.
این دستور بهترین نتایج را با توجه به مورد استفاده ما ایجاد می کند:
Generate a dinner meal plan for the whole week with these ingredients <a comma seperated list of ingredients> and with other random ingredients.
Result must be in json format
Each meal recipe contains a name, a five sentences for instructions and an array of ingredients
و در اینجا کد تابع Lambda است که تولید برنامه غذایی را مدیریت می کند:
☝️ چند یادداشت:
-
همانطور که در نمودار بالا نشان داده شده است، کلید OpenAI API روی یک راز ذخیره می شود. در این مثال ما از پارامترهای AWS و رمزهای پسوند Lambda برای خواندن مقدار مخفی از Lambda استفاده می کنیم. در اینجا می توانید درباره این افزونه Lambda اطلاعات بیشتری کسب کنید.
-
حتی اگر API تکمیل مدلهای پاسخ سازگار را در JSON ارائه میکرد، به دلایلی، ویژگیهای شی JSON دارای یک پوشش ثابت نبود، زیرا من در حال آزمایش با API بودم. از این رو قبل از برگرداندن نتیجه، از تابع helper getProperty استفاده می شود. این تابع دریافت یک مقدار ویژگی از یک شی را بدون توجه به پوشش آن تضمین می کند.
2- تصویر دستور غذا را Lambda ایجاد کنید:
این تابع لامبدا مشابه عملکرد قبلی است. ما از نام دستور استفاده می کنیم که createCompletion
API به منظور ایجاد یک تصویر از آن با فراخوانی createImage (این API از مدلهای DALL-E برای تولید تصویر استفاده میکند) ایجاد کرده است:
createImage
API آرایه ای از URL ها را برمی گرداند، اندازه این آرایه به تعداد تغییرات تصاویری که می خواهیم تولید کنیم بستگی دارد. در مثال ما فقط به یک تصویر واحد علاقه مندیم. URL تصویر پس از یک ساعت منقضی میشود، به همین دلیل است که آن را به آپلود-دستور العمل-تصویر-به-ذخیرهسازی لامبدا میدهیم که مسئولیت دانلود تصویر و ذخیره آن را در سطل S3 دارد.
3- ارسال برنامه غذایی به ایمیل Lambda:
ارسال ایمیل از SES استفاده می کند. اما ابتدا تابع Lambda یک داده الگوی حاوی عناصر لازم برای تولید ایمیل را آماده می کند:
در بخش زیر، نحوه استفاده از CDK را برای ایجاد هویت ایمیل SES جدید و همچنین الگوی ایمیلی که برای ارسال طرح mal استفاده میشود، خواهیم دید.
توجه داشته باشید: می توانید تعاریف CDK این توابع لامبدا را در این لینک بیابید.
پیکربندی SES
در این مثال، ما از دامنه ای استفاده می کنیم که قبلاً در منطقه میزبان عمومی Route53 تعریف شده است. سپس اعتبارسنجی DNS هویت ایمیل SES یکپارچه است. ما همچنین الگوی ایمیل برنامه غذایی را در این پشته تودرتو ایجاد می کنیم:
☝️ توجه داشته باشید: به طور پیش فرض، یک حساب SES در حالت جعبه ایمنی است. شما مجاز به ارسال ایمیل فقط به هویت های تایید شده هستید و فقط می توانید تعداد محدودی ایمیل در هر دوره 24 ساعته ارسال کنید. برای درک سهمیههای حالت sandbox و نحوه خارج شدن از آن، این پیوند را دنبال کنید.
ادغام API Gateway با گردش کار تابع Step
ایجاد RestApi با ادغام Step Function با CDK بسیار آسان است، اگرچه کمی پرمخاطب:
ما باید نقشی ایجاد کنیم که دروازه Api را به آن اعطا کند states:StartExecution
تابع مرحله هر درخواست با اعتبارسنجی مدل طرحواره JSON Gateway API قبل از اجرای تابع مرحله تایید می شود.
بسته شدن
در این پست، دیدیم که چگونه ترکیب API های OpenAI با معماری بدون سرور می تواند به ساخت برنامه های مبتنی بر هوش مصنوعی با حداقل تنظیمات و پیکربندی کمک کند. قابلیتهای هر دوی این دو جهان، توانمندسازهای بزرگی برای ساختن MVP و تکرار سریعتر هستند.
این برنامه را می توان با در نظر گرفتن محدودیت های غذایی یا حتی با ایجاد یک نامه خبری هفتگی با هوش مصنوعی بهبود داد.
شما می توانید کد منبع کامل این برنامه را در اینجا بیابید:
GitHub – ziedbentahar/برنامه-ریز-غذا-بدون-سرور-با-او-و-اپنایی
مطالب بیشتر
رقابت متنی OpenAI API
OpenAI API تولید تصویر
ایجاد یک API Step Functions با استفاده از API Gateway
کار با مدل ها و الگوهای نقشه برداری
شخصی سازی ایمیل پیشرفته
ماژول aws-cdk-lib.aws_stepfunctions · AWS CDK