본문 바로가기
Toy Project/Tinkerbell

ChatGPT,DALL-E, 매일 동화 자동 제작하기

by 쭈대디 2024. 3. 12.
Thinkerbell

 

Stell 상상을 매일 동화(Fairy-tail)로 만들어줄 Fairy 여왕 'Thinkerbell'을 이번 Project 명으로 정했습니다.

DALL-E로 생성한 Fairy 여왕의 모습

 

Project 배경

 

유치원에서 Stella가 미술 시간에 그린 그림을 엮어 동화책을 만들어 왔습니다. 

선생님이 짜깁기해주긴 했는데, 놀라웠던 것은 생각보다 이야기가 흥미진진하게 흘러가고 (심지어 감동 포인트까지)

무엇보다 동화 중간중간 Stella 만의 세계관(?)이 반영되어 있는 부분이 있다는 것이었습니다. 

Stella의 "보석집" 동화

 

요즘 핫한 생성형 AI 서비스인 ChatGPT 를 살짝 활용하면, 선생님이 도와준 것처럼 어떤 이야기도 재밌는 동화가 만들어질 수 있겠다는 생각에 이것저것 검색하다보니 재밌는 응용 사례가 상당히 많이 있었습니다. 

그 중 AWS Blog에 소개된 괜찮은 Architecture가 있어서 재미삼아 시작하게 되었습니다. 

 

ChatGPT 및 DALL-E를 활용한 이벤트 기반 서버리스 동화 생성 애플리케이션 구현 | Amazon Web Services

AWS 서버리스 서비스와 아키텍처를 활용하여 떠오르는 생성형 AI (Generative AI) 서비스인 ChatGPT 및 DALL-E API를 사용하는 애플리케이션을 만들어봅니다. 이 글에서는 ChatGPT에 대한 프롬프트로 미리 결

aws.amazon.com

 

Thinkerbell Project의 기본 컨셉은

  1. Stella와 함께 대략적인 상상의 동화를 만들어보고
  2. ChatGPT로 가다듬은 뒤
  3. 매일 잠들기 전에 읽어줄 동화를 한편씩 받도록 하는 것 입니다. 

동화를 받게되는 결과물의 형태는 아직 미정입니다. 

 

기본 아키텍쳐

 

AWS Blog에서 제안하고 있는 ChatGPT/DALL-E  활용 기본 아키텍쳐로 구성합니다. 

AWS 제공 기본 Architecture

 

위 Architecture는 최종 결과물인 동화 내용을 Email로 받고, S3에 내용을 TTS 변환한 오디오 파일로 받게 됩니다.

또한 동화 생성은 사용자 개입 없이 ChatGPT가 매일매일 동화 내용의 주요 컨텐츠를 자체 제작합니다.

 

두 가지 부분은 Thinkerbell Project에 따라서 추후 수정하되, 기본 Architecture는 CDK를 활용해서 빠르게 생성합니다. 

 

Thinkerbell 서버 준비

 

  • CDK를 실행할 Thinkerbell 서버는 최소 사양의 AWS EC2 Instance로 준비합니다. 

    EC2 Instance 생성하기

    • AWS 기본 Image [Amazon Linux 2023 AMI 2023.3.20240304.0 x86_64 HVM kernel-6.1]
    • 인스턴스 유형 [t2.large / Volume 50 GiB]
    • 추가 package 설치 [git, docker, nodejs, virtualenv, python, pip] 
      # Nodejs v18.18.2 - 버전 확인 필수
      sudo yum install -y git docker nodejs virtualenv python pip
      sudo systemctl start docker
      sudo systemctl enable docker​
  • OpenAI API Key(https://platform.openai.com/api-keys)를 발급 받은 뒤, 해당 Key를 AWS Secret Manager에 open-api-key 명으로 보안암호를 생성해둡니다. 
    주의. ChatGPT Plus 구독과 API 사용료는 다릅니다.

  • CDK 배포용 코드는 위 Pipeline에 필요한 Stack들을 CloudFormation 통해 한번에 생성합니다. 
    생각보다 수정이 많은 원본 코드 대신 추후 개인화 작업까지 고려하여 별도로 fork (https://github.com/khaneun/aws-serverless-ai-stories) 해둡니다. 특히 원본 Git 코드는 OpenAI API 업데이트 전 API로 구현되어 있어 그대로 실행시 404 에러가 발생합니다. API 업그레이드 및 코드 수정 내용은 https://sinbaram01.tistory.com/7 를 참고하세요
    • Initialize
      git clone https://github.com/khaneun/aws-serverless-ai-stories
      sudo npm run install:all​
    • 동화 link 수신 Email 및 Trigger 실행 시간 설정
      ~/aws-serverless-ai-stories/config.json 수정
      {
        "stage": "stg",
        "email": "XXXXX",
        "bedtimeCron": "cron(15 19 * * ? *)"
      }​
      Crontab 작업 등록 이후 추후 'Amazon Event Bridge > Scheduler > 일정' 메뉴에서 확인/변경 가능합니다.

    • Docker NodeJS Version 변경
      ~/aws-serverless-ai-stories/frontend/Dockerfile 內 Node version 변경
      (Local 설치된 NodeJS 버전과 일치시키되, 14 버전 이상 사용 권장)
      기본 node:14-alpine 설정을 설치 버전(18)에 맞게끔 변경
  • CDK 설정
    AWS 서비스가 익숙치 않으면 다소 복잡할수도 있지만 천천히 AWS 가이드를 따라 CDK를 구성합니다. 
    https://sinbaram01.tistory.com/5
    AWS 가이드 상에는 단순한 단계처럼 보여도 그냥 넘어갔다간 한참 돌고 돌아야하는 부분이 꽤 많아서 가급적 이해하고 넘어가는 것을 권장합니다.  

  • App 배포
    안타깝게도 현재 AWS App Runner를 실행시킬수 있는 Region은 제한되어 있습니다. 
    AWS App Runner 실행 가능한 Region 목록

    처음 배포하면 IAM 역할, Stack 생성, 세부 설정, ... 등등이 한번에 진행되고, 이후론 변경 내용에 대해서만 배포됩니다. 배포 중간에 동화 link의 Subscription 여부를 묻는 Email이 발송되는데, 반드시 Subscription 확인해야 동화를 확인이 용이합니다.  
    # 주의 cdk bootstrap에서 설정한 region과 일치해야 합니다. 
    sudo npm run deploy​
  • 배포 이후 별다른 소스 변경 사항이 없다면 Thinkerbell EC2 Instance는 중지해둡니다.
동화 생성
  • 동화 내용(Scene, Character) 기술
    • ~/aws-serverless-ai-stories/backend/data 內 scene, character를 편집합니다. 
    • scene에 각 장면의 주요 흐름 또는 단편 요약 내용을 기술합니다.
    • character에 등장 인물에 대해 기술합니다.
    • 모든 내용을 편집하였다면, DynamoDB로 전송합니다. 
      npm run populate-db​
  • 언어
    • 기본 영문으로 Prompt frame이 만들어져 있으나, 취향에 따라서 Prompt 내용을 변경해서 작성하셔도 됩니다. 
      (~/ aws-serverless-ai-stories/backend/src/create-story/index.ts 48 line)
       const prompt = `
        Write a title and a rhyming story on ${characters.length} main characters called ${characters?.map((character: any) => character.name).join(' and ')}.
        The story needs to be set within the scene ${selectedScene.description} and be at least 200 words long
      `;​
    • 이와 같은 코드 변경이 있는 경우 npm run deploy 로 App Runner를 갱신해줍니다. 

 

동화 End Point

 

초기 Amazon App Runner 기본 도메인으로 접속하면 아래와 같은 화면이 제공됩니다. 

App Runner EndPoint

 

동화 생성 이후, Story, Audio, Image가 생성되어 아래와 같이 Endpoint를 통해 일정마다 제공됩니다.

동화 생성 EndPoint

 

이제 기본 동화 생성 Pipeline을 구축하였으니, 다음으로 Thinkerbell Project를 통해 좀 더 개인화를 진행해보겠습니다 :)