Tạo trợ lý AI cho email doanh nghiệp bằng Gemma

Xử lý các câu hỏi của khách hàng, bao gồm cả email, là một phần cần thiết khi chạy nhiều doanh nghiệp nhưng có thể nhanh chóng gây choáng ngợp. Với một chút nỗ lực, Các mô hình trí tuệ nhân tạo (AI) như Gemma có thể giúp công việc này trở nên dễ dàng hơn.

Mỗi doanh nghiệp đều có cách xử lý các yêu cầu như email theo cách riêng. Vì vậy, điều quan trọng là bạn phải có thể điều chỉnh các công nghệ như AI tạo sinh cho phù hợp với nhu cầu của doanh nghiệp. Dự án này giải quyết vấn đề cụ thể về việc trích xuất thông tin đơn đặt hàng từ email đến một tiệm bánh thành dữ liệu có cấu trúc, nhờ đó có thể nhanh chóng thêm thông tin này vào hệ thống xử lý đơn đặt hàng. Dùng từ 10 đến 20 ví dụ về các câu hỏi và đầu ra mong muốn, bạn có thể tinh chỉnh mô hình Gemma để xử lý email từ khách hàng, giúp bạn phản hồi nhanh chóng và tích hợp với các hệ thống doanh nghiệp hiện tại của bạn. Dự án này được xây dựng dưới dạng mẫu ứng dụng AI mà bạn có thể mở rộng và điều chỉnh để nhận giá trị từ các mô hình Gemma cho doanh nghiệp của mình.

Để xem video tổng quan về dự án và cách mở rộng dự án, bao gồm cả thông tin chi tiết từ những người đã xây dựng dự án, hãy xem video Tạo Trợ lý AI cho email doanh nghiệp bằng công nghệ AI của Google. Bạn cũng có thể xem lại mã cho dự án này trong Kho lưu trữ mã của Gemma Cookbook. Nếu không, bạn có thể bắt đầu mở rộng dự án bằng những cách sau hướng dẫn.

Tổng quan

Hướng dẫn này sẽ chỉ cho bạn cách thiết lập, chạy và mở rộng doanh nghiệp ứng dụng trợ lý email được xây dựng bằng Gemma, Python và Flask. Dự án cung cấp giao diện người dùng web cơ bản mà bạn có thể sửa đổi cho phù hợp với nhu cầu của mình. Ứng dụng này được xây dựng để trích xuất dữ liệu từ email của khách hàng vào một cấu trúc cho một tiệm bánh hư cấu. Bạn có thể sử dụng mẫu ứng dụng này cho mọi tác vụ kinh doanh sử dụng dữ liệu đầu vào và đầu ra văn bản.

Ảnh chụp màn hình giao diện người dùng của ứng dụng web

Hình 1. Giao diện người dùng của dự án để xử lý các yêu cầu qua email về bánh mì

Yêu cầu về phần cứng

Chạy quá trình chỉnh này trên máy tính có bộ xử lý đồ hoạ (GPU) hoặc bộ xử lý Tensor (TPU) và bộ nhớ GPU hoặc TPU đủ để giữ mô hình hiện có, cùng với dữ liệu điều chỉnh. Để chạy cấu hình điều chỉnh trong bạn sẽ cần khoảng 16 GB bộ nhớ GPU, tương đương với dung lượng bộ nhớ thông thường RAM và dung lượng ổ đĩa tối thiểu là 50 GB.

Bạn có thể chạy phần điều chỉnh mô hình Gemma của hướng dẫn này bằng cách sử dụng môi trường Colab với thời gian chạy GPU T4. Nếu bạn đang xây dựng dự án này trên Google Cloud Phiên bản máy ảo, định cấu hình thực thể theo các yêu cầu sau:

  • Phần cứng GPU: Cần có NVIDIA T4 để chạy dự án này (NVIDIA cấp 4 trở lên)
  • Hệ điều hành: Chọn tuỳ chọn Deep Learning on Linux (Học sâu trên Linux), cụ thể là Deep Learning VM với CUDA 12.3 M124 được cài đặt sẵn Trình điều khiển phần mềm GPU.
  • Dung lượng ổ đĩa khởi động: Cung cấp ít nhất 50 GB dung lượng ổ đĩa cho dữ liệu, mô hình và phần mềm hỗ trợ.

Thiết lập dự án

Những hướng dẫn này sẽ hướng dẫn bạn cách chuẩn bị dự án này để phát triển và kiểm thử. Các bước thiết lập chung bao gồm cài đặt phần mềm tiên quyết, sao chép dự án từ kho lưu trữ mã, thiết lập một vài môi trường biến, cài đặt thư viện Python và kiểm thử ứng dụng web.

Cài đặt và định cấu hình

Dự án này sử dụng Python 3 và Môi trường ảo (venv) để quản lý các gói và chạy ứng dụng. Các hướng dẫn cài đặt sau dành cho Linux máy chủ lưu trữ.

Cách cài đặt phần mềm cần thiết:

  • Cài đặt Python 3 và gói môi trường ảo venv cho Python:

    sudo apt update
    sudo apt install git pip python3-venv
    

Nhân bản dự án

Tải mã dự án xuống máy tính dùng để phát triển. Bạn cần git phần mềm kiểm soát nguồn để truy xuất mã nguồn dự án.

Cách tải mã nguồn dự án xuống:

  1. Sao chép kho lưu trữ git bằng lệnh sau:

    git clone https://github.com/google-gemini/gemma-cookbook.git
    
  2. Bạn có thể định cấu hình kho lưu trữ git cục bộ để sử dụng quy trình thanh toán thưa thớt, vì vậy, bạn chỉ có các tệp cho dự án:

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

Cài đặt thư viện Python

Cài đặt thư viện Python bằng môi trường ảo Python venv đã kích hoạt để quản lý các gói và phần phụ thuộc Python. Hãy nhớ bật Môi trường ảo Python trước khi cài đặt thư viện Python bằng pip trình cài đặt. Để biết thêm thông tin về cách sử dụng môi trường ảo Python, hãy xem Tài liệu về Python venv.

Cách cài đặt các thư viện Python:

  1. Trong cửa sổ dòng lệnh, hãy chuyển đến thư mục business-email-assistant:

    cd Demos/business-email-assistant/
    
  2. Định cấu hình và kích hoạt môi trường ảo Python (venv) cho dự án này:

    python3 -m venv venv
    source venv/bin/activate
    
  3. Cài đặt các thư viện Python bắt buộc cho dự án này bằng tập lệnh setup_python:

    ./setup_python.sh
    

Đặt các biến môi trường

Dự án này yêu cầu một vài biến môi trường để chạy, bao gồm tên người dùng Kaggle và mã thông báo API Kaggle. Bạn phải có tài khoản Kaggle và yêu cầu quyền truy cập vào các mô hình Gemma để có thể tải các mô hình đó xuống. Để dự án này, bạn sẽ thêm mã thông báo Tên người dùng Kaggle và mã thông báo API Kaggle vào hai .env các tệp được đọc bởi ứng dụng web và chương trình điều chỉnh, .

Cách đặt biến môi trường:

  1. Lấy tên người dùng Kaggle và khoá mã thông báo bằng cách làm theo hướng dẫn trong tài liệu Kaggle.
  2. Truy cập vào mô hình Gemma bằng cách làm theo hướng dẫn Truy cập vào Gemma trên trang Thiết lập Gemma.
  3. Tạo các tệp biến môi trường cho dự án bằng cách tạo một Tệp văn bản .env tại mỗi vị trí sau trong bản sao của dự án:
    email-processing-webapp/.env
    model-tuning/.env
    
  4. Sau khi tạo tệp văn bản .env, hãy thêm các chế độ cài đặt sau vào cả hai tệp:

    KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE>
    KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
    

Chạy và kiểm thử ứng dụng

Sau khi hoàn tất quá trình cài đặt và định cấu hình dự án, hãy chạy ứng dụng web để xác nhận rằng bạn đã định cấu hình đúng cách. Bạn nên hãy làm việc này như một bước kiểm tra cơ sở trước khi chỉnh sửa dự án để sử dụng.

Cách chạy và kiểm thử dự án:

  1. Trong cửa sổ dòng lệnh, hãy chuyển đến thư mục email-processing-webapp:

    cd business-email-assistant/email-processing-webapp/
    
  2. Chạy ứng dụng bằng tập lệnh run_app:

    ./run_app.sh
    
  3. Sau khi khởi động ứng dụng web, mã chương trình sẽ liệt kê một URL mà bạn có thể duyệt xem và kiểm thử. Thông thường, địa chỉ này là:

    http://127.0.0.1:5000/
    
  4. Trong giao diện web, nhấn nút Lấy dữ liệu bên dưới phương thức nhập đầu tiên để tạo phản hồi từ mô hình.

Phản hồi đầu tiên từ mô hình sau khi bạn chạy ứng dụng sẽ mất nhiều thời gian hơn vì mô hình này phải hoàn tất các bước khởi chạy trong lần chạy đầu tiên. Các yêu cầu và tạo lời nhắc tiếp theo trên một ứng dụng web đang chạy sẽ hoàn tất trong thời gian ngắn hơn.

Mở rộng ứng dụng

Sau khi chạy ứng dụng, bạn có thể mở rộng ứng dụng bằng cách sửa đổi người dùng giao diện và logic kinh doanh để nó hoạt động cho các tác vụ liên quan đến bạn hoặc doanh nghiệp của bạn. Bạn cũng có thể sửa đổi hành vi của mô hình Gemma bằng cách sử dụng mã ứng dụng, bằng cách thay đổi các thành phần của lời nhắc mà ứng dụng gửi đến mô hình AI tạo sinh.

Ứng dụng cung cấp lệnh cho mô hình cùng với dữ liệu đầu vào từ người dùng lời nhắc hoàn chỉnh về mô hình. Bạn có thể sửa đổi các hướng dẫn này để thay đổi hành vi của mô hình, chẳng hạn như chỉ định tên của các tham số và cấu trúc của JSON cần tạo. Một cách đơn giản hơn để thay đổi hành vi của mô hình là cung cấp thêm hướng dẫn hoặc hướng dẫn cho phản hồi của mô hình, chẳng hạn như chỉ định rằng các thư trả lời được tạo không được chứa bất kỳ định dạng Markdown nào.

Cách sửa đổi hướng dẫn cho câu lệnh:

  1. Trong dự án phát triển, hãy mở tệp mã business-email-assistant/email-processing-webapp/app.py.
  2. Trong mã app.py, hãy thêm các hướng dẫn bổ sung vào hàm 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"""
    

Ví dụ này thêm cụm từ "without additional markdown formatting" ("không có định dạng markdown bổ sung") vào hướng dẫn.

Việc cung cấp thêm hướng dẫn về lời nhắc có thể ảnh hưởng mạnh mẽ đến kết quả được tạo và tốn ít công sức hơn đáng kể để triển khai. Bạn nên thử cách này để xem bạn có thể nhận được hành vi mong muốn từ mô hình hay không. Tuy nhiên, việc sử dụng hướng dẫn kịp thời để sửa đổi hành vi của mô hình Gemma sẽ của Google. Cụ thể, giới hạn mã thông báo đầu vào chung của mô hình, tức là 8.192 token cho Gemma 2, yêu cầu bạn cân bằng các hướng dẫn nhắc chi tiết dữ liệu mới mà bạn cung cấp sao cho không vượt quá giới hạn đó.

Điều chỉnh mô hình

Bạn nên điều chỉnh mô hình Gemma để mô hình này phản hồi một cách đáng tin cậy hơn cho các tác vụ cụ thể. Cụ thể, nếu muốn mô hình để tạo JSON với một cấu trúc cụ thể, bao gồm cả tên cụ thể tham số, bạn nên xem xét điều chỉnh mô hình cho hành vi đó. Tuỳ thuộc vào nhiệm vụ mà bạn muốn mô hình hoàn thành, bạn có thể đạt được chức năng cơ bản với 10 đến 20 ví dụ. Phần này của hướng dẫn giải thích cách thiết lập và chạy tính năng tinh chỉnh trên mô hình Gemma cho một nhiệm vụ cụ thể.

Hướng dẫn sau đây giải thích cách thực hiện thao tác tinh chỉnh trên môi trường máy ảo. Tuy nhiên, bạn cũng có thể thực hiện thao tác tinh chỉnh này bằng cách sử dụng sổ tay Colab liên kết cho dự án này.

Yêu cầu về phần cứng

Các yêu cầu về điện toán để tinh chỉnh cũng giống như các yêu cầu về phần cứng cho phần còn lại của dự án. Bạn có thể chạy thao tác điều chỉnh trong môi trường Colab với thời gian chạy GPU T4 nếu bạn giới hạn mã thông báo đầu vào là 256 và kích thước lô là 1.

Chuẩn bị dữ liệu

Trước khi bắt đầu điều chỉnh mô hình Gemma, bạn phải chuẩn bị dữ liệu để điều chỉnh. Khi điều chỉnh một mô hình cho một tác vụ cụ thể, bạn cần có một tập hợp các ví dụ về yêu cầu và phản hồi. Những ví dụ này phải hiển thị nội dung yêu cầu, mà không có bất kỳ hướng dẫn và văn bản phản hồi dự kiến. Để bắt đầu, bạn nên chuẩn bị với khoảng 10 ví dụ. Các ví dụ này phải thể hiện đầy đủ các yêu cầu và phản hồi lý tưởng. Hãy đảm bảo rằng các yêu cầu và các câu trả lời không lặp lại, vì điều đó có thể khiến các câu trả lời của mô hình lặp lại và không điều chỉnh cho phù hợp với các thay đổi trong yêu cầu. Nếu bạn đang điều chỉnh mô hình để tạo định dạng dữ liệu có cấu trúc, hãy đảm bảo rằng tất cả các phản hồi được cung cấp đều tuân thủ nghiêm ngặt định dạng đầu ra dữ liệu mà bạn muốn. Bảng sau đây cho thấy một vài bản ghi mẫu từ tập dữ liệu của ví dụ về mã này:

Yêu cầu Phản hồi
Xin chào Indian Bakery Central,\nBạn có sẵn 10 penda và 30 bundi ladoos không? Ngoài ra, bạn có bán bánh phủ kem vani và bánh có vị sô cô la không? Tôi đang tìm cỡ 6 inch { &quot;type&quot;: &quot;inquiry&quot;, "mục": [ { &quot;name&quot;: &quot;pendas&quot;, "quantity": 10 }, { &quot;name&quot;: &quot;bundi ladoos&quot;, "quantity": 30 }, { "name": "bánh", &quot;filling&quot;: null, "frosting": "vanilla", "hương vị": "sô cô la", "size": "6 inch" } ] }
Tôi thấy doanh nghiệp của bạn trên Google Maps. Bạn có bán jellabi và gulab jamun không? { &quot;type&quot;: &quot;inquiry&quot;, "mục": [ { &quot;name&quot;: &quot;jellabi&quot;, &quot;quantity&quot;: null }, { &quot;name&quot;: &quot;gulab jamun&quot;, &quot;quantity&quot;: null } ] }

Bảng 1. Danh sách một phần của tập dữ liệu điều chỉnh cho trình trích xuất dữ liệu email của cửa hàng bánh.

Định dạng dữ liệu và quá trình tải

Bạn có thể lưu trữ dữ liệu điều chỉnh ở bất kỳ định dạng nào thuận tiện, bao gồm bản ghi cơ sở dữ liệu, tệp JSON, CSV hoặc tệp văn bản thuần tuý, miễn là bạn có nghĩa là truy xuất các bản ghi có mã Python. Dự án này đọc tệp JSON từ một thư mục data vào một mảng các đối tượng từ điển. Trong chương trình rẽ ví dụ này, tập dữ liệu điều chỉnh được tải trong mô-đun model-tuning/main.py bằng hàm prepare_tuning_dataset():

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

Như đã đề cập trước đó, bạn có thể lưu trữ tập dữ liệu ở định dạng thuận tiện, miễn là bạn có thể truy xuất các yêu cầu bằng các phản hồi liên quan và tập hợp các yêu cầu đó thành một chuỗi văn bản được dùng làm bản ghi điều chỉnh.

Tập hợp bản ghi điều chỉnh

Đối với quy trình điều chỉnh thực tế, chương trình sẽ tập hợp từng yêu cầu và phản hồi thành một chuỗi duy nhất với hướng dẫn lời nhắc và nội dung của phản hồi. Sau đó, chương trình điều chỉnh mã hoá chuỗi để mô hình. Bạn có thể xem mã tập hợp một bản ghi âm trong Hàm prepare_tuning_dataset() của mô-đun model-tuning/main.py, như sau:

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

Hàm này lấy dữ liệu làm dữ liệu đầu vào và định dạng dữ liệu đó bằng cách thêm một dấu ngắt dòng giữa hướng dẫn và phản hồi.

Tạo trọng số mô hình

Sau khi có dữ liệu dò được tạo và tải, bạn có thể chạy tính năng dò . Quá trình điều chỉnh cho ứng dụng mẫu này sử dụng Keras NLP để điều chỉnh mô hình bằng Điều chỉnh cho phù hợp với thứ hạng thấp hay kỹ thuật LoRA, để tạo trọng số mô hình mới. So với tinh chỉnh độ chính xác đầy đủ, việc sử dụng LoRA tiết kiệm bộ nhớ hơn đáng kể vì công cụ này ước chừng các thay đổi đối với trọng số mô hình. Sau đó, bạn có thể phủ các trọng số gần đúng này lên để lập mô hình trọng số để thay đổi hành vi của mô hình.

Để thực hiện lần chạy điều chỉnh và tính trọng số mới:

  1. Trong cửa sổ dòng lệnh, hãy chuyển đến thư mục model-tuning/.

    cd business-email-assistant/model-tuning/
    
  2. Chạy quy trình điều chỉnh bằng cách sử dụng tập lệnh tune_model:

    ./tune_model.sh
    

Quá trình điều chỉnh sẽ mất vài phút tuỳ thuộc vào điện toán hiện có của bạn của chúng tôi. Khi hoàn tất, chương trình điều chỉnh sẽ ghi các tệp trọng số *.h5 mới vào thư mục model-tuning/weights theo định dạng sau:

gemma2-2b_inquiry_tuned_4_epoch##.lora.h5

Khắc phục sự cố

Nếu quá trình điều chỉnh không hoàn tất thành công, thì có thể là do một trong hai lý do sau:

  • Hết bộ nhớ hoặc hết tài nguyên: Những lỗi này xảy ra khi quá trình điều chỉnh yêu cầu bộ nhớ vượt quá bộ nhớ GPU hoặc bộ nhớ CPU hiện có. Đảm bảo bạn không chạy ứng dụng web trong khi quá trình điều chỉnh đang chạy. Nếu bạn đang dò trên một thiết bị có bộ nhớ GPU 16GB, đảm bảo bạn đã đặt token_limit thành 256batch_size được đặt thành 1.
  • Trình điều khiển GPU chưa được cài đặt hoặc không tương thích với JAX: Quá trình tiện thiết bị điện toán phải cài đặt trình điều khiển phần cứng tương thích với phiên bản của Thư viện JAX. Để biết thêm thông tin, hãy xem tài liệu về cách cài đặt JAX.

Triển khai mô hình đã được điều chỉnh

Quá trình điều chỉnh tạo ra nhiều trọng số dựa trên dữ liệu điều chỉnh và tổng số thời gian bắt đầu của hệ thống được đặt trong ứng dụng điều chỉnh. Theo mặc định, việc điều chỉnh chương trình sẽ tạo 3 tệp trọng số mô hình, mỗi tệp cho mỗi thời gian bắt đầu của hệ thống. Một khoảng thời gian điều chỉnh liên tiếp tạo ra các trọng số tái tạo chính xác hơn kết quả của dữ liệu điều chỉnh. Bạn có thể xem tỷ lệ chính xác cho mỗi epoch trong đầu ra của quá trình điều chỉnh như sau:

...
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

Mặc dù bạn muốn tỷ lệ chính xác tương đối cao, khoảng 0,80, bạn không nên muốn tỷ lệ quá cao, hoặc gần 1,00, vì điều đó có nghĩa là các trọng số đã gần đạt đến mức quá phù hợp với dữ liệu điều chỉnh. Khi điều đó xảy ra, không hoạt động tốt trên các yêu cầu khác biệt đáng kể so với các ví dụ về cách điều chỉnh. Theo mặc định, tập lệnh triển khai sẽ chọn các trọng số của epoch 3, thường có tỷ lệ chính xác khoảng 0,80.

Cách triển khai trọng số đã tạo cho ứng dụng web:

  1. Trong cửa sổ dòng lệnh, hãy chuyển đến thư mục model-tuning:

    cd business-email-assistant/model-tuning/
    
  2. Chạy quy trình điều chỉnh bằng tập lệnh deploy_weights:

    ./deploy_weights.sh
    

Sau khi chạy tập lệnh này, bạn sẽ thấy một tệp *.h5 mới trong thư mục email-processing-webapp/weights/.

Kiểm thử mô hình mới

Sau khi triển khai các trọng số mới cho ứng dụng, đã đến lúc thử mô hình mới được điều chỉnh. Bạn có thể thực hiện việc này bằng cách chạy lại ứng dụng web và tạo phản hồi.

Cách chạy và kiểm thử dự án:

  1. Trong cửa sổ dòng lệnh, hãy chuyển đến thư mục email-processing-webapp:

    cd business-email-assistant/email-processing-webapp/
    
  2. Chạy ứng dụng bằng tập lệnh run_app:

    ./run_app.sh
    
  3. Sau khi khởi động ứng dụng web, đoạn mã chương trình sẽ liệt kê một URL mà tại đó bạn có thể duyệt qua và kiểm tra, thông thường, địa chỉ này là:

    http://127.0.0.1:5000/
    
  4. Trong giao diện web, hãy nhấn vào nút Get data (Nhận dữ liệu) bên dưới trường đầu vào đầu tiên để tạo phản hồi từ mô hình.

Giờ đây, bạn đã điều chỉnh và triển khai mô hình Gemma trong một ứng dụng! Thử nghiệm với ứng dụng và cố gắng xác định giới hạn của khả năng tạo mô hình đã điều chỉnh cho tác vụ của bạn. Nếu bạn phát hiện các trường hợp mà mô hình không hoạt động hãy cân nhắc việc thêm một số yêu cầu đó vào danh sách dữ liệu ví dụ về cách điều chỉnh bằng cách thêm yêu cầu và đưa ra phản hồi lý tưởng. Sau đó điều chỉnh lại trong quá trình xử lý, triển khai lại trọng số mới và kiểm thử kết quả.

Tài nguyên khác

Để biết thêm thông tin về dự án này, hãy xem kho lưu trữ mã Gemma Cookbook. Nếu bạn cần trợ giúp về cách xây dựng ứng dụng hoặc muốn cộng tác với các nhà phát triển khác, hãy xem Cộng đồng nhà phát triển của Google trên Discord máy chủ. Để biết thêm các dự án khác trong phần Xây dựng với Google AI, hãy tham khảo danh sách phát video.