Gemma를 통해 비즈니스 이메일 AI 어시스턴트 빌드

이메일을 포함한 고객 문의를 처리하는 것은 많은 비즈니스를 운영하는 데 필요한 부분이지만 금세 처리하기 어려워질 수 있습니다. Gemma와 같은 인공지능(AI) 모델을 사용하면 이러한 작업을 더 쉽게 처리할 수 있습니다.

모든 비즈니스는 이메일과 같은 문의를 조금씩 다르게 처리하므로 생성형 AI와 같은 기술을 비즈니스 요구사항에 맞게 조정할 수 있어야 합니다. 이 프로젝트는 주문 추출과 관련된 구체적인 문제를 해결합니다. 구조화된 데이터로 변환하므로 쉽게 이해할 수 있습니다. 주문 처리 시스템에 추가됩니다. 질의응답 예시 10~20개를 사용하여 Gemma 모델을 조정하여 이메일 주소로부터 고객을 지원하고, 신속하게 대응하고, 기존 비즈니스 시스템과 통합할 수 있습니다. 이 프로젝트는 비즈니스를 위해 Gemma 모델에서 가치를 얻기 위해 확장하고 조정할 수 있는 AI 애플리케이션 패턴으로 빌드됩니다.

프로젝트에 대한 개요와 빌드한 사람의 통계를 비롯한 확장 방법을 확인하려면 비즈니스 이메일 AI 어시스턴트 Build with Google AI 동영상을 시청하세요. 다음 위치에서 이 프로젝트의 코드를 검토할 수도 있습니다. Gemma Cookbook 코드 저장소 아니면 다음을 사용하여 프로젝트 확장을 시작할 수 있습니다. 참조하세요.

개요

이 튜토리얼에서는 Gemma, Python, Flask로 빌드된 비즈니스 이메일 어시스턴트 애플리케이션을 설정, 실행, 확장하는 방법을 안내합니다. 이 프로젝트는 필요에 맞게 수정할 수 있는 기본 웹 사용자 인터페이스를 제공합니다. 이 애플리케이션은 고객 이메일에서 가상의 빵집 구조로 데이터를 추출하도록 빌드되었습니다. 텍스트 입력과 텍스트 출력을 사용하는 모든 비즈니스 작업에 이 애플리케이션 패턴을 사용할 수 있습니다.

웹 앱 사용자 인터페이스 스크린샷

그림 1. 베이커리 이메일 문의를 처리하기 위한 프로젝트 사용자 인터페이스

하드웨어 요구사항

그래픽 처리 장치(GPU) 또는 Tensor Processing Unit(TPU)과 기존 모델과 튜닝 데이터를 저장할 수 있는 충분한 GPU 또는 TPU 메모리가 있는 컴퓨터에서 이 튜닝 프로세스를 실행합니다. 이 프로젝트에서 조정 구성을 실행하려면 약 16GB의 GPU 메모리, 거의 동일한 양의 일반 RAM, 최소 50GB의 디스크 공간이 필요합니다.

Colab T4 GPU 런타임 환경을 제공합니다. 이 프로젝트를 Google Cloud VM 인스턴스 다음 요구사항에 따라 인스턴스를 구성합니다.

  • GPU 하드웨어: 이 프로젝트를 실행하려면 NVIDIA T4가 필요합니다 (NVIDIA L4 이상 권장)
  • 운영체제: Linux의 딥 러닝 옵션을 선택합니다. 특히 사전 설치된 CUDA 12.3 M124가 포함된 딥 러닝 VM GPU 소프트웨어 드라이버
  • 부팅 디스크 크기: 데이터, 모델, 지원 소프트웨어를 위한 디스크 공간을 50GB 이상으로 프로비저닝합니다.

프로젝트 설정

다음 안내는 이 프로젝트를 개발용으로 준비하는 과정을 안내합니다. 자동화합니다 일반 설정 단계에는 기본 요건 소프트웨어 설치, 코드 저장소에서 프로젝트 클론, 몇 가지 환경 설정 변수, Python 라이브러리 설치, 웹 애플리케이션 테스트가 포함됩니다.

설치 및 구성

이 프로젝트는 Python 3 및 가상 환경 (venv)을 사용하여 패키지를 관리합니다. 애플리케이션을 실행할 수 있습니다 다음 설치 안내는 Linux 호스트 머신을 실행합니다.

필수 소프트웨어를 설치하려면 다음 단계를 따르세요.

  • Python 3와 Python용 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 Demos/business-email-assistant/
    git sparse-checkout init --cone
    

Python 라이브러리 설치

venv Python 가상 환경에서 Python 라이브러리 설치 Python 패키지 및 종속 항목을 관리하도록 활성화되었습니다. 먼저 pip로 Python 라이브러리를 설치하기 의 Python 가상 환경 설치합니다. Python 가상 환경 사용에 관한 자세한 내용은 Python venv 문서를 참고하세요.

Python 라이브러리를 설치하는 방법은 다음과 같습니다.

  1. 터미널 창에서 business-email-assistant 디렉터리로 이동합니다.

    cd Demos/business-email-assistant/
    
  2. 이 프로젝트의 Python 가상 환경 (venv)을 구성하고 활성화합니다.

    python3 -m venv venv
    source venv/bin/activate
    
  3. setup_python 스크립트를 사용하여 이 프로젝트에 필요한 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. 웹 인터페이스에서 첫 번째 입력 아래의 데이터 가져오기 버튼을 누릅니다. 필드를 사용하여 모델에서 응답을 생성합니다.

애플리케이션을 실행한 후 모델의 첫 번째 응답이 오래 걸림 1세대 실행에서 초기화 단계를 완료해야 하기 때문입니다. 이미 실행 중인 웹 애플리케이션에서 후속 프롬프트 요청 및 생성 더 빨리 완료할 수 있습니다

애플리케이션 확장

애플리케이션을 실행한 후에는 사용자를 수정하여 애플리케이션을 확장할 수 있습니다. 사용자와 관련된 작업에 사용할 수 있는 인터페이스 및 비즈니스 로직 제공할 수 있습니다. Gemma 모델의 동작을 수정하려면 프롬프트 구성 요소를 변경하여 애플리케이션 코드를 생성형 AI 모델입니다.

애플리케이션은 사용자의 입력 데이터와 함께 모델에 지침을 제공하여 모델의 전체 프롬프트를 완성합니다. 이러한 안내는 매개변수의 이름을 지정하는 등 모델의 동작을 변경할 수 있습니다. 생성할 JSON의 구조와 구조를 정의하겠습니다 애플리케이션의 동작을 변경하는 간단한 방법은 모델의 작동 원리에 대한 추가 지침이나 지침을 생성된 답장에 마크다운 형식 지정

프롬프트 안내를 수정하려면 다음 안내를 따르세요.

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

이 예에서는 '추가 마크다운 형식 없음'이라는 문구를 추가합니다. 대상 참조하세요.

프롬프트 안내를 추가하면 생성된 출력물에 큰 영향을 미칠 수 있으며 구현하는 데 훨씬 적은 노력이 듭니다. 먼저 이 메서드를 사용하여 모델에서 원하는 동작을 가져올 수 있는지 확인해야 합니다. 그러나 프롬프트 지침을 사용하여 Gemma 모델의 동작을 수정하는 것은 제한하기 때문입니다. 특히 모델의 전체 입력 토큰 한도(Gemma 2의 경우 8,192개 토큰)를 준수하려면 자세한 프롬프트 안내와 제공하는 새 데이터의 크기 간에 균형을 맞춰야 합니다.

모델 조정

Gemma 모델을 미세 조정하는 것은 특정 태스크에 보다 안정적으로 응답할 수 있습니다. 특히 모델이 특정 이름의 매개변수를 포함하여 특정 구조로 JSON을 생성하도록 하려면 해당 동작에 맞게 모델을 조정해야 합니다. 모델이 완료하고자 하는 작업에 따라 기본 모델을 10~20개의 예시가 있는 함수를 살펴보겠습니다 이 섹션에서는 에서는 특정 작업을 위해 Gemma 모델을 설정하고 미세 조정하는 방법을 설명합니다.

다음 지침은 하지만 VM 환경에서는 연결됨 Colab 메모 확인할 수 있습니다

하드웨어 요구사항

미세 조정에 필요한 컴퓨팅 요구사항은 나머지 프로젝트의 하드웨어 요구사항과 동일합니다. 다음과 같은 작업을 할 수 있습니다. T4 GPU 런타임을 사용하여 Colab 환경에서 조정 작업을 실행할 경우 입력 토큰을 256으로, 배치 크기를 1로 제한하면 됩니다.

데이터 준비

Gemma 모델 조정을 시작하기 전에 조정을 위한 데이터를 준비해야 합니다. 특정 작업에 맞게 모델을 조정할 때는 요청 및 응답 예시 집합이 필요합니다. 다음 예는 요청 텍스트를 표시해야 하며 안내, 예상 응답 텍스트가 포함됩니다. 먼저 10개 정도의 예시가 포함된 데이터 세트를 준비해야 합니다. 이러한 예시는 다양한 요청과 이상적인 응답을 나타내야 합니다. 요청 및 모델 대답이 반복되지 않을 수 있기 때문에 요청에 따라 적절하게 조정하지 않는 것이 좋습니다. 만약 구조화된 데이터 형식을 생성하도록 모델을 조정하려면 제공된 모든 원하는 데이터 출력 형식을 엄격하게 준수해야 합니다. 다음 표에는 이 코드 예시의 데이터 세트에 있는 몇 가지 샘플 레코드가 표시됩니다.

요청 응답
인디언 베이커리 센트럴님, 안녕하세요.\n펜다를 10개 가지고 있나요? 30분디 라도스를 가지고 있나요? 바닐라 프로스팅도 판매하고 초콜릿 맛 케이크입니다. 6인치 크기를 찾고 있습니다. { &quot;type&quot;: &quot;inquiry&quot;, "items": [ { &quot;name&quot;: &quot;pendas&quot;, "quantity": 10 }, { &quot;name&quot;: &quot;bundi ladoos&quot;, "quantity": 30 }, { "name": "케이크", &quot;filling&quot;: null, "frosting": "vanilla", "flavor": "초콜릿", "size": "6인치" } ] }
Google 지도에서 고객님의 비즈니스를 찾았습니다. 젤라비나 굴라브를 판매하니 Jamun? { "type": "inquiry", "items": [ { "name": "jellabi", "quantity": null }, { "name": "gulab jamun", "quantity": null } ] }

표 1. 베이커리 이메일 데이터 추출기의 조정 데이터 세트의 일부 목록입니다.

데이터 형식 및 로드

조정 데이터를 JSON 파일, CSV 또는 일반 텍스트 파일에 액세스할 수 있습니다. 이는 Python 코드를 사용하여 레코드를 검색한다는 의미입니다. 이 프로젝트는 JSON 파일을 읽습니다. data 디렉터리에서 사전 객체 배열로 가져올 수 있습니다. 이 예시에서는 prepare_tuning_dataset() 함수를 사용하여 튜닝 데이터 세트를 model-tuning/main.py 모듈에 로드합니다.

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

앞서 언급한 바와 같이 연결된 응답과 함께 요청을 검색하고 이를 조정 레코드로 사용되는 텍스트 문자열로 조합할 수 있다면 편리한 형식으로 데이터 세트를 저장할 수 있습니다.

조정 레코드 조합

실제 조정 프로세스의 경우 프로그램은 각 요청과 응답을 프롬프트 안내와 응답 콘텐츠가 포함된 단일 문자열로 조합합니다. 그러면 조정 프로그램은 있습니다. 다음과 같이 model-tuning/main.py 모듈 prepare_tuning_dataset() 함수에서 튜닝 레코드를 조합하는 코드를 확인할 수 있습니다.

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
    

튜닝 프로세스는 사용 가능한 컴퓨팅 리소스에 따라 몇 분 정도 걸립니다. 완료되면 튜닝 프로그램이 다음 형식으로 model-tuning/weights 디렉터리에 새 *.h5 가중치 파일을 씁니다.

gemma2-2b_inquiry_tuned_4_epoch##.lora.h5

문제 해결

조정이 성공적으로 완료되지 않는 경우 다음과 같은 두 가지 이유가 있을 수 있습니다.

  • 메모리 부족 또는 리소스가 소진됨: 이 오류는 조정 프로세스가 사용 가능한 GPU 메모리 또는 CPU를 초과하는 메모리를 요청함 사용할 수 있습니다 조정 프로세스가 실행되는 동안 웹 애플리케이션을 실행하지 않아야 합니다. GPU 메모리가 16GB인 기기에서 조정하는 경우 token_limit256batch_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에 가깝게 설정하는 것이 좋습니다. 왜냐하면 조정 데이터의 과적합에 가까워졌습니다. 이 경우 모델이 현재 데이터와 크게 다른 요청에서 살펴보겠습니다 기본적으로 배포 스크립트는 일반적으로 정확도 비율이 약 0.80인 에포크 3 가중치를 선택합니다.

생성된 가중치를 웹 애플리케이션에 배포하려면 다음 단계를 따르세요.

  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 Cookbook 코드 저장소를 참고하세요. 애플리케이션을 빌드하는 데 도움이 필요하거나 자세한 내용은 Google Developers 커뮤니티 Discord 있습니다. Build with Google AI 프로젝트에 관한 자세한 내용은 동영상 재생목록을 확인하세요.