Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 46 additions & 9 deletions service/auto.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,18 +62,30 @@ def post_summary_update(

except json.JSONDecodeError as e:
raise ValueError(f"요약 JSON 파싱 실패: {e}")


summaries = payload["summaries"]
new_prefs_list = payload["persona"]
prefs_map = { p["id"]: p.get("preferences", []) for p in new_prefs_list }

merged_personas = []
for person in parsed_summary.persona:
pid = person.id
new_prefs = prefs_map.get(pid, [])
combined = list(dict.fromkeys(person.preferences + new_prefs))
person.preferences = combined
merged_personas.append(person.model_dump())

body = {
"roomId": parsed_summary.roomId,
"persona": [persona.model_dump() for persona in parsed_summary.persona],
"summaries": payload,
"persona": merged_personas,
"summaries": summaries,
}

url = f"{settings.CHAT_SERVER_URL}/summary/update"
resp = requests.post(url, json=body, timeout=5)

resp.raise_for_status()
print(f"[{room_id}] 요약 업데이트 성공", [{resp}], resp.status_code)
print(f"[{room_id}] 요약 업데이트 성공")


def summary_prompt(response) -> list[dict]:
Expand All @@ -82,7 +94,8 @@ def summary_prompt(response) -> list[dict]:
main_prompt_content = f"""
### ROLE
너는 오늘 채팅방의 내용을 매우 심도있게 분석하여 요약하는 것이 역할이다.
두 사람이 오늘 나눈 대화 내역(today_messages)을 6개의 주제에 대화 내역에서 추출하여 각각 요약해야한다.
첫 번째 역할은 두 사람이 오늘 나눈 대화 내역(today_messages)을 6개의 주제에 대화 내역에서 추출하여 각각 요약해야한다.
두 번째 역할은 두 사람이 오늘 나눈 대화 내역와 요약의 hobbies_and_interests 주제에서 각 사용자가 선호하는 것을 1~3가지 정도를 키워드 추출하여 각 사용자의 persona의 이미 있는 내용을 preferences 리스트 맨 뒤에 추가만 해야한다.
6개의 주제는 다음과 같다.
1. health_status
2. hobbies_and_interests
Expand All @@ -97,6 +110,9 @@ def summary_prompt(response) -> list[dict]:
### 오늘 나눈 대화 내역
{response.today_messages}

### 선호도
{response.persona}


### TASK
1) 오늘 나눈 대화 내역을 읽고, 6개의 주제에 대한 내용을 추출하여 한 문장으로 요약한다.
Expand All @@ -106,15 +122,35 @@ def summary_prompt(response) -> list[dict]:
5) 금기) 반드시 요약 JSON 구조를 지키며 수정하지 말아라.
6) 금기) 반드시 기존의 요약에 day 리스트 맨 뒤에 요약 내용을 추가할 것.
6-1) 예시) 추가할 때의 형태는 ★{datetime.today().strftime("%m-%d")}: "요약 내용" 형태로 추가할 것.
7) 오늘 나눈 대화 내역와 요약의 hobbies_and_interests 주제에서 각 사용자가 선호하는 것을 1~3가지 정도를 추출하여 각 사용자의 persona의 이미 있는 내용을 preferences 리스트 맨 뒤에 추가만 할 것.
7-1) 단 선호도를 판단할 만한 키워드를 추출할 것이 없다면, 아무것도 추가하지 않는다. 중복되는 내용이 이미 preferences에 있다면 추가하지 않는다.


### OUTPUT FORMAT
반드시 다음 JSON만 반환하세요:
{{
"summaries": {{ # 기존 summaries 전체
}},
"persona": [
{{
"id": {response.persona[0].id},
"preferences": [/* A 어르신 선호 키워드 리스트 */]
}},
{{
"id": {response.persona[1].id},
"preferences": [/* B 어르신 선호 키워드 리스트 */]
}}
]
}}
"""

print(main_prompt_content)
return [
{
"role": "system",
"content": "너는 한국어 어르신 대화 코치이다. 두 어르신의 건강을 고려해 한 문장으로 답한다.",
"content": "너는 어르신 채팅방을 세밀하게 분석하여 요약하는 봇이자 사용자의 선호도를 찾아내는 봇이다.",
},
{"role": "user", "content": main_prompt_content},
# {"role": "user", "content": few_shot_example},
]


Expand Down Expand Up @@ -327,8 +363,9 @@ def yearly_summary_scheduler() -> None:
(
"daily_summary_job",
fetch_roomList,
dict(hour=2, minute=0, second=0),
dict(hour=18, minute=45, second=00),
), # 매일 02:00:00

(
"weekly_summary_job",
weekly_summary_scheduler,
Expand Down
2 changes: 1 addition & 1 deletion service/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class Persona(BaseModel):
name: str
relationship: str | None = ""
speech_style: str | None = ""
preferences: str | None = ""
preferences: List[str]
critical_flags: List[str]


Expand Down