궁금증이 생겨서 시도해본다.
오래전에 다뤄서 기억이 희미해지기도 했고 이것저것 시도해보고 싶은 게 생기기도 했다.
어쨋든 상황은 다음과 같다.
LLM을 돌릴거다!
근데 뭔가 3개의 상황을 만들고 그에 따라 답이 나오는 상황을 만들려고한다.
한 상황에 대해 시와 소설 한구절, 그리고 SNS에서 사용할 만한 피드 한개의 문구를 만들어내도록 만들어보고자 한다.
flask 를 사용해서 아주 빠르게 만들어봤다.
rabbitMQ 를 도커로 띄우고
from tasks import celery_app
celery_app.worker_main(["worker", "--loglevel=info"])
워커를 띄우고
from celery import Celery
from google import genai
client = genai.Client(api_key="keykey")
celery_app = Celery("content_generator", broker="amqp://localhost//", backend="rpc://")
@celery_app.task
def generate_poetry(prompt):
contents = f"[Poetry] 영감을 받아 시적으로 쓴 글 : {prompt} ..."
response = client.models.generate_content(
model="gemini-2.0-flash", contents=contents
)
return response.text
@celery_app.task
def generate_novel_paragraph(prompt):
contents = f"[Novel] 이 문장을 바탕으로 한 소설의 문단: {prompt}..."
response = client.models.generate_content(
model="gemini-2.0-flash", contents=contents
)
return response.text
@celery_app.task
def generate_sns_post(prompt):
contents = f"[SNS] 인스타용 짧은 글: {prompt} #life #mood"
response = client.models.generate_content(
model="gemini-2.0-flash", contents=contents
)
return response.text
gemini에서 만들도록 코드를 작성했다.
from tasks import generate_novel_paragraph, generate_poetry, generate_sns_post
def main():
prompt = input("Enter a prompt: ")
result1 = generate_poetry.delay(prompt)
result2 = generate_novel_paragraph.delay(prompt)
result3 = generate_sns_post.delay(prompt)
print("Tasks submitted. Waiting for results...")
print("Poetry Result:", result1.get(timeout=10))
print("Novel Paragraph Result:", result2.get(timeout=10))
print("SNS Post Result:", result3.get(timeout=10))
if __name__ == "__main__":
main()
그리고 main 에서 prompt 를 받아 결과를 출력하도록 만들었다.
그 결과 다음과 같이 나왔다.
Enter a prompt: 가을 아침 이른 새벽 어머니의 분주함과
Tasks submitted. Waiting for results...
Poetry Result: ## 가을 새벽, 어머니의 손길
희미한 새벽빛 창틈에 스미고,
고요를 깨는 어머니의 사각거리는 발소리.
아직 잠긴 눈 비비며 귀 기울이면,
무쇠 솥 끓는 소리, 잦아드는 기침 소리.
뜰에는 서리 하얗게 내려앉아,
가을 꽃잎 곱게 떨어진 자리.
어머니는 텃밭에서 호박잎 꺾고,
늙은 오이, 붉은 고추 바구니에 담네.
된장찌개 끓는 냄새, 구수한 밥 짓는 연기,
가을 아침을 깨우는 어머니의 사랑.
따스한 밥 한 술, 김치 한 조각에,
녹아드는 새벽 추위, 든든한 하루의 시작.
어머니의 분주함은 가을 햇살처럼,
온 세상을 따스하게 감싸 안네.
세월의 흔적 깊이 새겨진 손으로,
오늘도 가족의 행복을 짓는 어머니.
가을 새벽, 어머니의 손길은,
영원히 잊지 못할 따스한 시(詩)라네.
Novel Paragraph Result: ## 가을 아침 이른 새벽, 어머니의 분주함과...
가을 아침 이른 새벽, 아직 짙은 어둠이 옅은 안개와 뒤섞여 마당을 잠식하고 있을 때, 어머니의 분주함은 마치 새벽을 깨우는 종소리처럼 집 안 가득 울려 퍼졌다. 낡은 나무 마루가 삐걱거리는 소리, 아궁이에 장작불을 지피는 타닥거리는 소리, 무쇠 솥뚜껑이 들썩이는 소리, 그리고 낮고 허스키한 목소리로 흥얼거리는 콧노래 소리까지. 겹겹이 쌓인 소리들은 잠결에도 익숙하게 느껴져, 이불 속에서 웅크린 채 세상과 단절되어 있던 나를 조금씩 현실로 끌어당겼다.
어머니는 새벽 안개처럼 차가운 기운이 감도는 부엌에서 홀로 전쟁을 치르고 있었다. 밤새 불어온 차가운 바람에 떨어진 늙은 호박을 씻어 숭늉을 끓이고, 텃밭에서 뽑아 온 무청으로 시원한 된장국을 끓였다. 땀방울이 송골송골 맺힌 이마를 훔치며 연신 부지런히 움직이는 어머니의 모습은, 마치 거대한 톱니바퀴가 끊임없이 돌아가는 시계태엽처럼 쉼 없이 흘러가는 시간의 흐름을 상징하는 듯했다.
그 분주함 속에는 단순히 끼니를 준비하는 것을 넘어선 깊은 의미가 담겨 있었다. 쌀쌀한 날씨에 자식들 감기라도 걸릴까 걱정하는 마음, 고된 농사일에 지친 남편에게 따뜻한 아침밥을 챙겨주고 싶은 마음, 그리고 무엇보다 하루하루 묵묵히 살아가는 삶의 무게를 짊어진 어머니의 고독함과 애환이 녹아 있었다. 그 분주함은 단순히 밥 짓는 소리가 아닌, 가족을 위한 헌신이자 희생이었고, 새벽의 어둠을 뚫고 피어나는 한 줄기 희망이었다.
나는 이불 속에서 눈을 감은 채 그 모든 소리들을 조용히 음미했다. 아직 잠이 덜 깬 몽롱한 정신 속에서, 어머니의 분주함은 따뜻한 위로가 되어, 고단한 하루를 시작할 힘을 불어넣어 주었다. 그리고 나는 알고 있었다. 저 분주함이 멈추는 날, 우리 집의 새벽은 영원히 깨어나지 못할 것이라는 것을.
SNS Post Result: 🍁🍂 가을 새벽, 어머니의 분주한 손길에 하루를 깨워봅니다. 따뜻한 기운이 집 안 가득 퍼지는 아침. 😌 #life #mood #가을아침 #엄마의사랑 #소소한행복
아이유님의 가을아침이 생각나서 적었는데 잘 나온다.
이를 통해 배우고 싶었던게 메세지큐와 비동기 처리 방식이었는데, 생각보다 매우 간단하게 끝났다. 신기했다.
python app/main.py
Enter a prompt: 별들은 많으나 사랑할 수 있는 별은 하나밖에 없다
Tasks submitted. Waiting for results...
Poetry Result: 수많은 별빛, 밤하늘 가득 쏟아져 내려와
어둠을 밀어내고 은빛 강물을 이루네.
저마다 반짝이며 아름다움을 뽐내지만,
내 마음속 깊은 곳, 오직 하나의 별만이 빛나네.
닿을 수 없는 거리, 아득히 멀어져도
그 별빛은 내 가슴에 영원히 머물리라.
길을 잃은 날에도, 희미한 날에도
나침반처럼 방향을 알려주는 별,
수많은 별들 속에서, 오직 하나,
사랑할 수밖에 없는 나의 별이라네.
<.....에러...내용>
celery.utils.serialization.UnpickleableExceptionWrapper: ServerError("503 UNAVAILABLE. {'error': {'code': 503, 'message': 'The model is overloaded. Please try again later.', 'status': 'UNAVAILABLE'}}")
문인 김향안 님의 구절을 사용했는데, 모델을 계속 사용하다보니 과부화가 왔나보다.
2번의 한번 꼴로 이런 에러가 발생한다.
지금 사용하고 있는 모델이 무료라서 발생하는 문제 같다.
이거 안정적으로 바꾸기 위해서는 다음과 같은 방법이 있을 것 같다.
timeout 시간을 늘린다.
task 마다 각각 다른 모델을 사용하도록 바꾼다. ( 1번은 gemini, 2번은 chatgpt, 3번은 claude 라던지..)
일정이상 답이 오지 않으면 다른 모델에서 답이 나오지 않은 모델을 사용하도록 바꾼다. 후보는 2번과 동일
이정도일것같다.
코드 자체에 에러를 디버깅하는 용으로 만들지 않아서 많이 위태롭다.
프로젝트가 간단해서 그런가 매우 빠르게 끝나서 당황스럽다...
python app/main.py
Enter a prompt: 별들은 많으나 사랑할 수 있는 별은 하나밖에 없다.
Tasks submitted. Waiting for results...
Poetry Result: ## 별들의 합창, 단 하나의 사랑
밤하늘은 캔버스, 별빛은 물감
수억의 광휘가 아스라히 반짝인다.
헤아릴 수 없는 별들, 저마다의 이야기
은하수를 수놓으며 영원을 속삭인다.
눈을 들어 바라보면 현기증 나는 풍경
어느 별 하나 쉬이 잡을 수 있을까.
손을 뻗어 닿으려 애쓰는 덧없는 몸짓
저 멀리 빛나는 별들은 너무나 멀다.
하지만 그 수많은 별들 속에서
내 마음을 사로잡는 단 하나의 별.
숨 막힐 듯 아름다운 빛을 발하며
나만을 위한 노래를 부르는 듯하다.
그 별을 향한 나의 사랑은
밤하늘을 가득 채운 별빛보다 깊고,
우주의 시작과 끝을 잇는 시간보다 길다.
그 별 하나, 내 삶의 전부를 비춘다.
다른 별들은 그저 배경일 뿐,
내 눈에는 오직 그 별만 보인다.
그 별이 슬플 땐 내 마음도 울고,
그 별이 웃을 땐 세상이 환해진다.
별들은 많으나, 사랑할 수 있는 별은 하나.
내 가슴 속 깊이 새겨진 유일한 별.
영원히 변치 않을 사랑을 맹세하며
오늘도 밤하늘을 가만히 올려다본다.
Novel Paragraph Result: ## 소설 문단:
밤하늘은 칠흑빛 도화지 위에 무수한 다이아몬드를 흩뿌려 놓은 듯 찬란했다. 은하수가 희미하게 빛나는 강물처럼 흐르고, 그 강물 위에 촘촘히 박힌 별들은 저마다의 빛깔과 크기로 존재감을 뽐냈다. 지평선 너머 아득한 우주 공간에서 쏘아 올린 빛은 수억 광년을 건너 이곳까지 도달하여, 고요한 밤의 정취를 더욱 깊게 만들었다. 현수는 낡은 천체망원경을 통해 그 황홀한 광경을 묵묵히 바라보았다. 그는 별들의 이름과 위치, 그리고 그 별들이 품고 있을지도 모르는 외계 행성의 가능성에 대해 줄줄 읊을 수 있었다. 그러나 그의 마음속에는 오직 하나의 별만이 박혀 있었다. 별들은 많으나, 사랑할 수 있는 별은 하나밖에 없다는 것을 그는 너무나 잘 알고 있었다. 그 별은 지금쯤 어디에서 무엇을 하고 있을까. 저 무수한 별들처럼, 여전히 빛나고 있을까. 아니면, 어둠 속으로 사라져 버렸을까. 현수의 시선은 다시 망원경 속으로 빨려 들어갔다. 그는 희미하게 빛나는 성운의 잔해를 쫓으며, 닿을 수 없는 별을 향한 간절한 그리움을 삼켰다. 그의 밤은, 오늘도 그렇게 깊어만 갔다.
SNS Post Result: 네, 멋진 문장이네요! 인스타그램에 바로 사용해도 좋고, 살짝 변형해서 사용할 수도 있습니다. 몇 가지 추가 아이디어를 더해볼게요.
**1. 감성적인 느낌 강조:**
* "수많은 별빛 속, 내 마음을 비추는 단 하나의 별. 너✨ #사랑 #밤 #감성"
* "밤하늘 가득한 별들처럼, 수많은 사람들 속 오직 한 사람. #인연 #운명 #moonlight"
**2. 궁금증 유발:**
* "내 우주에는 오직 하나의 별🌟 그 별은 과연... #궁금 #나만의별 #love"
**3. 긍정적인 느낌 강조:**
* "수많은 가능성 속에서 빛나는 너라는 별. 함께라서 행복해💫 #일상 #행복 #긍정"
**4. 영어 해시태그 활용:**
* "So many stars, but only one I can truly love. ✨ #stars #love #onlyone"
**5. 질문 던지기:**
* "당신의 밤하늘에는 어떤 별이 빛나고 있나요? 🌟 #별 #밤하늘 #질문"
이 외에도 다양한 표현이 가능하니, 본인의 사진이나 스토리에 어울리는 문구를 선택해서 사용해 보세요!
그래도 아쉬워서 한번 더 시키니 잘 되었다.
그런데 좀 무섭긴하다.
2년 전에는 텍스트 생성이 이 정도로 고도화되지 않았던 것 같은데, 생각보다 만족스러운 결과가 나와서 당황스럽다.
역시 it 쪽은 변하는게 참 빠른 것 같다.