23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
Year End Thanks Letter
다시 연말입니다. 어김없이 찾아오는 이 시기에는, '딱히 한 것도 없는데 벌써 연말'이라는 생각을 매년 하게 되는 것 같습니다.
올해 못 이룬 것에 대한 후회/미련과 '내년에는 달라지겠지' 하는 기대/희망이 묘하게 공존하는 특별한 시기이죠.
"삶은 사실 습관으로 이루어져 있다"
유명한 인물이 했을 법한 격언 같지만, 사실 제가 지어낸 말입니다.
저는 꽤 습관론자입니다.
루틴하게 반복하는 것들이 정해져 있는데, 연말에 주변 분들에게 새해 인사겸 편지 돌리는 것도 루틴 중에 하나입니다.
받는 입장에서는 진부할 수도 있겠고, 사실 서로의 건투를 빌어준다고 해도 크게 다르지 않을 내년이란 것도 알지만,
그럼에도 한 해를 함께 무사히 건너온 동료애(?)라고 할까요. 연말 편지는 1년에 마침표를 찍는 하나의 루틴이 되었습니다.
Year-End Thanks Card 변천사.
연말편지도 나름(?) 변천사가 있었는데, 처음 시작할 때는 줄 사람도 별로 없었고, 어차피 남는게 시간이었던 대학생 시절이라 실물 편지를 건넸으나,
직장인이 된 이후에는 카카오톡 메시지로 변경했습니다.
카톡 메시지로 몇 년 해보니, 약간 맹맹(?)한 느낌이 들어 작년까지는 인터랙티브 웹카드 디자인 사이트에서 만들어서 보내고 있었습니다.
문제는 이 작업이 점점 손이 많이 간다는 것.
시간이 지날수록 보내야 되는 사람들의 수는 늘어가는데, 좀 더 재밌고, 의미있는 시도를 해보자는 생각은 커져가서, 이번 연말에는 좀 더 시스템화를 해보기로 했습니다.
특히, 올해 AI 서비스들을 업무와 일상생활에서 많이 써보니, AI 서비스들을 잘 활용하면 괜찮은 프로세스를 만들 수 있을 것 같다는 확신이 생겼습니다.
할 게 (오히려) 더 많아 보이는 건 기분탓...!?
일단, 이 프로젝트를 위해 필요한 재료들이 무엇인지 파악해 보았어요.
잘 모르겠는 부분이 많지만, 일단 해보자!
저는 데이터 분삭을 업무로 하기에 개발은 어꺠 넘어로 아는 정도이고, 개발을 해본 것이라고는 streamlit 기반의 간단한 데모 정도를 구현 해본 것이 전부여서,
잘 모르겠는 부분은 우리 조수들한테 맡기기로 했습니다.
프로젝트에 대한 기본적인 정보를 담은 txt 파일을 작성하여 chatGPT/Claude의 '프로젝트' 메뉴에 있는 'Project Knowledge'에 넣었습니다. 저도 정답을 모르고, 경험이 없는 프로젝트이기에 두 개의 AI 서비스 답변을 비교해 가면서 작업하였습니다. 올 한해 동안 openAI에서 나온 여러 모델들과 Claude의 3.5 Sonnet을 활용하는 업무가 많았는데요,개인적으로는 항상 Claude의 답변이 더 나았습니다. 가장 최근에 나온 GPT Pro도 고려해봤으나 $200는 쉽지 않아(;;) 포기...
이렇게 조수들 셋팅을 끝내고, 함께 그려본 프로젝트의 Flow는 아래와 같아요.
2024에 보낼 분들을 확정 하기 위해 작년에 보냈던 분들의 리스트부터 확인하였습니다.
다행히 그동안 보냈던 수신인/메시지의 히스토리는 저장해놓고 있었습니다.
연도별로 수신인과 해당 수신인에게 보낸 메시지의 내용은 구글 클라우드에 있습니다.
평소에도 저장해놓는 걸 좋아합니다. 한번 눌러도 되는 ctrl+s도 수십번 연타합니다. 자료들도 모으고 또 모으는데, '다람쥐로 태어났으면 잘 살았겠네~' 하는 생각도 가끔 합니다.
구글 문서에 수신인별로 저장해 놓은 메시지들. 그래도 나름 데이터 분석을 업무로 하기에, 형식을 맞춰서 저장해두었습니다. 여담으로, 현재 우리나라의 공공기관에서의 AI 활용이 더딘 이유로 AI가 읽기 쉬운 구조의 자료가 아니라는 얘기를 들었던 기억이 있습니다. hwp 문서에서 표안의 표, 표 겹치기 등의 구조가 많아 그렇다고 하네용...
구글 드라이브-구글 문서(gdocs)들에 있는 정보들을 json/dataframe 형태로 저장하여, LLM이든 프론트에서의 개발이든 언제든 꺼내 쓸 수 있도록 합니다.
해당 작업은 colab -> Google Drive 마운트/Google API 인증 -> 구글 문서들의 doc ID 가져오기 -> 문서 접근 이런 식으로 처리하였습니다.
사실 처음에는 colab에서 구글 문서(gdocs)들을 다뤄본적이 없어 당황했는데, 친절한 AI 조수들이 잘 알려주었습니다.
구글 문서들을 colab으로 가져 온 뒤에는, 필요한 정보들을 파싱해서 csv로 만들어야 하는데 여기에는 LLM을 활용했습니다.
처음엔 정규표현식으로 해보다가, 문서들의 형식이 모두 통일되어 있는 것이 아니기에, 필요 정보 파싱/전처리가 힘들었습니다.
이런 경우에는 LLM이 정리하는 게 나을 것 같았고, 문서의 양도 적어 API 비용에 대한 부담이 없어서 gpt-4-mini로 해결했습니다.
def extract_message_info(text):
try:
prompt = f"""
다음 텍스트에서 정보를 추출해주세요. 텍스트는 연말에 보내는 메시지들의 모음입니다.
JSON 형식으로만 응답해주세요. 코드 블록(```)이나 'json' 같은 추가 텍스트 없이 순수한 JSON만 응답해주세요.
텍스트:
{text}
다음 형식으로 응답:
{{
"receiver": "수신자 이름 (문서 제목이나 내용에서 추출)",
"years": ["텍스트에 언급된 연도들을 배열로"],
"messages": {{
"연도1": "해당 연도의 메시지 전체 내용",
"연도2": "해당 연도의 메시지 전체 내용",
...
}}
}}
"""
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "당신은 텍스트를 분석하여 순수한 JSON 형식으로만 정보를 추출하는 assistant입니다. 코드 블록이나 추가 텍스트 없이 JSON만 응답하세요."},
{"role": "user", "content": prompt}
],
temperature=0
)이렇게해서 작년까지 보냈던 히스토리 파일들에서 수신인과 메시지들을 csv로 얻을 수 있었어요.
강민,경훈,계웅님...지우라면 지울게요....^_^;;
여기까지는 기존에 저장해둔 내역이고, 올해 새로 생긴 인연으로 수신인에 추가가 필요한 분들도 있습니다.
저는 회사 일정은 아웃룩에, 개인 일정은 Notion에 저장 하기 때문에 이 두 개의 서비스에서 데이터를 추출해야 합니다.
아웃룩은 파일 -> 열기 및 내보내기 -> 가져오기/내보내기 -> 일정을 통해 파일을 추출할 수 있고,
Notion도 내보내기로 데이터를 얻을까 하다가, AI검색 기능이 있길래 사용해봤습니다.
Notion은 검색이 좋지 않기로 악명이 높은데, 제가 일정이 별로 없어서 그런지 제대로 추출하더군요.
위 작업들을 통해 2024년 수신인 약 180명을 최종 확정하였습니다.
연말 편지를 좀 더 흥미있게 보내기 위해 틈틈이 생각해놓은 아이디어들이 있었습니다.
1. 사진앨범
사진을 정리하는데 친구들 결혼식에서 찍은 사진들이 정말 많더군요.
올해 유독 주변에 결혼식이 많았어서 그런건데, 문득 삭제하기에는 아깝다는 생각이 들었어요.
이 사진들을 나중에 다시 재가공(!) 해서 보내주면 재밌겠다고 생각이 들었고, 아래와 같이 만들어봤습니다.
결혼식 사진외에도 저장된 사진 중에 함께 기억할만한 사진이 있으면 웹카드로 만들었습니다
2. 연말결산
유튜브 뮤직 / 왓챠 / TOSS의 연멸 결산 컨텐츠.
저도 연말마다 1년동안 보았던 영화,책,음악 등등에 순위를 매기는데,
이걸 활용하면 취향 공유도 되고, 재밌을 것 같았어요.
3. sora-영상생성 활용
세번쨰는 제 관심의 연장선에서 만들어봤어요. openAI의 sora를 활용해야지 생각했는데, 좀처럼 기회가 없었는데
이번에 사용해봤습니다. sora는 API도 없더군요. 웹페이지에서 프롬프트로 만드는 건데, sora는 chatGPT의 초기 버전처럼 영어와 한글 프롬프트의 차이점이 많았습니다.
둘 다 같은 프롬프트인데, 이 프롬프트에는 주인공 여성의 얼굴은 나오지 않게 해달라는 내용이 포함되어 있었습니다. 왼쪽은 한글 프롬프트이고, 오른쪽은 영어인데, 영어는 프롬프트 대로 여주인공의 얼굴이 나오지 않은 반면, 한국 프롬프트는 그렇지 않았습니다.
sora 영상을 통한 웹카드는 받는 사람과 관련된 영상 웹카드 첫 페이지에 나오게 한 뒤에 편지는 뒤에 나오는 식으로 기획해봤습니다.
원본영상을 sora를 통해 Remix한 버전. remix에 사용된 프롬프트는 'k-pop 아이돌처럼 만들어줘, 무대도 동일하게'입니당. Remix는 강도를 정할 수 있는데, 가운데가 mid이고, 맨 오른쪾이 strong입니다. 참고로 영상 속 아이는 조카입니다.
대략적인 스케치는 위와 같이 제가 대충 그려 보고, AI 조수들과 개발하였습니다.
올해 하반기에는 cursor.ai를 많이 활용하였는데, 만족스러워요.
chatGPT, Claude는 코드를 계속 복붙해야 되는데, cursor.ai는 에디터에 그대로 사용가능하여 효율적입니다.
이렇게 총 8개의 웹카드 템플릿을 제작 했고, 정리하면 아래와 같습니다.
(추가) newyear: 별자리로 이어보는 2025년 + 개인화 메시지
테스트URL
결혼_B컷: https://year-end-thanks-cards.web.app/card/wedding/2024/UregA4YmBQwZitGpPtob
사진_추억: https://year-end-thanks-cards.web.app/card/photo/2024/UregA4YmBQwZitGpPtob
연말결산: https://year-end-thanks-cards.web.app/card/hbawards/2024/UregA4YmBQwZitGpPtob
선택_스토리: https://year-end-thanks-cards.web.app/card/gift_story/2024/UregA4YmBQwZitGpPtob
선택_선물: https://year-end-thanks-cards.web.app/card/gift/2024/UregA4YmBQwZitGpPtob
감사: https://year-end-thanks-cards.web.app/card/thanks/2024/UregA4YmBQwZitGpPtob
퀴즈_: https://year-end-thanks-cards.web.app/card/quiz/2024/UregA4YmBQwZitGpPtob
sora: https://year-end-thanks-cards.web.app/card/sora/2024/UregA4YmBQwZitGpPtob
(++)추가 2025 별자리: https://year-end-thanks-cards.web.app/card/newyear/2024/UregA4YmBQwZitGpPtob
메시지는 그동안 작성했었던 메시지들을 few shot으로 과거에 제가 작성했던 내용과 비슷한 메시지들을 생성했습니다.
class MessageGenerator:
def __init__(self, api_key: str, langsmith_api_key: str):
self.tracer = LangChainTracer(
project_name="year_end_messages"
)
self.llm = ChatOpenAI(
temperature=0.7,
model_name="gpt-4",
openai_api_key=api_key,
callbacks=[self.tracer]
)
self.prompt_template = ChatPromptTemplate.from_template("""
당신은 연말 감사 메시지를 작성하는 전문가입니다.
아래는 이 사람에게 보낸 과거 메시지 히스토리입니다:
{message_history}
저와의 관계는 이래요:
{person_relationship}
올해 있었던 주요 사건들:
{year_events}
위 정보를 바탕으로, 2024년 연말 메시지를 작성해주세요.
다음 사항을 고려해주세요:
1. 과거 메시지의 톤앤매너를 유지하되, 반복적인 표현은 피해주세요
2. 올해 있었던 특별한 사건이나 대화를 언급해주세요
3. 진정성 있는 메시지를 작성해주세요
4. 이모티콘은 적절히 사용해주세요
""")올해는 업무도 고객 개인화 MMS를 생성했기에, 어떤 식으로 결과가 나올지는 대충 알고 있기는 했는데, 생성된 메시지가 아쉬운 점이 있더군요.
내용이 나쁘지는 않지만, 제가 직접 고치는 메시지가 많았습니다.
나는 올해 했던 일을 내년에도 할 수 있어서
다행이라는 안심과,
내년에도 반복해야되는 근심속에서
올해는 정리하고 내년을 준비하고 있어.
위 메시지는 AI 생성이고, 내용도 괜찮고 제가 과거에 썼던 표현들이 담겨있기는 한데,
너무 포괄적이고, 생성된 메시지들과 수신인에 매칭 되지 않는 게 너무 많았습니다.
개인적인 얘기들을 적어야 될 때도 있어서 LLM은 인사말/맺음말에만 적용했습니다.
웹카드 템플릿과 메시지를 모두 만들었고, 이제 남은 건 누구한테 어떤 템플릿을 보낼지에 대한 고민입니다.
일단, 올해 결혼한 사람들과 사진이 있는 사람들은 '결혼_B컷', '사진_추억' 템플릿에 우선으로 배정했고,
문화에 대한 관심이 있다는 걸 아는 사람들은 '연말결산' 등 나름 고심(?)해서 매칭 하였습니다.
최종결과: 결혼_B컷 / 추억_사진
연말 결산
선택형
떙스레터, 퀴즈형
sora 영상 생성 유형
++추가 선택유형, 별자리+개인화 메시지
이렇게 최종 발송 준비가 끝났습니다.
(이 글을 쓰는 현재는 아직 발송을 하지는 않았습니다. 발송까지 자동화하고 싶었는데, 카톡은 어려운 것 같네요)
연말에 겨우 인사 한 번 하는 것이 고작일 수도 있고, 이런 게 무슨 의미가 있을까 싶기도 하죠. 하지만, '시절 인연'으로 끝났던, 혹은 그때가 마지막으로 보는 것인 줄은 미처 알지 못하고 지나간 인연들을 기억해본다면, 조금은 의미가 있을 수도 있겠지요.
사실, 작년 연말에도 웹카드를 만들어 보려고 했으나 작년에는 못했어요.
저는 작년이나 지금이나 비슷한 수준인데, 올해 달랐던 건 AI.
1년 동안 나아진 건 제가 아니라 AI 서비스들인 것이죠.
AI를 인류의 새로운 불이라고 하는 표현이 과장만은 아닌 이유입니다.
각오로 시작하고, 반성으로 끝나는 1년이 쌓이는 것 같아요.
"뭐, 내년에는 다르겠지"라고 맘편히 얘기 할 수 있는, 불안한 낙관이 허용되는 것도 오늘까지.
내일부터는 다시 1년이 시작되고, 같은 질문을 다시 마주해야 합니다.
그래도, 연말에는 역시 희망을 품고, 주변 사람들과 온기를 나누는 게 좋겠지요.
다이어트도 항상 내일부터이지 않습니까~ ^_^
마음 아픈 일들로 2024년의 연말 풍경은 따스한 불빛이 반짝이는 거리와는 다른 모습입니다.
내년에는 행복한 일들만 가득하길 바랍니다.
새해 복 많이 받으세요.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.