با Gemma یک دستیار هوش مصنوعی ایمیل تجاری بسازید

رسیدگی به سؤالات مشتری، از جمله ایمیل، بخش ضروری بسیاری از کسب و کارها است، اما می تواند به سرعت زیاد شود. با کمی تلاش، مدل‌های هوش مصنوعی (AI) مانند Gemma می‌توانند این کار را آسان‌تر کنند.

هر کسب‌وکاری به پرسش‌هایی مانند ایمیل‌ها کمی متفاوت رسیدگی می‌کند، بنابراین مهم است که بتوانید فناوری‌هایی مانند هوش مصنوعی مولد را با نیازهای کسب‌وکار خود تطبیق دهید. این پروژه با مشکل خاص استخراج اطلاعات سفارش از ایمیل‌ها به نانوایی در داده‌های ساختاریافته مقابله می‌کند، بنابراین می‌توان آن را به سرعت به سیستم رسیدگی به سفارش اضافه کرد. با استفاده از 10 تا 20 نمونه درخواست و خروجی مورد نظر خود، می توانید مدل Gemma را برای پردازش ایمیل های مشتریان خود تنظیم کنید، به شما کمک کند سریع پاسخ دهید و با سیستم های تجاری موجود خود یکپارچه شوید. این پروژه به‌عنوان یک الگوی کاربردی هوش مصنوعی ساخته شده است که می‌توانید آن را گسترش دهید و با آن سازگار کنید تا از مدل‌های Gemma برای کسب‌وکارتان ارزش کسب کنید.

برای یک نمای کلی ویدیویی از پروژه و نحوه گسترش آن، از جمله بینش افرادی که آن را ساخته‌اند، ویدیوی ساخت دستیار هوش مصنوعی ایمیل تجاری با هوش مصنوعی گوگل را بررسی کنید. همچنین می توانید کد این پروژه را در مخزن کد کتاب آشپزی Gemma بررسی کنید. در غیر این صورت، می توانید با استفاده از دستورالعمل های زیر، توسعه پروژه را شروع کنید.

نمای کلی

این آموزش شما را در راه اندازی، اجرا و گسترش یک برنامه دستیار ایمیل تجاری ساخته شده با Gemma، Python و Flask راهنمایی می کند. این پروژه یک رابط کاربری وب اولیه را ارائه می دهد که می توانید آن را مطابق با نیازهای خود تغییر دهید. این برنامه برای استخراج داده‌ها از ایمیل‌های مشتری در ساختاری برای نانوایی ساختگی ساخته شده است. شما می توانید از این الگوی کاربردی برای هر کار تجاری که از ورودی متن و خروجی متن استفاده می کند استفاده کنید.

اسکرین شات از رابط کاربری برنامه وب

شکل 1. رابط کاربری پروژه برای پردازش درخواست های ایمیل نانوایی

الزامات سخت افزاری

این فرآیند تنظیم را روی رایانه‌ای با واحد پردازش گرافیکی (GPU) یا واحد پردازش Tensor (TPU) و حافظه GPU یا TPU کافی برای نگهداری مدل موجود به‌علاوه داده‌های تنظیم اجرا کنید. برای اجرای تنظیمات تنظیم در این پروژه، به حدود 16 گیگابایت حافظه GPU، تقریباً به همان میزان رم معمولی و حداقل 50 گیگابایت فضای دیسک نیاز دارید.

شما می توانید بخش تنظیم مدل Gemma این آموزش را با استفاده از یک محیط Colab با زمان اجرا T4 GPU اجرا کنید. اگر این پروژه را بر روی یک نمونه Google Cloud VM می‌سازید، نمونه را مطابق با این شرایط پیکربندی کنید:

  • سخت افزار GPU : برای اجرای این پروژه به NVIDIA T4 نیاز است (انویدیا L4 یا بالاتر توصیه می شود)
  • سیستم عامل : یک گزینه Deep Learning در لینوکس ، به ویژه Deep Learning VM با CUDA 12.3 M124 با درایورهای نرم افزار GPU از پیش نصب شده را انتخاب کنید.
  • اندازه دیسک راه‌اندازی : حداقل 50 گیگابایت فضای دیسک را برای داده‌ها، مدل‌ها و نرم‌افزارهای پشتیبانی‌کننده خود فراهم کنید.

راه اندازی پروژه

این دستورالعمل ها شما را در آماده سازی این پروژه برای توسعه و آزمایش راهنمایی می کند. مراحل راه اندازی کلی شامل نصب نرم افزار پیش نیاز، شبیه سازی پروژه از مخزن کد، تنظیم چند متغیر محیطی، نصب کتابخانه های پایتون و آزمایش برنامه وب می باشد.

نصب و پیکربندی کنید

این پروژه از Python 3 و Virtual Environments ( venv ) برای مدیریت بسته ها و اجرای برنامه استفاده می کند. دستورالعمل‌های نصب زیر برای دستگاه میزبان لینوکس است.

برای نصب نرم افزار مورد نیاز:

  • پایتون 3 و بسته محیط مجازی venv را برای پایتون نصب کنید:

    sudo apt update
    sudo apt install git pip python3-venv
    

پروژه را شبیه سازی کنید

کد پروژه را در کامپیوتر توسعه دهنده خود دانلود کنید. برای بازیابی کد منبع پروژه به نرم افزار کنترل منبع git نیاز دارید.

برای دانلود کد پروژه:

  1. با استفاده از دستور زیر مخزن git را کلون کنید:

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. اختیاری، مخزن git محلی خود را برای استفاده از پرداخت پراکنده پیکربندی کنید، بنابراین فقط فایل‌های پروژه را در اختیار داشته باشید:

    cd gemma-cookbook/
    git sparse-checkout set Gemma/business-email-assistant/
    git sparse-checkout init --cone
    

کتابخانه های پایتون را نصب کنید

کتابخانه های پایتون را با محیط مجازی venv پایتون که برای مدیریت بسته ها و وابستگی های پایتون فعال شده است، نصب کنید. قبل از نصب کتابخانه های پایتون با نصب کننده pip ، مطمئن شوید که محیط مجازی پایتون را فعال کرده اید. برای اطلاعات بیشتر در مورد استفاده از محیط های مجازی پایتون، به مستندات پایتون venv مراجعه کنید.

برای نصب کتابخانه های پایتون:

  1. در یک پنجره ترمینال، به دایرکتوری business-email-assistant بروید:

    cd Gemma/business-email-assistant/
    
  2. محیط مجازی پایتون (venv) را برای این پروژه پیکربندی و فعال کنید:

    python3 -m venv venv
    source venv/bin/activate
    
  3. با استفاده از اسکریپت setup_python کتابخانه های پایتون مورد نیاز را برای این پروژه نصب کنید:

    ./setup_python.sh
    

تنظیم متغیرهای محیطی

این پروژه برای اجرا به چند متغیر محیطی از جمله نام کاربری Kaggle و نشانه Kaggle API نیاز دارد. شما باید یک حساب Kaggle داشته باشید و درخواست دسترسی به مدل های Gemma را داشته باشید تا بتوانید آنها را دانلود کنید. برای این پروژه، نام کاربری Kaggle و نشانه Kaggle API را به دو فایل .env اضافه می کنید که به ترتیب توسط برنامه وب و برنامه تنظیم خوانده می شوند.

برای تنظیم متغیرهای محیطی:

  1. نام کاربری Kaggle و کلید رمز خود را با دنبال کردن دستورالعمل‌های موجود در مستندات Kaggle دریافت کنید.
  2. با دنبال کردن دستورالعمل های دسترسی به Gemma در صفحه راه اندازی Gemma ، به مدل Gemma دسترسی پیدا کنید.
  3. با ایجاد یک فایل متنی .env در هر یک از این مکان‌ها در کلون پروژه، فایل‌های متغیر محیطی را برای پروژه ایجاد کنید:
    email-processing-webapp/.env
    model-tuning/.env
    
  4. پس از ایجاد فایل های متنی .env ، تنظیمات زیر را به هر دو فایل اضافه کنید:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

برنامه را اجرا و تست کنید

پس از اتمام نصب و پیکربندی پروژه، برنامه وب را اجرا کنید تا تأیید کنید که آن را به درستی پیکربندی کرده اید. شما باید این کار را به عنوان یک بررسی پایه قبل از ویرایش پروژه برای استفاده خود انجام دهید.

برای اجرا و تست پروژه:

  1. در یک پنجره ترمینال، به دایرکتوری email-processing-webapp بروید:

    cd business-email-assistant/email-processing-webapp/
    
  2. برنامه را با استفاده از اسکریپت run_app اجرا کنید:

    ./run_app.sh
    
  3. پس از راه‌اندازی برنامه وب، کد برنامه یک URL را فهرست می‌کند که می‌توانید آن را مرور و آزمایش کنید. به طور معمول، این آدرس:

    http://127.0.0.1:5000/
    
  4. در رابط وب، دکمه دریافت داده را در زیر اولین فیلد ورودی فشار دهید تا پاسخی از مدل ایجاد شود.

اولین پاسخ از مدل پس از اجرای برنامه بیشتر طول می کشد زیرا باید مراحل اولیه سازی را در اجرای نسل اول کامل کند. درخواست‌های فوری بعدی و تولید در یک برنامه وب در حال اجرا در زمان کمتری تکمیل می‌شود.

برنامه را گسترش دهید

هنگامی که برنامه را اجرا کردید، می توانید آن را با تغییر رابط کاربری و منطق کسب و کار گسترش دهید تا برای کارهایی که به شما یا کسب و کار شما مرتبط هستند کار کند. همچنین می‌توانید رفتار مدل Gemma را با استفاده از کد برنامه با تغییر اجزای اعلانی که برنامه به مدل هوش مصنوعی مولد ارسال می‌کند، تغییر دهید.

این نرم افزار دستورالعمل هایی را به مدل به همراه داده های ورودی از کاربر یک فرمان کامل از مدل ارائه می دهد. شما می توانید این دستورالعمل ها را برای تغییر رفتار مدل تغییر دهید، مانند تعیین نام پارامترها و ساختار JSON برای تولید. یک راه ساده‌تر برای تغییر رفتار مدل، ارائه دستورالعمل‌ها یا راهنمایی‌های اضافی برای پاسخ مدل است، مانند مشخص کردن این که پاسخ‌های تولید شده نباید دارای قالب‌بندی Markdown باشند.

برای اصلاح دستورالعمل های سریع:

  1. در پروژه توسعه، فایل کد business-email-assistant/email-processing-webapp/app.py باز کنید.
  2. در کد app.py ، دستورالعمل های افزودنی را به تابع get_prompt(): اضافه کنید:

    def get_prompt():
      return """
        Extract the relevant details of this request and return them in
        JSON code, with no additional markdown formatting:\n"""
    

این مثال عبارت "بدون قالب بندی علامت گذاری اضافی" را به دستورالعمل ها اضافه می کند.

ارائه دستورالعمل فوری اضافی می تواند به شدت بر خروجی تولید شده تأثیر بگذارد و اجرای آن به میزان قابل توجهی تلاش کمتری می کند. ابتدا باید این روش را امتحان کنید تا ببینید آیا می توانید رفتار مورد نظر خود را از مدل دریافت کنید. با این حال، استفاده از دستورالعمل‌های سریع برای اصلاح رفتار مدل جما محدودیت‌هایی دارد. به ویژه، محدودیت کلی رمز ورودی مدل، که 8192 توکن برای Gemma 2 است، از شما می‌خواهد دستورالعمل‌های فوری دقیق را با اندازه داده‌های جدیدی که ارائه می‌دهید متعادل کنید تا زیر آن محدودیت بمانید.

مدل را تنظیم کنید

انجام تنظیم دقیق یک مدل Gemma روش توصیه شده برای پاسخگویی مطمئن تر برای کارهای خاص است. به ویژه، اگر می‌خواهید مدل با ساختاری خاص، از جمله پارامترهای نام‌گذاری شده خاص، JSON تولید کند، باید مدل را برای آن رفتار تنظیم کنید. بسته به وظیفه ای که می خواهید مدل تکمیل کند، می توانید با 10 تا 20 مثال به عملکرد اولیه برسید. این بخش از آموزش نحوه تنظیم و اجرای تنظیم دقیق بر روی یک مدل Gemma را برای یک کار خاص توضیح می دهد.

دستورالعمل‌های زیر نحوه انجام عملیات تنظیم دقیق در یک محیط VM را توضیح می‌دهند، با این حال، می‌توانید این عملیات تنظیم را با استفاده از نوت بوک Colab مربوط به این پروژه نیز انجام دهید.

الزامات سخت افزاری

الزامات محاسباتی برای تنظیم دقیق مانند الزامات سخت افزاری برای بقیه پروژه است. اگر توکن های ورودی را به 256 و اندازه دسته ای را به 1 محدود کنید، می توانید عملیات تنظیم را در یک محیط Colab با زمان اجرای GPU T4 اجرا کنید.

داده ها را آماده کنید

قبل از شروع به تنظیم یک مدل Gemma، باید داده ها را برای تنظیم آماده کنید. هنگامی که یک مدل را برای یک کار خاص تنظیم می کنید، به مجموعه ای از نمونه های درخواست و پاسخ نیاز دارید. این مثال‌ها باید متن درخواست را بدون هیچ دستورالعملی و متن پاسخ مورد انتظار را نشان دهند. برای شروع، باید یک مجموعه داده با حدود 10 مثال تهیه کنید. این نمونه ها باید طیف کاملی از درخواست ها و پاسخ های ایده آل را نشان دهند. اطمینان حاصل کنید که درخواست‌ها و پاسخ‌ها تکراری نیستند، زیرا می‌تواند باعث تکراری شدن پاسخ‌های مدل شود و به‌طور مناسب با تغییرات درخواست‌ها تنظیم نشود. اگر مدل را برای تولید یک قالب داده ساختاریافته تنظیم می کنید، مطمئن شوید که تمام پاسخ های ارائه شده کاملاً با فرمت خروجی داده مورد نظر مطابقت دارند. جدول زیر چند نمونه رکورد از مجموعه داده این مثال کد را نشان می دهد:

درخواست کنید پاسخ
سلام مرکز نانوایی هندی،\nآیا اتفاقاً 10 پندا و سی بوندی لادو در دست دارید؟ همچنین کیک با طعم وانیلی و شکلاتی را می فروشید. من به دنبال سایز 6 اینچ هستم { "نوع": "پرس و جو"، "اقلام": [ { "نام": "پنداس"، "کمیت": 10 }، { "نام": "بوندی لادووس"، "کمیت": 30 }، { "نام" ": "کیک"، "فیلینگ": پوچ، "فراستینگ": "وانیل"، "طعم": "شکلاتی"، "اندازه": "6 اینچ" } ] }
من کسب و کار شما را در نقشه های گوگل دیدم. جلابی و گلاب جامون می فروشید؟ { "نوع": "پرس و جو"، "اقلام": [ { "نام: "جلابی"، "کمیت": پوچ }، { "نام": "گلاب جامون"، "کمیت": پوچ } ] }

جدول 1. فهرست بخشی از مجموعه داده تنظیم برای استخراج کننده داده ایمیل نانوایی.

فرمت داده ها و بارگذاری

می‌توانید داده‌های تنظیم خود را در هر قالبی که مناسب است، از جمله رکوردهای پایگاه داده، فایل‌های JSON، CSV یا فایل‌های متنی ساده ذخیره کنید، تا زمانی که ابزاری برای بازیابی رکوردها با کد پایتون داشته باشید. این پروژه فایل های JSON را از دایرکتوری data در آرایه ای از اشیاء فرهنگ لغت می خواند. در این مثال برنامه گردان، مجموعه داده تنظیم در ماژول model-tuning/main.py با استفاده از تابع prepare_tuning_dataset() بارگذاری می شود:

def prepare_tuning_dataset():
    # collect data from JSON files
    prompt_data = read_json_files_to_dicts("./data")
    ...

همانطور که قبلا ذکر شد، شما می توانید مجموعه داده را در قالبی مناسب ذخیره کنید، تا زمانی که بتوانید درخواست ها را با پاسخ های مرتبط بازیابی کنید و آنها را در یک رشته متنی که به عنوان رکورد تنظیم استفاده می شود، جمع آوری کنید.

رکوردهای تنظیم را جمع آوری کنید

برای فرآیند تنظیم واقعی، برنامه هر درخواست و پاسخ را در یک رشته با دستورالعمل‌های فوری و محتوای پاسخ جمع‌آوری می‌کند. سپس برنامه تنظیم رشته را برای مصرف توسط مدل نشانه گذاری می کند. می توانید کد مونتاژ یک رکورد تنظیم را در تابع prepare_tuning_dataset() ماژول model-tuning/main.py به صورت زیر مشاهده کنید:

def prepare_tuning_dataset():
    ...
    # prepare data for tuning
    tuning_dataset = []
    template = "{instruction}\n{response}"

    for prompt in prompt_data:
        tuning_dataset.append(template.format(instruction=prompt["prompt"],
                                              response=prompt["response"]))

    return tuning_dataset

این تابع داده ها را به عنوان ورودی می گیرد و با افزودن یک خط شکن بین دستورالعمل و پاسخ، آنها را قالب بندی می کند.

وزن مدل را تولید کنید

هنگامی که داده های تنظیم را در محل خود دارید و بارگذاری می کنید، می توانید برنامه تنظیم را اجرا کنید. فرآیند تنظیم برای این برنامه مثال از کتابخانه Keras NLP برای تنظیم مدل با یک تطبیق رتبه پایین یا تکنیک LoRA برای تولید وزن‌های مدل جدید استفاده می‌کند. در مقایسه با تنظیم دقیق کامل، استفاده از LoRA به طور قابل توجهی در حافظه کارآمدتر است زیرا تغییرات وزن مدل را تقریب می‌کند. سپس می توانید این وزن های تقریبی را روی وزن های مدل موجود قرار دهید تا رفتار مدل را تغییر دهید.

برای انجام اجرای کوک و محاسبه وزن های جدید:

  1. در یک پنجره ترمینال، به دایرکتوری model-tuning/ بروید.

    cd business-email-assistant/model-tuning/
    
  2. فرآیند تنظیم را با استفاده از اسکریپت tune_model اجرا کنید:

    ./tune_model.sh
    

فرآیند تنظیم بسته به منابع محاسباتی موجود شما چندین دقیقه طول می کشد. وقتی با موفقیت کامل شد، برنامه تنظیم فایل‌های وزنی *.h5 جدید را در پوشه model-tuning/weights با فرمت زیر می‌نویسد:

gemma2-2b_inquiry_tuned_4_epoch##.lora.h5

عیب یابی

اگر تنظیم با موفقیت کامل نشد، دو دلیل محتمل وجود دارد:

  • کمبود حافظه یا منابع تمام شده : این خطاها زمانی رخ می دهند که فرآیند تنظیم، حافظه ای را درخواست می کند که از حافظه GPU یا حافظه CPU موجود بیشتر باشد. اطمینان حاصل کنید که در حین اجرای فرآیند تنظیم، برنامه وب را اجرا نمی کنید. اگر روی دستگاهی با 16 گیگابایت حافظه GPU تنظیم می‌کنید، مطمئن شوید که token_limit روی 256 و batch_size روی 1 تنظیم شده است.
  • درایورهای GPU نصب نشده یا ناسازگار با JAX : فرآیند چرخش مستلزم آن است که دستگاه محاسباتی دارای درایورهای سخت افزاری نصب شده باشد که با نسخه کتابخانه های JAX سازگار باشد. برای جزئیات بیشتر، به مستندات نصب JAX مراجعه کنید.

استقرار مدل تنظیم شده

فرآیند تنظیم وزن های متعددی را بر اساس داده های تنظیم و تعداد کل دوره های تنظیم شده در برنامه تنظیم ایجاد می کند. به طور پیش فرض، برنامه تنظیم 3 فایل وزن مدل، یکی برای هر دوره تنظیم تولید می کند. هر دوره تنظیم پی در پی وزنه هایی تولید می کند که نتایج داده های تنظیم را با دقت بیشتری بازتولید می کند. شما می توانید نرخ های دقت برای هر دوره را در خروجی ترمینال فرآیند تنظیم به شرح زیر مشاهده کنید:

...
8/8 ━━━━━━━━━━━━━━━━━━━━ 121s 195ms/step - loss: 0.5432 - sparse_categorical_accuracy: 0.5982
Epoch 2/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 194ms/step - loss: 0.3320 - sparse_categorical_accuracy: 0.6966
Epoch 3/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - loss: 0.2135 - sparse_categorical_accuracy: 0.7848

در حالی که می‌خواهید میزان دقت نسبتاً بالا باشد، در حدود 0.80، نمی‌خواهید این نرخ خیلی بالا یا بسیار نزدیک به 1.00 باشد، زیرا این بدان معناست که وزن‌ها به بیش از حد برازش داده‌های تنظیم نزدیک شده‌اند. هنگامی که این اتفاق می افتد، مدل در درخواست هایی که به طور قابل توجهی متفاوت از نمونه های تنظیم هستند، عملکرد خوبی ندارد. به‌طور پیش‌فرض، اسکریپت استقرار وزن‌های دوره 3 را انتخاب می‌کند، که معمولاً دارای نرخ دقت حدود 0.80 هستند.

برای استقرار وزن های تولید شده در برنامه وب:

  1. در یک پنجره ترمینال، به دایرکتوری model-tuning بروید:

    cd business-email-assistant/model-tuning/
    
  2. فرآیند تنظیم را با استفاده از اسکریپت deploy_weights اجرا کنید:

    ./deploy_weights.sh
    

پس از اجرای این اسکریپت، باید یک فایل *.h5 جدید در دایرکتوری email-processing-webapp/weights/ مشاهده کنید.

مدل جدید را تست کنید

هنگامی که وزنه های جدید را در برنامه قرار دادید، وقت آن است که مدل جدید تنظیم شده را امتحان کنید. می توانید این کار را با اجرای مجدد برنامه وب و ایجاد پاسخ انجام دهید.

برای اجرا و تست پروژه:

  1. در یک پنجره ترمینال، به دایرکتوری email-processing-webapp بروید:

    cd business-email-assistant/email-processing-webapp/
    
  2. برنامه را با استفاده از اسکریپت run_app اجرا کنید:

    ./run_app.sh
    
  3. پس از راه‌اندازی برنامه وب، کد برنامه یک URL را فهرست می‌کند که می‌توانید آن را مرور و آزمایش کنید، معمولاً این آدرس عبارت است از:

    http://127.0.0.1:5000/
    
  4. در رابط وب، دکمه دریافت داده را در زیر اولین فیلد ورودی فشار دهید تا پاسخی از مدل ایجاد شود.

شما اکنون یک مدل Gemma را در یک برنامه تنظیم و مستقر کرده اید! برنامه را آزمایش کنید و سعی کنید محدودیت های قابلیت تولید مدل تنظیم شده را برای کار خود تعیین کنید. اگر سناریوهایی پیدا کردید که مدل عملکرد خوبی ندارد، با افزودن درخواست و ارائه یک پاسخ ایده‌آل، برخی از آن درخواست‌ها را به فهرست داده‌های نمونه تنظیمی خود اضافه کنید. سپس فرآیند تنظیم را دوباره اجرا کنید، وزنه های جدید را مجدداً مستقر کنید و خروجی را آزمایش کنید.

منابع اضافی

برای اطلاعات بیشتر در مورد این پروژه، به مخزن کد کتاب آشپزی Gemma مراجعه کنید. اگر برای ساختن برنامه به کمک نیاز دارید یا به دنبال همکاری با توسعه دهندگان دیگر هستید، سرور Google Developers Community Discord را بررسی کنید. برای پروژه‌های Build with Google AI، لیست پخش ویدیو را بررسی کنید.