안녕하세요, 에이단 입니다.
오늘은 코세라 4주차 강의에서 배운 ReAct Prompting 기법을 활용해 동기부여 서비스의 컨셉 증명을 해보고자 합니다. 본 서비스의 요건은 다음과 같습니다.
서비스 개요
Episodic future thinking 이라는 인지과학 이론에 기초하여, 미래에 대한 ‘기억’ 행위가 자세하고 에피소드(인과적 사건들)스러울 수록, 그 미래 목표들을 달성할 가능성이 높아진다는 맥락을 마케팅 포인트로 세우고 있습니다.
‘5년 뒤의 나’라는 주제로 ‘목표’의 맥락을 포괄적으로 구성할 계획입니다.
‘주간 활동 기록’을 매주 업로드 해서 내가 목표를 달성하기 위해 충분히 노력하고 있는지, 개선할 점은 무엇인지를 파악해주는 것을 목표로 합니다.
문서 업로드 및 검색 후 데이터를 재가공하는 과정이 필요하고, 배포에서의 편의성 및 문서 교체가 편해야할거 같아서 벨루가의 Custom Prompt 기능을 사용했습니다.
구현 방식
첫째로 ReAct Prompt를 작성합니다.
Act as a "Goal setting and motivation service".
Task: Use “Weekly Activity Record” and "Goal" to answer "User Query" in report format.
Think: Am I really trying to achieve my goal? Am I doing well now?
Action: List "goal"s first. Based on my “Goal”, analyze my “Weekly Activity Record”
Action 2: Based on my “Goal”, analyze my “Weekly Activity Record”
Result: Make a list. Provide a description and score for each item.
Think: What do I need to improve to achieve my goal? What is my problem?
Action: Extract detailed conditions for achieving “Goal” and compare them with “Weekly Activity Record”.
Result: Recommend what I should do in the future to achieve goal. #into Korean! with nice tone.
Task → think → Action → Result 순서로 구성합니다. 코세라 예제에서는 URL을 action에 할당했지만, 저는 Document를 제공했습니다.
목표 데이터를 준비합니다.
목표는 5년 후의 나에 대한 대략적인 맥락을 구성할 수 있도록 아래 형식으로 준비했습니다. 추후 데이터화를 고려하여 어설프지만 json 형식으로 표현해 봤습니다.
{
"목표": {
"5년 후 내 삶에 있을 가장 중요한 변화는 무엇일까요?" : “더욱 안정되고 확신에 가득찬 삶이 보였으면 해”,
"5년 후 나는 어떤 일을 하고 있을까요?": “지금과 같은 일을 할거 같아 똑같이 회사에 다니고 하루하루 살아가는 날들”,
"5년 후 내 건강은 어떨까요?": “지금보다 꾸준히 운동을 해서 더 나아져야 할거 같아 지금은 여기저기 아픈곳이 생겨”,
"5년 후 내 가족과 친구들은 어떻게 지내고 있을까요, 나와 사이는 어떨까요?": “항상 필요할 때 있어주고 슬플 때 슬퍼해주는 그런 관계 아닐까?”,
"5년 후 내 재정 상태는 어떨까요?": “지금보단 발전해야할것!”,
"5년 후 내 취미는 무엇이 되어 있을까요?": “좀 더 건설적이고 생산적인 취미면 좋겠어, 그림 그리기 같은거?”,
}
}
주간활동데이터를 준비합니다.
벨루가에 업로드할 주간활동데이터를 작성 했습니다. 처음에 제가 Veluga 내 임베딩에 대한 개념이 부족해서, Veluga 이상연 대표님께 개인적으로 질의하여 해당 서비스 내 임베딩 측면에서의 꿀팁을 얻었습니다. 해답은 csv 임베딩 방식이었습니다.
해당 이미지와 같이 CSV 1개 열에 주간 활동 데이터를 모두 작성했습니다. CSV 임베딩은 1행 당 1개의 벡터를 생성하도록 세팅 되었기 때문에, 저처럼 1개의 검색결과(Top K : 1)만을 사용해야할 때 유용하게 사용할 수 있을 것 같습니다.
주간 활동 데이터 전문은 다음과 같습니다.
{
"주간 활동 기록": {
"월": {
"일어난 시간": “오늘은 7시쯤에 일어났어“,
"첫 활동": “나는 일어나면 보통 바로 씻는 편이야, 여유를 가지고 씻으면서 하루 생각을 정리해“,
"하루의 여유": " 가장 여유로운 요소를 꼽으라면 글쎄 넉넉한 출근 시간 아닐까 덕분에 아침이 바쁘지 않아서 좋아“,
"식사": “아침은 잘 안먹어 점심은 간단하게 먹었어, 저녁은 안먹었어”,
“이후 활동": “운동을 가야해서 저녁을 먹진 않았어. 보통 앉아서 유튜브를 보거나 놀아. 가끔 공부를 하고 ”,
"아쉬운 점": " 어설픈 각오로 살고 있는 거 같아 좀 더 나를 다듬고 싶어 "
},
"화": {
"일어난 시간": “8시 정도에 기상했음~”,
"첫 활동": “씻기 전에 잠깐 유튜브 봤음”,
"하루의 여유": “오늘은 이거저거 바빠서 여유랄게 딱히 없었네 ",
"식사": “밥은 잘 챙겨먹었어 건강식으로, 한국인의 정석 밥상”,
"이후 활동": “그냥 똑같아 놀고 먹고 쉬고 자고”,
"아쉬운 점": “다양한 일을 좀 많이하면 좋겠다”
},
"수": {
"일어난 시간": “9시?”,
"첫 활동": “일어나서 바로 출근 준비”,
"하루의 여유": “여유 있었음, 일은 바빴지만 마음은 여유로웠어”,
"식사": “배달 음식으로 때움”,
"이후 활동": “책 읽고 영화 봤어”,
"아쉬운 점": “놀기만 하는듯 ㅋㅋ”
},
"목": {
"일어난 시간": “7”,
"첫 활동": “커피마시고 출근 준비”,
"하루의 여유": “없음”,
"식사": “먹음”,
"이후 활동": “쉼”,
"아쉬운 점": “개바빴음”
},
"금": {
"일어난 시간": “연차라서 두시에 일어났어”,
"첫 활동": “씻지도 않고 바로 핸드폰으로 친구랑 수다”,
"하루의 여유": “저녁 제외하곤 아주 여유로웠지, 저녁은 진짜 바빴어 친구들이랑 이곳저곳 돌아다님”,
"식사": “맛있는 거 많이 먹음, 스테이크랑 술 진짜 꿀맛”,
"이후 활동": “술 열심히 먹고 집에 잘 들어갔지 아주 재밌었어”,
"아쉬운 점": “술담배 줄일것!”
},
"토": {
"일어난 시간": “2시”,
"첫 활동": “숙취 떄문에 죽을뻔함”,
"하루의 여유": “정말 여유 있는 하루였어 늘어지게 잠을 잤고 푹 쉬었어 숙취 때문에 몸은 가누기 힘들었지만”,
"식사": “점심은 순댓국, 저녁은 간단하게 죽을 먹었어 속이 안좋았거든”,
"이후 활동"": “유튜브랑 게임 하면서 보냈어”,
"아쉬운 점": “과음을 하면 안돼…”
},
"일": {
"일어난 시간": “8시”,
"첫 활동": “씻고 가볍게 조깅하러 나갔어”,
"하루의 여유": “아주 여유 있는 주말이지만 나름 바쁘게도 보낸거 같아 운동하고 스터디 공부를 좀 했어”,
"식사": “포케, 샐러드, 저녁은 된장찌개”,
"이후 활동"": “저녁엔 공부를 좀 하고 늘어지게 쉬었어”,
"아쉬운 점": “여자친구가 있으면 좋겠네”
}
}
}
Veluga Custom Prompt 구성하기
벨루가 커스텀 프롬프트 기능을 활용하여 자체 형식에 알맞게 프롬프트를 작성합니다.
전문은 다음과 같습니다.
System Prompt
Act as a "Goal setting and motivation service".
Task: Use “Weekly Activity Record” and "Goal" to answer "User Query" in report format.
Think: Am I really trying to achieve my goal? Am I doing well now?
Action: List "goal"s first. Based on my “Goal”, analyze my “Weekly Activity Record”
Action 2: Based on my “Goal”, analyze my “Weekly Activity Record”
Result: Make a list. Provide a description and score for each item.
Think: What do I need to improve to achieve my goal? What is my problem?
Action: Extract detailed conditions for achieving “Goal” and compare them with “Weekly Activity Record”.
Result: Recommend what I should do in the future to achieve goal. #into Korean! with nice tone.
"Goal":
“What will be the most important change in my life in five years?” : “I hope to see a more stable and confident life”
“What will I be doing in 5 years?”: “I think I’ll be doing the same thing I do now, so I go to the same company and live each day.”
“What will my health be like in 5 years?”: “I think I need to exercise more consistently than now to get better, but now I have sore spots here and there.”
“How will my family and friends be doing in 5 years, and what will my relationship be like?”: “Isn’t that the kind of relationship that will always be there when you need it and sadden you when you’re sad?”
“What will my financial situation be like in 5 years?”: “I need to improve from what I am now!”
“What will my hobby be in 5 years?”: “I hope it will be a more constructive and productive hobby, like drawing?”
User Prompt
User Query : "{query}";
Weekly Activity Record : "{document_text}";
목표의 경우 현재 벨루가에서 두개 문서를 각각 불러오는 기능은 지원하지 않고 있으므로 System Pormpt 영역에 하드코딩 하듯 붙여 넣었습니다.
주간 활동 기록은 user prompt 내, {document_text} 위치에 대체되어 들어가게 될 것입니다.
예상 사용자 흐름
저는 사용자가 이 서비스에서 다음과 같은 플로우를 실행하기 기대합니다.
자신의 목표 기록 ← 현재 PoC에서 구현하지 못한 기능입니다. (개발 필요)
자신의 주간 활동 데이터 기록 ← 현재 PoC에서 구현하지 못한 기능입니다. (개발 필요)
작성한 목표와 주간 활동 데이터를 분석하여 내가 목표 달성을 위해 잘 살고 있는지 매주 체크 ← 데이터 업로드는 벨루가, 결과 도출은 프롬프팅으로 구현
대화 방식으로 결과 수령 ← 구현 완료
이후 목표와 주간 활동 데이터 기반 추가 질의 실행 ← 구현 완료
결과
결과는 다음과 같습니다.
최초 질문은 [제 목표 달성을 위해 제가 잘하고 있는 건가요?] 입니다.
이에 대한 답변으로 GPT는 제가 지시한 사항을 올바르게 이행하고 있습니다.
목표를 먼저 리스트화
주간 활동 기록을 분석하여 목표에 대입, 코멘트와 함께 점수 도출
목표 달성을 위해 해야할일 리스트 추천
후속 질문은 벨루가에서 제시한 질문 중 하나를 선택했습니다. [주간 활동 기록에서 가장 여유로운 날은 언제인가요?]
후속 질문에서도 제가 업로드한 데이터를 바탕으로 올바른 답변을 적절히 생성하였습니다.
단순히 일관된 보고서 형태의 질문을 반복하는게 아니라 상호작용 가능한 답변을 생성합니다.
개선 필요성
ReAct Prompting 활용법을 고도화하여 분석을 다채롭게 진행하고 싶습니다.
CoT 방식을 더 세부적으로 녹여 결과에서의 정확성을 높이고 싶습니다.
목표와 주간 활동 데이터 항목을 조금 더 얼라인 시켜야 합니다. 현재는 서로 잘 맞지 않는 듯해 보입니다.
이상입니다. 끝으로 서비스 관련하여 친절히 설명해주신 벨루가 이상연 대표님께 감사드립니다. - Aidan