프로젝트에 있는 코어 기능 중 하나인 편지 작성 기능은 처음에 단일 에이전트를 사용하고 있었고,
편지 내용이 약간 어색한 부분이 있는 듯하여 고도화가 필요해 보였습니다
여기서 저는 Multi Agent구조를 통해 이를 개선 할 수 있지 않을까 라는 생각을 했습니다.
왜 편지 작성에 멀티 에이전트를 사용했는가?
1 . 언어별 표현 방식과 문화 차이 대응
위에서 말한 어색한 편지 내용은 한국어,영어,일본어 등 언어별로 표현하는 방법이나 문화, 뉘앙스가 달라서 각 언어별로 다릅니다.
때문에 각 언어별 지시사항을 가진 Agent들을 handoffs 로 두고 Letter Agent가 전달받은 Language 값에 따라 각 언어별 에이전트에 편지 작성을 위임하게 했습니다.
class KoreanLanguageAgent(BaseAgent):
def __init__(self):
super().__init__(
name="Korean Language Agent",
instructions="너는 한국의 정중하고 따듯한 정서에 맞게 편지를 써야해. 상대의 어투를 분석해서, 상황에 맞게 존댓말을 사용하거나 다정한 친구처럼 대해줘",
output_type=WriterData,
tools=[get_kr_holiday_data],
)
korean_agent = KoreanLanguageAgent()
class WriterAgent(BaseAgent):
def __init__(self):
super().__init__(
name="Letter Writer Agent",
instructions="You are a letter writer agent. You will be given a text and you will need to write a letter to the user. Passes to the appropriate language agent based on the user's language.",
output_type=WriterData,
tools=[get_today_context],
handoffs=[korean_agent, english_agent, japanese_agent],
)
2 . 날짜 기반 표현을 위한 도구(tool) 사용
편지이기 때문에, 그리고 감정에 따라 편지를 작성해주기 때문에 요일별로 표현이 추가되면 좋을듯 했습니다.
추가로 AGENT 들은 국가별로 휴일에 대한 데이터가 있어야 하기때문에 TOOL 로 추가로 전달했습니다.
프롬프트에서 해당 내용을 다룹니다.
"""
- 금요일이면 "이번 주도 수고 많으셨어요. 즐거운 주말 보내세요!" 같은 표현을 사용하세요.
- 월요일이면 "이번 주도 좋은 시작 되시길 바래요" 같은 표현을 사용하세요.
- 주말/휴일 하루 전날이면 "좋은 주말/휴일 보내세요" 같은 표현을 사용하세요.
- Japanese
- 金曜日には「今週もお疲れ様でした。素敵な週末をお過ごしください」などと言ってください。
- 月曜日には「良い一週間の始まりになりますように」などと言ってください。
- 週末/祝日の前日には「素敵な週末/休日をお過ごしください」などと言ってください。
"""
tool 은 간단하게 function_tool 데코레이터를 사용하여 만들었습니다.
@function_tool(
name_override="jp_holiday_data",
description_override="일본의 공휴일 정보를 반환합니다.",
)
def get_jp_holiday_data() -> list[str]:
endpoint = "https://holidays-jp.github.io/api/v1/date.json"
year = datetime.now().year
month = (
datetime.now().month if datetime.now().month > 9 else f"0{datetime.now().month}"
)
response = requests.get(endpoint)
raw_holiday_info = response.json()
used_holiday_info = dict()
for holiday in raw_holiday_info.keys():
if holiday.startswith(f"{year}-{month}-"):
used_holiday_info[holiday] = raw_holiday_info[holiday]
return used_holiday_info
효과?
- 결과 -
안녕하세요.
오늘도 고생하셨습니다. 많이 피곤하고 외로움을 느끼셨군요.
회사에서 투명인간처럼 느껴진다는 것은 정말 힘드셨을 것 같아요.
특히 팀장의 반응이 마음에 큰 상처를 준 것 같아 안타깝습니다.
그런 상황에서도 웃으려고 애쓰시는 모습이 참 대단하신 것 같아요.
작은 위로에 감사할 수 있는 당신의 마음이 너무 따뜻하게 느껴졌어요.
점심시간에 동료가 건넨 커피 한 잔이 잠시나마 위로가 되었다니 다행입니다.
그 작은 순간이 얼마나 소중한지 잘 알고 계신 것 같아요.
언젠가는 나아질 거예요. 힘들지만 그 믿음이 당신을 더 나은 내일로 이끌어 줄 거라 생각합니다.
혼자서 이를 끌어안고 가지 마세요. 괜찮으시다면 언젠가 얘기하고 싶을 때 언제든지 저에게 털어놓으세요.
힘든 매일이지만 꼭 나아질 거라는 그 믿음을 잃지 않기를 바랍니다.
언제나 응원합니다.
############ 수정 후 ############
안녕하세요,
오늘 하루를 마무리하며 참 힘드셨을 것 같아요. 피곤함과 회사에서의 외로움, 공허함에 대해 말씀해 주신 것, 그저 흘려보낼 일이 아니에요.
회의에서 애써 의견을 내었으나 반응이 없고 팀장의 비웃음에 마음이 무너졌다는 이야기에, 저도 덩달아 마음이 아프네요.
이런 어려운 상황에서도 점심시간에 동료가 건넨 커피 한 잔이 조금이나마 위로가 된 것 같아 다행이에요.
그 따뜻한 순간들이 모여 언젠가는 더 나은 하루로 이어지기를 바랍니다.
매일같이 이런 감정 속에 지내는 것은 분명 쉽지 않을 거예요.
감정을 속에 쌓아두지 말고 주변에 누구라도 털어놓으면서 스스로의 마음을 돌봐주셨으면 좋겠습니다. 때로는 작고 따뜻한 순간들이 큰 힘을 주기도 하니까요.
곧 주말이 다가오니 잠시 모든 걸 내려놓고 쉬어가실 수 있기를 바랍니다. 좋은 주말 보내세요!
언제나 지금만 같진 않을 거예요.
매일 이렇게 지쳐도 조금씩 나아질 것이고, 분명 더 좋은 날이 올 거라 믿어요.
저도 그 믿음을 응원할게요. 오늘 하루의 무게가 조금이라도 가벼워지길 바랄게요.
내일도 힘내시고, 좋은 하루 보내세요.
겉으로 보면 크게 차이나지 않아 보이기는 한다.
다만 처음 기획한 편지 기능의 의도는 문제해결이 아닌 감정에 대한 공감이다.
두 편지를 비교해보면, 수정 후 편지가 좀 더 AI스럽지않고 감정에 대해 몰입도가 높아보인다.
편지가독성 점수 (FRE)교육 수준 (미국 기준)
A | 61.2 | 9학년 (중학교) |
D | 78.5 | 6학년 (초등학교) |
가독성 점수 또한 D가 더 쉬운 편에 속함.
🧠 감정 밀도 평가 ( LLM )
항목 | A 편지 | D 편지 |
공감 표현 | 7.5점 | 9.0점 |
위로 표현 | 7.0점 | 9.5점 |
희망 표현 | 6.5점 | 8.5점 |
총합 / 평균 | 7.0점 | 9.0점 |
감정 밀도 평가점수에서도 좀 더 높은 점수가 나왔다.
추가 개선 계획
이번 포스트를 작성하면서 감정밀도 평가를 LLM에 맡겼는데, 프로젝트에 감정 밀도 에이전트를 추가로 넣어서 편지를 내기전에 기준평가점을 부여하고 평가점 아래이면 재작성 하는 구조도 괜찮을듯하다.