- 별빛 창작소는 아이들의 상상력을 키워주고, 가족과 함께 추억을 쌓는 특별한 공간인 동화 제작 플랫폼입니다.
- 유치원 및 교육 현장에서도 창작 활동 플랫폼으로 활용할 수 있습니다.
- 동화 스토리 생성: ChatGPT API를 활용해 입력한 제목, 주제, 캐릭터, 배경으로 스토리 생성
- 스토리 수정 및 재생성: AI가 생성한 내용을 저장하거나 재생성
- 동화 삽화 생성: 동화 내용에 기반한 맞춤형 이미지 생성
- 동화 미리보기 제공
- 동화 공유 기능: URL 형태로 간편히 공유
- 텍스트와 이미지 생성 수정 사항에 대한 기록입니다.
- 최종 프롬프트는 특허 출원 등의 문제로 포함되지 않았음을 알려드립니다.
-
RAG 및 Fine-Tuning 진행
- 데이터 : 국립어린이청소년도서관_다국어동화구연-한국전래동화
- RAG : ChromaDB 사용
- Fine-Tuning : QLoRA 사용
⇒ 데이터를 기반 출력 결과들이 창의성과 거리가 멀다고 판단해 해당 기법들 사용하지 않기로 결정.
-
프롬프트 엔지니어링 기법 적용
-
초기 구성
모델 : 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. "연필이 부러졌어요. '다른 내용 만들어줘요' 버튼을 눌러 새로운 연필을 주세요!"라는 내용이 있으면, 계속 동화를 생성할 것 페이지 번호에 해당하는 내용을 만드는 건데, 수정 문장을 내가 만든 페이지 내용인데, 문장을 수정하고 싶어. 너는 주제, 캐릭터, 배경, 이전 내용을 참고해서 다음 동화 내용을 만들면 되는데, 참고내용을 적용해서 만들어줘.
-
-
프롬프트 엔지니어링 기법 적용
-
초기 구성
모델 : 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번의 수정을 거쳤음에도 불구하고, 각 사진 등장인물의 그림이 동일하지 않다는 문제가 존재


⇒ 프롬프트 수정으로는 불가능하다고 판단
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 성능 문제로 인해 사용 불가
최종 결과
최종 프롬프트 사용 및 추후 최신 기술 적용을 통해 해결하기로 결정
-
![]() |
![]() |
|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Note
별빛 창작소 웹 사이트는 세종글꽃체를 사용합니다.
| 역할 | 이름 | 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 |
| 프로젝트 | 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 |










