⚙️ LLM
이전 내용 : [▶️Back-end] 사용자 입력의 Prompt를 다듬는 기능 구현 3차_LLM
본 게시글은 프롬프트 결과의 가독성을 높이는 작업을 담았고,
ChatGPT와 Miravelle 프롬프트 결과의 차이를 담았어요.

{
"generated_prompt": "3D 모델 프롬프트: 인기 게임 \"리그 오브 레전드\"의 캐릭터 룰루를 기반으로 한 3D 모델을 생성합니다. \n\n1. **캐릭터 개요**:\n - 룰루는 게임 내에서 요정 마법 사령관으로, 밝고 활기찬 성격을 가졌습니다. 그녀의 외형은 귀엽고 장난기 넘치는 느낌을 줍니다.\n\n2. **외형 특징**:\n - **의상**: 보라색과 핑크 색조의 마법사 로브와 뾰족한 모자. 로브는 황금색으로 장식되어 있으며, 주름과 질감을 강조합니다.\n - **신체적 특징**: 귀여운 얼굴과 아몬드 모양의 큰 눈을 가지며, 피부는 연한 라벤더 색입니다.\n - **머리카락**: 긴 보라색 머리카락이 자유롭게 흩날리는 모습을 표현하며, 머리의 끝은 부드럽게 곡선으로 떨어집니다.\n\n3. **아이템 및 액세서리**:\n - **지팡이**: 끝에 빛나는 보석이 장식된 마법 지팡이를 소지하고 있으며, 스파클 이펙트를 추가하여 마법의 느낌을 강조합니다.\n - **Pix**: 룰루의 동반자인 Pix, 작은 나비 요정, 미세한 세부 사항과 투명한 날개를 생성합니다.\n\n4. **스타일 및 분위기**:\n - **스타일**: 카툰 스타일로 생동감 있게 룰루의 특성을 부각하며, 발랄한 느낌이 강조되도록 합니다.\n - **분위기**: 환상적이고 마법적인 분위기로, 룰루가 동화 속 세상에 살고 있는 것 같은 느낌을 줍니다.\n\n5. **배경**:\n - 하나의 선택지로는 마법의 숲 장면을 설정하여 배경에 푸른 잎과 반짝이는 빛으로 가득한 환경을 만듭니다. \n\n이 프롬프트를 통해 룰루의 매력을 최대한 살리며, 게임 캐릭터로서의 특징을 놓치지 않는 생생한 3D 모델을 목표로 합니다."
}
어제 작동됨을 확인한 LLM 모델을 다시 작동시켰어요.
저희가 하고자 하는 방향은 영어가 아니라 "한국어" 서비스를 목적으로 하고 있거든요.
그래서
"LOL 게임 캐릭터인 룰루를 생성하는 프롬프트를 한국어로 작성해 줘."
로 작성하여 결괏값을 받아왔어요.
"리그 오브 레전드"의 캐릭터 룰루를 기반으로 한 3D 모델을 생성 캐릭터 개요 : 룰루는 게임 내에서 요정 마법 사령관으로, 밝고 활기찬 성격을 가졌습니다. 그녀의 외형은 귀엽고 장난기 넘치는 느낌을 줍니다. 의상 : 보라색과 핑크 색조의 마법사 로브와 뾰족한 모자. 로브는 황금색으로 장식되어 있으며, 주름과 질감을 강조합니다. 신체적 특징 : 귀여운 얼굴과 아몬드 모양의 큰 눈을 가지며, 피부는 연한 라벤더 색입니다. 머리카락 : 긴 보라색 머리카락이 자유롭게 흩날리는 모습을 표현하며, 머리의 끝은 부드럽게 곡선으로 떨어집니다. 아이템 및 액세서리 : 지팡이는 끝에 빛나는 보석이 장식된 마법 지팡이를 소지하고 있으며, 스파클 이펙트를 추가하여 마법의 느낌을 강조합니다. 룰루의 동반자인 Pix는 작은 나비 요정, 미세한 세부 사항과 투명한 날개를 생성합니다 스타일 및 분위기 : 카툰 스타일로 생동감 있게 룰루의 특성을 부각하며, 발랄한 느낌이 강조되도록 합니다. 환상적이고 마법적인 분위기로, 룰루가 동화 속 세상에 살고 있는 것 같은 느낌을 줍니다.
▲ 이렇게 직접 정리해서 저희 서버에 넣어서 생성하고 텍스처링도 했어요.

생각보다 키가 크게 나왔어요.

Publish를 눌러서 게시물 생성을 완료했어요.


실제 롤 캐릭터인 룰루는 이렇게 생겼어요.
키가 큰 버전의 룰루가 생성되었네요.

프롬프트:
"환상적인 마법의 숲 속, 작은 요정 마법사가 떠다니며 강력한 주문을 사용한다. 그녀는 짙은 보라색과 초록색이 조화를 이루는 마법사 복장을 입고 있으며, 커다란 마법 지팡이를 들고 있다. 그녀의 눈은 호기심과 장난기로 빛나고, 머리에는 뾰족한 요정 모자가 씌워져 있다. 주변에는 빛나는 마법의 나비와 반짝이는 별 가루가 떠다니며, 그녀의 애완동물인 작은 마법 생물이 그녀 곁에서 함께 움직인다. 전체적인 분위기는 동화적이고 신비로운 느낌을 자아낸다."
일반적으로 상용되고 있는 ChatGPT에게도 프롬프트를 부탁하였어요.
제가 OpenAI API를 끌고 와서 만든 것과 사용되고 있는 ChatGPT의 프롬프트 차이를 알기 위해서요.

ChatGPT의 프롬프트로 생성했을 때는 좀 더 요정 같은 느낌으로 생성된 걸 확인했어요. 🤔


Miravelle Prompt Model vs ChatGPT
※ 지극히 주관적인 점수입니다. ※
Miravelle Prompt Model | 나의 의견(점수 : 최대 10점) | ChatGPT |
{ "generated_prompt": "3D 모델 프롬프트: 인기 게임 \"리그 오브 레전드\"의 캐릭터 룰루를 기반으로 한 3D 모델을 생성합니다. \n\n1. **캐릭터 개요**:\n - 룰루는 게임 내에서 요정 마법 사령관으로, 밝고 활기찬 성격을 가졌습니다. 그녀의 외형은 귀엽고 장난기 넘치는 느낌을 줍니다.\n\n2. **외형 특징**:\n - **의상**: 보라색과 핑크 색조의 마법사 로브와 뾰족한 모자. 로브는 황금색으로 장식되어 있으며, 주름과 질감을 강조합니다.\n - **신체적 특징**: 귀여운 얼굴과 아몬드 모양의 큰 눈을 가지며, 피부는 연한 라벤더 색입니다.\n - **머리카락**: 긴 보라색 머리카락이 자유롭게 흩날리는 모습을 표현하며, 머리의 끝은 부드럽게 곡선으로 떨어집니다.\n\n3. **아이템 및 액세서리**:\n - **지팡이**: 끝에 빛나는 보석이 장식된 마법 지팡이를 소지하고 있으며, 스파클 이펙트를 추가하여 마법의 느낌을 강조합니다.\n - **Pix**: 룰루의 동반자인 Pix, 작은 나비 요정, 미세한 세부 사항과 투명한 날개를 생성합니다.\n\n4. **스타일 및 분위기**:\n - **스타일**: 카툰 스타일로 생동감 있게 룰루의 특성을 부각하며, 발랄한 느낌이 강조되도록 합니다.\n - **분위기**: 환상적이고 마법적인 분위기로, 룰루가 동화 속 세상에 살고 있는 것 같은 느낌을 줍니다.\n\n5. **배경**:\n - 하나의 선택지로는 마법의 숲 장면을 설정하여 배경에 푸른 잎과 반짝이는 빛으로 가득한 환경을 만듭니다. \n\n이 프롬프트를 통해 룰루의 매력을 최대한 살리며, 게임 캐릭터로서의 특징을 놓치지 않는 생생한 3D 모델을 목표로 합니다." } |
Miravelle에 요청한 프롬프트 결과는 가독성이 매우 떨어짐. (0) |
프롬프트: "환상적인 마법의 숲 속, 작은 요정 마법사가 떠다니며 강력한 주문을 사용한다. 그녀는 짙은 보라색과 초록색이 조화를 이루는 마법사 복장을 입고 있으며, 커다란 마법 지팡이를 들고 있다. 그녀의 눈은 호기심과 장난기로 빛나고, 머리에는 뾰족한 요정 모자가 씌워져 있다. 주변에는 빛나는 마법의 나비와 반짝이는 별 가루가 떠다니며, 그녀의 애완동물인 작은 마법 생물이 그녀 곁에서 함께 움직인다. 전체적인 분위기는 동화적이고 신비로운 느낌을 자아낸다." |
룰루는 게임 내에서 요정 마법 사령관으로, 밝고 활기찬 성격을 가졌습니다. |
외형 : Miravelle이 생성한 모델에 반영 안 됨. 오히려 숙달된 마법사 교수님 느낌. (3) |
환상적인 마법의 숲 속, 작은 요정 마법사가 떠다니며 강력한 주문을 사용한다. |
그녀의 외형은 귀엽고 장난기 넘치는 느낌을 줍니다. | ||
보라색과 핑크 색조의 마법사 로브와 뾰족한 모자. | 옷👗 : 색감을 강조한 Miravelle 모델이 좀 더 룰루의 옷과 비슷한 퀄티리를 뽑아냄. (8) |
머리에는 뾰족한 요정 모자가 씌워져 있다. |
로브는 황금색으로 장식되어 있으며, 주름과 질감을 강조합니다. |
그녀는 짙은 보라색과 초록색이 조화를 이루는 마법사 복장을 입고 있으며, |
|
귀여운 얼굴과 아몬드 모양의 큰 눈을 가지며, | 외모 👁️👃🏻👁️ : GPT 보다 더 구체적이게 설명하고, 색감까지 언급하여 상상했던 모델 생성 모습과 흡사하게 출력됨.(8) |
그녀의 눈은 호기심과 장난기로 빛나고, |
피부는 연한 라벤더 색입니다. | ||
긴 보라색 머리카락이 자유롭게 흩날리는 모습을 표현하며, |
||
머리의 끝은 부드럽게 곡선으로 떨어집니다. | ||
지팡이는 끝에 빛나는 보석이 장식된 마법 지팡이를 소지하고 있으며, |
추가적 요소 : 지팡이 안 예쁨. (2) |
커다란 마법 지팡이를 들고 있다. |
스파클 이펙트를 추가하여 마법의 느낌을 강조합니다. | 분위기 : 룰루 캐릭터 특성상 요정 느낌이 필요함. 하지만 Miravelle에선 묘사하지 못했음. (3) |
주변에는 빛나는 마법의 나비와 반짝이는 별 가루가 떠다니며, |
룰루의 동반자인 Pix는 작은 나비 요정, 미세한 세부 사항과 투명한 날개를 생성합니다 |
부가적 효과 : Miravelle, GPT 모두 구현해내지 못했음. (1) |
그녀의 애완동물인 작은 마법 생물이 그녀 곁에서 함께 움직인다. |
카툰 스타일로 생동감 있게 룰루의 특성을 부각하며, 발랄한 느낌이 강조되도록 합니다. 환상적이고 마법적인 분위기로, 룰루가 동화 속 세상에 살고 있는 것 같은 느낌을 줍니다. |
배경 : 둘 다 만화적 느낌을 잘 날려냄. (7) |
전체적인 분위기는 동화적이고 신비로운 느낌을 자아낸다. |
Total : 32/80(점) |
이렇게 분석한 내용을 데이터 셋으로 많이 만들 거예요.
그걸 토대로 Hugging Face에 저희만의 이미지 평가 모델을 올리는 것이 가장 베스트인 방향으로 보고 있지만,
시간이 아주아주 부족하고 모델 성능을 위해서 많은 데이터가 필요하지만 돈도 부족해요.
그래서 Hugging Face에서 이미 만들어진 모델을 가지고 와서 활용할 예정이에요.
Miravelle에서 생성한 프롬프트 결과의 가독성을 높이는 작업
▼ 수정하기 전, views.py
더보기
# prompts/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from openai import AsyncOpenAI
import asyncio
import os
import openai
from drf_yasg.utils import swagger_auto_schema
from .serializers import GeneratePromptSerializer
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
raise ValueError("Missing OpenAI API Key")
aclient = AsyncOpenAI(api_key=api_key)
# OpenAI 프롬프트 생성 함수
async def generate_3d_prompt(user_input):
system_prompt = (
"너는 3D 모델을 생성하기 위한 최적의 프롬프트를 만드는 AI야. "
"사용자의 요청을 분석하여 디테일한 프롬프트를 제공해야 해. "
"프롬프트는 구체적인 특징(색상, 분위기, 배경, 스타일 등)을 포함해야 하며, "
"모델링에 적합한 키워드 중심으로 작성해야 해."
)
try:
response = await aclient.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input}
]
)
return response.choices[0].message.content
except openai.APIConnectionError as e:
print(f"OpenAI 서버 연결 오류: {e}")
return "OpenAI 서버 연결에 실패했습니다. 잠시 후 다시 시도해주세요."
except openai.RateLimitError as e:
print(f"OpenAI API Rate Limit 초과: {e}")
return "OpenAI API Rate Limit이 초과되었습니다. 잠시 후 다시 시도해주세요."
except Exception as e:
print(f"OpenAI API 호출 중 오류 발생: {e}")
return "OpenAI API 호출 중 오류가 발생했습니다."
# Django REST Framework API 엔드포인트
class GeneratePromptAPI(APIView):
def get(self, request):
message = "API is running"
return Response({"status": message}, status=status.HTTP_200_OK)
@swagger_auto_schema(
request_body=GeneratePromptSerializer,
operation_description="3D 모델 생성을 위한 프롬프트 생성 API",
)
def post(self, request):
serializer = GeneratePromptSerializer(data=request.data)
if serializer.is_valid():
user_input = serializer.validated_data['user_input']
# OpenAI API 호출을 위한 사용자 입력
user_request = "Create a 3D model based on 3D Model Prompt: {}".format(user_input)
# OpenAI API 호출을 비동기적으로 실행하고 결과를 얻음
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
optimized_prompt = loop.run_until_complete(generate_3d_prompt(user_request))
loop.close()
# JSON 형태로 응답 반환
return Response({"generated_prompt": optimized_prompt}, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
변경 사항
# 변경 전
# OpenAI 프롬프트 생성 함수
async def generate_3d_prompt(user_input):
system_prompt = (
"너는 3D 모델을 생성하기 위한 최적의 프롬프트를 만드는 AI야. "
"사용자의 요청을 분석하여 디테일한 프롬프트를 제공해야 해. "
"프롬프트는 구체적인 특징(색상, 분위기, 배경, 스타일 등)을 포함해야 하며, "
"모델링에 적합한 키워드 중심으로 작성해야 해."
)
프롬프트 결과의 가독성을 높이기 위해서, 시스템 프롬프트에 한 줄을 더 추가해 주었어요.
▼
# 변경 후
# OpenAI 프롬프트 생성 함수
async def generate_3d_prompt(user_input):
system_prompt = (
"너는 3D 모델을 생성하기 위한 최적의 프롬프트를 만드는 AI야. "
"사용자의 요청을 분석하여 디테일한 프롬프트를 제공해야 해. "
"프롬프트는 구체적인 특징(색상, 분위기, 배경, 스타일 등)을 포함해야 하며, "
"모델링에 적합한 키워드 중심으로 작성해야 해."
"개행문자는 제거해 줘."
)
"개행문자는 제거해 줘."
를 추가했을 뿐인데 아~주 쉽고 빠르게 수정되었어요. 👍🏻


{ "Miravelle": "제리 3D 모델링 프롬프트: \"톰과 제리에 등장하는 애니메이션 캐릭터 제리를 3D로 모델링하세요. 제리는 작은 사이즈의 의인화된 갈색 생쥐로, 큰 귀와 눈이 특징이며 주황색과 갈색의 선명한 색상으로 구성되어 있습니다. 전체적인 스타일은 클래식한 2D 애니메이션의 느낌을 유지하면서 부드럽고 윤기 있는 질감을 추가해 현대적인 3D 표현을 살려 주세요. 밝고 쾌활한 표정을 지니며 활기 넘치고 장난기 많은 모습이 돋보이도록 자세를 조정합니다. 배경은 단순한 실내 환경으로 설정하여 제리가 톰을 피해 도망칠 준비를 하고 있는 듯한 상황을 연출하세요. PBR(Physically Based Rendering) 텍스처를 사용해 현실적인 질감을 더하고, 픽사 스타일의 밝고 따뜻한 조명을 추가하여 캐릭터의 매력을 강조합니다.\"" }


얼추 비슷하게 나오긴 했네요. 🤔
프롬프트를 한국어로 작성하는 것도 시스템 프롬프트에 적용해야 해요.
현재 workspace에선 명도가 낮아서 시커멓게 보일 뿐, 실제로는 오른쪽 사진처럼 밝고 예쁘답니다. 🤗
확실히, 비전공자에다가 난생처음 접하는 3D 모델 생성을 직접 하려고 하니 지식도 딸리고 머리도 아프네요.
그래도 스스로 생각도 해보고 팀원분들께 공유도 하다 보니까 쌓여가는 게 생기는 느낌이에요.
더 예쁜 모델을 뽑을 수 있도록 프롬프트 생성에 힘을 기울여보겠습니다.
'👥 최종 팀 프로젝트(250227~250331) > 구현 과정 ▶️' 카테고리의 다른 글
[▶️Front-end] 사용자 요청 결과의 Prompt를 보여주기 1차 (1) | 2025.03.24 |
---|---|
[▶️Back-end] 사용자 입력의 Prompt를 다듬는 기능 구현 5차_LLM 完 (0) | 2025.03.21 |
[▶️Back-end] 사용자 입력의 Prompt를 다듬는 기능 구현 3차_LLM (1) | 2025.03.19 |
[▶️Back-end] 사용자 입력의 Prompt를 다듬는 기능 구현 2차 (1) | 2025.03.18 |
[▶️Back-end] 사용자 입력의 Prompt를 다듬는 기능 구현 1차 (0) | 2025.03.17 |