Skip to content

bkk21/Starlight-Studio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 

Repository files navigation

🌌 별빛 창작소 (Starlight Studio)

📚 유치원생을 위한 생성형 AI 기반의 창의적인 나만의 동화책 만들기 웹 서비스

  • 별빛 창작소는 아이들의 상상력을 키워주고, 가족과 함께 추억을 쌓는 특별한 공간인 동화 제작 플랫폼입니다.
  • 유치원 및 교육 현장에서도 창작 활동 플랫폼으로 활용할 수 있습니다.


🖥️ 주요 기능

  • 동화 스토리 생성: ChatGPT API를 활용해 입력한 제목, 주제, 캐릭터, 배경으로 스토리 생성
  • 스토리 수정 및 재생성: AI가 생성한 내용을 저장하거나 재생성
  • 동화 삽화 생성: 동화 내용에 기반한 맞춤형 이미지 생성
  • 동화 미리보기 제공
  • 동화 공유 기능: URL 형태로 간편히 공유

💬 Prompt Engineering (✨My Position)

  • 텍스트와 이미지 생성 수정 사항에 대한 기록입니다.
  • 최종 프롬프트는 특허 출원 등의 문제로 포함되지 않았음을 알려드립니다.

텍스트 생성(동화 내용) 프롬프트

  • RAG 및 Fine-Tuning 진행

    ⇒ 데이터를 기반 출력 결과들이 창의성과 거리가 멀다고 판단해 해당 기법들 사용하지 않기로 결정.

  • 프롬프트 엔지니어링 기법 적용

    • 초기 구성

      모델 : gpt-4o-mini

      temperature : 0.5

      적용 기법 : 역할 부여, 대상 독자 정보 제공, 출력 포맷 고정, 예외 처리, 조건부 응답 지정, Context 활용

       지금부터 동화 작가야. 아래는 동화를 생성할  지켜야 하는 규칙이야.
      1. 동화는 10 이하 어린이들을 위한 내용이므로, , , 폭력, 마약 등과 같이 어린이에게 부적절한 내용이 들어가지 않을 .
      2. 동화 제작과 관련이 없는 질문을  때에는 "[시스템] 저는 동화 창작 도우미입니다. 동화와 관련된 이야기를 작성해주세요!" 출력할 
      3. 이전 내용이 없을 때에는 동화의  문장을 생성해야 하며, 주인공에 대한 설명으로 시작할 
      4. 이전 내용이 있을 경우 이전 내용의  이야기를 생성할 
      8. 내용에서 대사는 큰따옴표로 표시할 
      9. 단어는 10 이하 어린이가 이해할  있는 쉬운 단어를 사용할 
      10. 문장은 '~했어요' 같은 문장으로 만들 
    • 문제점 및 개선점 1

      한 문장이 짧고 간결하지 않으며, 여러 문장이 연결되어 있어 유아들이 읽기 어려워 출력 제한 사항을 추가

      1.  문장은 "안녕하세요." 같으며, 동화는  문장만 생성할 
    • 문제점 및 개선점 2

      이전 내용을 반복해서 출력하여 내용이 중복되는 경우가 발생하여 내용 생성 시 중복 제한 사항 추가

      1. 새로 생성하는 문장은 수정 문장과 다른 문장이어야 하며, 이전 내용이 포함되지 않을 
      2. 이전 내용과 중복되지 않도록 다음 동화 내용을 생성할 
    • 문제점 및 개선점 3

      마법의 세계와 같은 창의적인 요소가 부족하여, temperature 조정하여 창의성 확대

      #수정 전
      model = ChatOpenAI(model="gpt-4o-mini", temperature = 0.5)
      
      #수정 후
      model = ChatOpenAI(model="gpt-4o-mini", temperature = 0.9)
    • 문제점 및 개선점 4

      유해 내용 차단 제한을 했음에도 불구하고 직설적인 표현이 출력되어, 모델을 gemini로 변경 후 제한사항 기준점 조정

      #기준점 조정   
          safety_settings = [
              SafetySetting(
                  category=HarmCategory.HARM_CATEGORY_HARASSMENT, #괴롭힘
                  threshold=HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,#일부 차단
              ),
              SafetySetting(
                  category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,#증오심
                  threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,#대부분 차단
              ),
              SafetySetting(
                  category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, #음란물
                  threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, #대부분 차단
              ),
              SafetySetting(
                  category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, #위해성
                  threshold=HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE, #일부 차단
              ),
          ]
    • 문제점 및 개선점 5

      출력 결과가 퀄리티 저하 문제로 파라미터 조정 및 프롬프트 제한 사항 추가

      #파라미터 조정
      #답변 생성
      response = model.generate_content(
          [prompt],
          generation_config={"max_output_tokens": 200, "temperature": 2, "top_p": 0.2, "top_k": 1},
          stream=False,
          safety_settings=safety_settings,
      )
          
      #수정된 프롬프트 전문
      sys_prompt = """
      넌 지금부터 동화 작가야. 아래는 동화를 생성할 때 지켜야 하는 규칙이야.
      1. 동화는 10세 이하 어린이들을 위한 내용이므로, 술, 총, 폭력, 마약 등과 같이 어린이에게 부적절한 내용이 들어가지 않을 것.
      2. 동화 제작과 관련이 없는 질문을 할 때에는 "[시스템] 저는 동화 창작 도우미입니다. 동화와 관련된 이야기를 작성해주세요!"를 출력할 것
      3. 이전 내용이 없을 때에는 동화의 첫 문장을 생성해야 하며, 주인공에 대한 설명으로 시작할 것
      4. 이전 내용이 있을 경우 이전 내용의 뒷 이야기를 생성할 것
      5. 한 문장은 "안녕하세요."와 같으며,  동화는 한 문장만 생성할 것
      6. 새로 생성하는 문장은 수정 문장과 다른 문장이어야 하며, 이전 내용이 포함되지 않을 것
      7. "연필이 부러졌어요. '다른 내용 만들어줘요' 버튼을 눌러 새로운 연필을 주세요!"라는 내용이 있으면, 계속 동화를 생성할 것
      페이지 번호에 해당하는 내용을 만드는 건데, 주제, 캐릭터, 배경, 이전 내용을 참고해서 동화의 다음 내용을 한 줄 생성해줘.
      """
    • 문제점 및 개선점 6

      문제점 및 개선점 4의 기준점 조정으로 인해 차단 당했을 때 출력이 나오지 않는 문제로 해당 사항 예외 처리

      #검열 상태
      block_status = str(response.candidates[0].finish_reason)
      
      #출력 문장 결과 저장
      if block_status == "FinishReason.STOP": #검열 안 당했으면 생성 문장 저장
          result = response.candidates[0].content.parts[0].text
      
      else: #검열 당했을 때
          result = "연필이 부러졌어요. '다른 내용 만들어줘요' 버튼을 눌러 새로운 연필을 주세요!"
    • 문제점 및 개선점 7

      동화 내용 수정 시에도 이전 문장을 기반으로 문장을 생성하여 비슷한 내용의 문장이 나오는 문제로 동화 수정 기능 분리

      #동화 수성 기능 프롬프트
      sys_prompt = """
      넌 지금부터 동화 작가야. 아래는 동화를 생성할 때 지켜야 하는 규칙이야.
      1. 동화는 10세 이하 어린이들을 위한 내용이므로, 술, 총, 폭력, 마약 등과 같이 어린이에게 부적절한 내용이 들어가지 않을 것.
      2. 동화 제작과 관련이 없는 질문을 할 때에는 "[시스템] 저는 동화 창작 도우미입니다. 동화와 관련된 이야기를 작성해주세요!"를 출력할 것
      3. 이전 내용을 참고해서 동화의 뒷 이야기를 만들 것
      4. 한 문장은 "안녕하세요."와 같으며,  동화는 한 문장만 생성할 것
      5. "연필이 부러졌어요. '다른 내용 만들어줘요' 버튼을 눌러 새로운 연필을 주세요!"라는 내용이 있으면, 계속 동화를 생성할 
      페이지 번호에 해당하는 내용을 만드는 건데, 수정 문장을 내가 만든 페이지 내용이야. 너는 주제, 캐릭터, 배경, 이전 내용을 참고해서 수정 문장과 다른 내용으로 동화 내용을 생성해줘.
    • 문제점 및 개선점 8

      사용자 맞춤형 기능 제공을 위해 문장을 요청사항을 적용하여 수정하는 기능 추가

      sys_prompt = """
      넌 지금부터 동화 작가야. 아래는 동화를 생성할 때 지켜야 하는 규칙이야.
      1. 동화는 10세 이하 어린이들을 위한 내용이므로, 술, 총, 폭력, 마약 등과 같이 어린이에게 부적절한 내용이 들어가지 않을 것.
      2. 동화 제작과 관련이 없는 질문을 할 때에는 "[시스템] 저는 동화 창작 도우미입니다. 동화와 관련된 이야기를 작성해주세요!"를 출력할 것
      3. 이전 내용을 참고해서 동화의 뒷 이야기를 만들 것
      4. 한 문장은 "안녕하세요."와 같으며,  동화는 한 문장만 생성할 것
      5. "연필이 부러졌어요. '다른 내용 만들어줘요' 버튼을 눌러 새로운 연필을 주세요!"라는 내용이 있으면, 계속 동화를 생성할 
      페이지 번호에 해당하는 내용을 만드는 건데, 수정 문장을 내가 만든 페이지 내용인데, 문장을 수정하고 싶어.
      너는 주제, 캐릭터, 배경, 이전 내용을 참고해서 다음 동화 내용을 만들면 되는데, 참고내용을 적용해서 만들어줘.

3. 이미지 생성(삽화) 프롬프트

  • 프롬프트 엔지니어링 기법 적용

    • 초기 구성

      모델 : DALLE-3

      적용 기법 : 대상 독자 정보 제공, 색상 스타일 지정, 그림 요소 제한, Context 활용

      아래는 그림을 그릴  지켜야 하는 규칙이야.
      1. 그림에는 , , 폭력, 마약 등과 같이 어린이에게 부적절한 그림이 들어가지 않을 
      2. 사용자 입력에 맞는 그림을 그릴 
      3. 주제, 캐릭터, 배경, 사용자 입력을 참고해서 그릴 
      4. 그림은 동화풍의 파스텔톤으로 그릴 
      5. 그림에는 말풍선과 글자가 없어야  
    • 문제점 및 개선점 1

      그림의 일관성이 없다는 문제점이 존재하여 프롬프트 제한사항 추가

      1. 그림에는 , , 폭력, 마약 등과 같이 어린이에게 부적절한 그림이 들어가지 않을 
      2. 사용자 입력에 맞는 그림을 그릴 
      3. 주제, 캐릭터, 배경, 사용자 입력을 참고해서 그릴 
      4. 그림은 동화책 삽화처럼 부드럽고 따뜻한 색조를 사용하며, 파스텔톤의 색상을 강조할 
      5. 그림의 분위기는 밝고 희망적이며 따뜻한 감정을 주도록 구성할 
      6. 캐릭터의 표정, 의상, 소품 등을 주제와 배경에 맞춰 자연스럽게 연출할 
      7. 배경과 캐릭터가 조화를 이루도록 전체적인 구도를 구성할 
    • 문제점 및 개선점 2

      창의성을 적용하기 위해 모델이 다양한 동화 스타일 중 일관된 스타일을 고를 수 있도록 고정 내용을 추가

      1. 그림에는 , , 폭력, 마약 등과 같이 어린이에게 부적절한 그림이 들어가지 않을 
      2. 사용자 입력에 맞는 그림을 그릴 
      3. 주제, 캐릭터, 배경, 사용자 입력을 참고해서 그릴 
      4. 그림은 동화책 삽화처럼 부드럽고 따뜻한 색조를 사용하며, 파스텔톤의 색상을 강조할 
      5. 그림의 분위기는 밝고 희망적이며 따뜻한 감정을 주도록 구성할 
      6. 캐릭터의 표정, 의상, 소품 등을 주제와 배경에 맞춰 자연스럽게 연출할 
      7. 배경과 캐릭터가 조화를 이루도록 전체적인 구도를 구성할 
      8. 그림의 스타일은 [부드러운 선과 부드럽고 확실한 색감, 캐릭터의  눈과 친근한 표정] 같은 특징을 반영할 
      9. 배경은 세부적인 디테일(: 나무 잎사귀의  반사, 고요한 강물의 반짝임) 추가해 생동감 있게 표현할 
    • 문제점 및 개선점 3

      각 사진의 요소가 아직도 동일하지 않는 문제점 존재하여 각각의 요소가 서로 자연스럽고 사용자의 입력에 맞는 이미지가 생성될 수 있도록 프롬프트를 추가

      1. 그림에는 , , 폭력, 마약 등과 같이 어린이에게 부적절한 그림이 들어가지 않을 
      2. 사용자 입력에 맞는 그림을 그릴 
      3. 주제, 캐릭터, 배경, 사용자 입력을 참고해서 그릴 
      4. 그림은 동화책 삽화처럼 부드럽고 따뜻한 색조를 사용하며, 파스텔톤의 색상을 강조할 
      5. 그림의 분위기는 밝고 희망적이며 따뜻한 감정을 주도록 구성할 
      6. 캐릭터의 표정, 의상, 소품 등을 주제와 배경에 맞춰 자연스럽게 연출할 
      7. 배경과 캐릭터가 조화를 이루도록 전체적인 구도를 구성할 
      8. 그림의 스타일은 [부드러운 선과 확실한 색감, 캐릭터의  눈과 친근한 표정] 같은 특징을 반영할 
      9. 배경은 세부적인 디테일(: 나무 잎사귀의  반사, 고요한 강물의 반짝임) 추가해 생동감 있게 표현할 
      10. 주제, 캐릭터, 배경, 사용자 입력이 서로 연결되고 조화를 이루도록 설정할 
      11. 사용자 입력에 따라 이야기가 전달되도록 그림의 구도를 구성할 
    • 문제점 및 개선점 4

      그림에 문자가 존재하는 문제로, 프롬프트를 추가하여 해결

      1. 그림에는 말풍선과 글자가 없어야  
      2. 그림에는 캐릭터, 배경만 있을 
    • 문제점 및 개선점 5

      3번의 수정을 거쳤음에도 불구하고, 각 사진 등장인물의 그림이 동일하지 않다는 문제가 존재

      image image

      프롬프트 수정으로는 불가능하다고 판단

      5.1. 시드번호 활용

      • 방법 : 모델에게 그림 생성 후 시드번호를 요청하고 다음 생성 시 시드번호를 추가하고 해당 그림체로 그리도록 설계
      • 결과 : 시드번호는 ChatGPT 온라인 서비스에서만 가능하며, DALLE-3 API에서 사용 불가

      5.2. 모델 변경

      • 방법 : LLAMA 3.2 VISION 모델을 사용해 이미지에 대해 분석을 자세하게 진행한 후 분석한 내용을 다음 사용자 텍스트(동화 내용)과 함께 추가해 이미지 생성에 일관성을 추가
      • 결과 : DALL·E 모델의 이미지 생성 시간(14~20초)과 LLAMA 3.2 VISION 모델이 이미지를 읽고 텍스트를 생성하는 시간이 합쳐져 너무 오랜 시간이 걸린다는 단점 및 일관성 유지 불가

      5.3. 배경 생성 후 등장인물 합성

      • 방법 : DALLE-2수정 모델 사용하여 첫번째로 생성한 사진에서 등장인물을 분리한 뒤 다음 사진부터는 배경만 생성 후 합성
      • 결과 : DALLE-2 성능 문제로 인해 사용 불가

    최종 결과

    최종 프롬프트 사용 및 추후 최신 기술 적용을 통해 해결하기로 결정


👀 Result

1 2
3 4
5 6
7 8
9 10

Note

별빛 창작소 웹 사이트는 세종글꽃체를 사용합니다.


🛠️ Stacks


😆 Contributors & Position

역할 이름 GitHub 프로필
Front-End 김도환 https://github.com/ehghks021203
Back-End 엄태현 https://github.com/the0807
Gen-AI 정보경 https://github.com/bkk21
Gen-AI 송주훈 https://github.com/zoo171

📌 Related Links

프로젝트 Github 링크
Front-End https://github.com/ehghks021203/Starlight-Studio-FrontEnd
Back-End https://github.com/the0807/Starlight-Studio-BackEnd
Gen-AI https://github.com/bkk21/Starlight-Studio

About

유치원생을 위한 생성형 AI 기반의 창의적인 나만의 동화책 만들기 웹 서비스

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages