rorshi commited on
Commit
5fe5ee4
·
1 Parent(s): 9df6a7e

12단계까지 모든 오류 수정 및 테스트 완료

Browse files
npc_social_network/README.txt CHANGED
@@ -152,7 +152,7 @@ GET /run_npc_simulation
152
  | 2단계 | NPC 감정 상태 및 감정 HUD 구현 | ✅ 완료 | 감정 상태 및 HUD 표시 (Pygame + 웹)
153
  | 3단계 | 감정 ↔ 행동 연동 구조 구현 | ✅ 완료 | 감정 ↔ 행동 매핑 구현
154
  | 4단계 | 감정 ↔ 기억 저장 및 decay 구현 | ✅ 완료 | Memory 감정 및 decay 적용 구조
155
- | 5단계 | 감정 ↔ 관계 변화 구조 구현 | 🔸 부분 완료 | 구조는 구현됨, 다른 NPC 관련 확인 필요
156
  | 6단계 | 성격 시스템 도입 | ✅ 완료 | 성격 분리 + 초기 bias 설계
157
  | 7단계 | NPC 간 상호작용 구조화 | ✅ 완료 | NPC 상호작용 → 감정/관계 반영
158
  | 8단계 | Memory 임베딩 + FAISS 기반 검색 | ✅ 완료 | FAISS 검색 + 임베딩 저장 구조
 
152
  | 2단계 | NPC 감정 상태 및 감정 HUD 구현 | ✅ 완료 | 감정 상태 및 HUD 표시 (Pygame + 웹)
153
  | 3단계 | 감정 ↔ 행동 연동 구조 구현 | ✅ 완료 | 감정 ↔ 행동 매핑 구현
154
  | 4단계 | 감정 ↔ 기억 저장 및 decay 구현 | ✅ 완료 | Memory 감정 및 decay 적용 구조
155
+ | 5단계 | 감정 ↔ 관계 변화 구조 구현 | 완료 | 구조 구현
156
  | 6단계 | 성격 시스템 도입 | ✅ 완료 | 성격 분리 + 초기 bias 설계
157
  | 7단계 | NPC 간 상호작용 구조화 | ✅ 완료 | NPC 상호작용 → 감정/관계 반영
158
  | 8단계 | Memory 임베딩 + FAISS 기반 검색 | ✅ 완료 | FAISS 검색 + 임베딩 저장 구조
npc_social_network/models/llm_prompt_builder.py CHANGED
@@ -13,6 +13,7 @@ def build_npc_prompt(npc:"NPC", user_input: str, matched_memories: List[Memory],
13
  NPC 대사를 생성하기 위한 강화된 프롬프트 구성 함수
14
  - 감정 요약 / 성격 요약 / 관계 / 기억 등 포함
15
  - target_npc 인자를 받아 플레이어 또는 다른 NPC와의 대화 모두 처리
 
16
  """
17
  # 대화 상대방의 이름을 동적으로 설정
18
  interlocutor_name = target_npc.name if target_npc else "플레이어"
@@ -24,17 +25,32 @@ def build_npc_prompt(npc:"NPC", user_input: str, matched_memories: List[Memory],
24
  # 관계 요약
25
  relationship_description = npc.get_relationship_description(interlocutor_name)
26
 
27
- # 기억 요약 정비
28
- memory_summaries = []
29
- for mem in matched_memories:
30
- # Memory 객체의 content 속성을 사용하도록 수정
31
- short_content = mem.content[:50] + "..." if len(mem.content) > 50 else mem.content
32
- memory_summaries.append(f"- {short_content} ({mem.emotion})")
 
 
33
 
34
- memory_section = "\n".join(memory_summaries[:3]) if memory_summaries else "없음"
 
 
 
 
 
 
 
35
 
36
  # 프롬프트 구성
37
  prompt = f"""
 
 
 
 
 
 
38
  당신은 '{npc.name}'이라는 이름을 가진 사람입니다.
39
  당신의 직업은 '{npc.job}'이고, 현재 '{interlocutor_name}'와(과) 대화를 나누고 있습니다.
40
 
@@ -47,16 +63,14 @@ def build_npc_prompt(npc:"NPC", user_input: str, matched_memories: List[Memory],
47
  # 당신과 {interlocutor_name}와(과)의 현재 관계:
48
  {relationship_description}
49
 
50
- # 최근 기억:
51
  {memory_section}
52
 
53
  # {interlocutor_name}의 발화
54
  "{user_input}"
55
 
 
 
56
  ---
57
-
58
- → 이 상황에 어울리는 당신의 자연스럽고 인간적인 사람 반응을 생성하세요.
59
- → 말투, 반응은 감정 상태에 맞추어 주세요.
60
- → 대답은 NPC의 1인칭 시점으로 작성하세요.
61
  """
62
  return prompt
 
13
  NPC 대사를 생성하기 위한 강화된 프롬프트 구성 함수
14
  - 감정 요약 / 성격 요약 / 관계 / 기억 등 포함
15
  - target_npc 인자를 받아 플레이어 또는 다른 NPC와의 대화 모두 처리
16
+ - 기억 유무에 따라 LLM에게 다른 지침을 전달하여 날조 방지
17
  """
18
  # 대화 상대방의 이름을 동적으로 설정
19
  interlocutor_name = target_npc.name if target_npc else "플레이어"
 
25
  # 관계 요약
26
  relationship_description = npc.get_relationship_description(interlocutor_name)
27
 
28
+ # 기억 유무에 따른 동적 지침 생성
29
+ if matched_memories:
30
+ memory_section_title = "연관된 기억"
31
+ memory_contents = []
32
+ for mem in matched_memories:
33
+ short_content = mem.content[:70] + "..." if len(mem.content) > 70 else mem.content
34
+ memory_contents.append(f"- {short_content} (감정: {mem.emotion}, 중요도: {mem.importance})")
35
+ memory_section = "\n".join(memory_contents)
36
 
37
+ # 기억이 있을 때의 지침
38
+ instruction = f"당신은 '{interlocutor_name}'의 말과 관련된 아래의 기억들을 가지고 있습니다. 이 기억들을 바탕으로 자연스럽게 대화하세요."
39
+ else:
40
+ memory_section_title = "연관된 기억 없음"
41
+ memory_section = "관련된 특별한 기억이 없습니다."
42
+
43
+ # 기억이 없을 때의 지침
44
+ instruction = f"당신은 '{interlocutor_name}'의 말과 관련된 명확한 기억이 없습니다. 이 사실을 솔직하게 인정하거나, 잘 기억나지 않는다는 뉘앙스로 되물어보세요. 절대로 없는 기억을 지어내면 안 됩니다."
45
 
46
  # 프롬프트 구성
47
  prompt = f"""
48
+ # instruction
49
+ → 아래 상황에 어울리는 당신의 자연스럽고 인간적인 사람 반응을 생성하세요.
50
+ → 말투, 반응은 감정 상태에 맞추어 주세요.
51
+ → 대답은 NPC의 1인칭 시점으로 작성하세요.
52
+ {instruction}
53
+
54
  당신은 '{npc.name}'이라는 이름을 가진 사람입니다.
55
  당신의 직업은 '{npc.job}'이고, 현재 '{interlocutor_name}'와(과) 대화를 나누고 있습니다.
56
 
 
63
  # 당신과 {interlocutor_name}와(과)의 현재 관계:
64
  {relationship_description}
65
 
66
+ # {memory_section_title}:
67
  {memory_section}
68
 
69
  # {interlocutor_name}의 발화
70
  "{user_input}"
71
 
72
+ # 대화 로그
73
+ {npc.name}:
74
  ---
 
 
 
 
75
  """
76
  return prompt
npc_social_network/npc/npc_base.py CHANGED
@@ -525,30 +525,22 @@ class NPC:
525
  def reflect_memory_emotions_on_relationship(self, target_name: str, memory_limit: int=10):
526
  """
527
  최근 기억에 담긴 감정을 기반으로 대상과의 관계를 갱신
528
- - 특정 대상 (플레이어 등)에 대해 감정이 담긴 Memory를 수집
529
- - 각 감정에 대해 가중치를 곱해 관계 변화량 누적
530
  """
531
  recent_memories = self.memory_store.get_recent_memories(limit=memory_limit)
532
- emotion_accumulator = {}
533
 
534
  for mem in recent_memories:
535
  if target_name not in mem.content:
536
  continue # 대상이 언급된 기억만 추출
537
-
538
- if isinstance(mem.emotion, dict):
539
- for emo, value in mem.emotion.items():
540
- if emo not in EMOTION_RELATION_IMPACT:
541
- continue
542
- emotion_accumulator[emo] = emotion_accumulator.get(emo, 0.0) + value
543
-
544
- # 전체 감정 누적값을 바탕으로 관계 변화량 계선
545
- total_delta = 0.0
546
- for emo, value in emotion_accumulator.items():
547
- for emo, value in emotion_accumulator.items():
548
- weight = EMOTION_RELATION_IMPACT[emo]
549
- delta = weight * value
550
- total_delta += delta
551
 
552
- if abs(total_delta) > 0.01:
553
- self.relationships.update_relationship(target_name, delta=total_delta)
554
- print(f"[기억 기반 관계 변화] {self.name} ↔ {target_name}: {total_delta:.2f}")
 
 
 
 
 
 
 
 
 
 
525
  def reflect_memory_emotions_on_relationship(self, target_name: str, memory_limit: int=10):
526
  """
527
  최근 기억에 담긴 감정을 기반으로 대상과의 관계를 갱신
 
 
528
  """
529
  recent_memories = self.memory_store.get_recent_memories(limit=memory_limit)
 
530
 
531
  for mem in recent_memories:
532
  if target_name not in mem.content:
533
  continue # 대상이 언급된 기억만 추출
 
 
 
 
 
 
 
 
 
 
 
 
 
 
534
 
535
+ # 기억에 감정이 없거나, 관계에 영향을 주지 않는 감정이면 건너뜀
536
+ if not mem.emotion or mem.emotion not in EMOTION_RELATION_IMPACT:
537
+ continue
538
+
539
+ # 기억의 중요도를 기반으로 관계 변화 강도 결정 (1~10 -> 0.2~2.0)
540
+ strength = mem.importance / 5.0
541
+ print(f" - 기억 '{mem.content[:20]}...' (감정: {mem.emotion}, 중요도: {mem.importance}) -> 관계에 {strength:.1f}만큼의 강도로 영향을 줍니다.")
542
+ # 관계 업데이트 호출
543
+ self.relationships.update_relationship(target_name, mem.emotion, strength)
544
+
545
+ current_score = self.relationships.get_relationship(target_name)
546
+ print(f"[관계 업데이트 완료] {target_name}와의 최종 관계 점수: {current_score:.1f}")
test.ipynb CHANGED
@@ -3136,91 +3136,81 @@
3136
  },
3137
  {
3138
  "cell_type": "code",
3139
- "execution_count": 1,
3140
  "id": "246a140b",
3141
  "metadata": {},
3142
  "outputs": [
3143
- {
3144
- "name": "stderr",
3145
- "output_type": "stream",
3146
- "text": [
3147
- "c:\\Users\\human\\.conda\\envs\\portfolio\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
3148
- " from .autonotebook import tqdm as notebook_tqdm\n"
3149
- ]
3150
- },
3151
  {
3152
  "name": "stdout",
3153
  "output_type": "stream",
3154
  "text": [
3155
  "\n",
3156
  "[플레이어 입력] 오늘 하루는 최악이었어. 왜 다들 날 무시하는 거지?\n",
3157
- "[요약 기억 저장됨] 사람은 최근 찰리와 함께 농사일을 돕고, 밥에게 선물 받은 검을 마음에 들어 하는 긍정적이거나 일상적인 경험과 더불어 앨리스와 심하게 다투는 갈등 상황도 겪었습니다. 즉, 다양한 사람들과 여러 종류의 상호작용과 활동을 경험한 것으로 보입니다.\n",
3158
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3159
- "[NPC 응답] 으음... 오늘 하루가 최악이었다니... 정말 힘들었겠네.\n",
 
 
3160
  "\n",
3161
- "'다들' 이라니... 정확히 누가, 그랬다는 거야? 무시당하는 기분은... 나도 알 것 같기도 하고...\n",
 
 
3162
  "\n",
3163
  "[플레이어 입력] 고마워. 나 도와줘서 정말 감사했어.\n",
3164
- "[요약 실패] LLM 호출 에러가 발생하여 요약 기억을 저장하지 않습니다. 에러: [LLM Error] 500 An internal error has occurred. Please retry or report in https://developers.generativeai.google/guide/troubleshooting\n",
3165
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3166
- "[NPC 응답] 아냐, 괜찮아. 별거 아니었는데 뭘. 네가 그렇게 말해주니 오히려 내가 고맙네.\n",
3167
  "\n",
3168
  "[플레이어 입력] 그때 화낸 건 미안해. 내 잘못이었어.\n",
3169
- "[요약 기억 저장됨] 인물은 최근 찰리와 농사일을 하고 밥에게 선물을 받는 긍정적인 경험과 더불어, 앨리스와 심하게 다투고 타인에게 무시당한다는 느낌을 받는 부정적인 갈등 상황도 겪었습니다. 즉, 다양한 사람들과 교류하며 좋은 경험과 나쁜 경험을 모두 경험했습니다.\n",
3170
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3171
- "[NPC 응답] 아... 그때 화냈던 거 말이지...?\n",
3172
  "\n",
3173
- "음... 괜찮아. 누구나 가끔은 감정에 휩쓸릴 때가 있는 거니까. 나도 그런 걸.\n",
3174
  "\n",
3175
- "그렇게 말해줘서 고마워.\n",
3176
  "\n",
3177
  "[플레이어 입력] 내가 선물한 책 어땠어?\n",
3178
- "[요약 실패] LLM 호출 에러가 발생하여 요약 기억을 저장하지 않습니다. 에러: [LLM Error] 500 An internal error has occurred. Please retry or report in https://developers.generativeai.google/guide/troubleshooting\n",
3179
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3180
- "[NPC 응답] 아... 네가 선물해 말이지...?\n",
3181
- "\n",
3182
- "(잠깐 생각에 잠긴 듯)\n",
3183
  "\n",
3184
- "음... 꽤... 아니, 아주 흥미로운 내용이었어. 특히 그... (책 내용 중 특정 부분을 떠올리려는 듯) 아, 맞아. 그 이론에 대해 설명하는 부분 말이야. 논리적으로 정리되어 있어서 이해하기 쉬웠어. 내... 마법 연구에도 조금 도움이 같다는 생각도 들었고.\n",
3185
  "\n",
3186
- "...사실 요즘 이것저것 생각할 많아서 머리가 복잡했는데, 네가 책을 읽는 동안에는 다른 생각들을 다 잊고 내용에만 집중할 있었어.\n",
3187
  "\n",
3188
- "정말 좋은 선물이었어. 고마워.\n",
3189
  "\n",
3190
  "[플레이어 입력] 우리 예전에 함께 일했던 거 기억나?\n",
3191
  "[요약 실패] LLM 호출 중 에러가 발생하여 요약 기억을 저장하지 않습니다. 에러: [LLM Error] 500 An internal error has occurred. Please retry or report in https://developers.generativeai.google/guide/troubleshooting\n",
3192
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3193
- "[NPC 응답] ```korean\n",
3194
- "엘라: 응... 우리 함께 일했던 거? 기억나지, 물론.\n",
3195
  "\n",
3196
- "엘라: 음... 어떤 때를 말하는 거야? 우리 함께 했던 일들은... 대부분 좋은 기억으로 남아있으니까.\n",
3197
- "```\n",
 
3198
  "\n",
3199
  "🧠 현재 감정 상태 요약:\n",
3200
- "감정 평균 강도: nostalgia / 대표 감정: [('nostalgia', 3.0)]\n",
3201
  "\n",
3202
  "📚 최근 기억:\n",
3203
- "- [입력] '우리 예전에 함께 일했던 거 기억나?' → [응답] '```korean\n",
3204
- "엘라: 응... 우리 함께 일했던 거? 기억나지, 물론.\n",
3205
- "\n",
3206
- "엘라: 음... 어떤 때를 말하는 거야? 우리 함께 했던 일들은... 대부분 좋은 기억으로 남아있으니까.\n",
3207
- "```' (nostalgia)\n",
3208
- "- [입력] '내가 선물한 책 어땠어?' → [응답] '아... 네가 선물해 준 그 책 말이지...?\n",
3209
  "\n",
3210
- "(잠깐 생각에 잠긴 )\n",
 
3211
  "\n",
3212
- "음... 꽤... 아니, 아주 흥미로운 내용이었어. 특히 그... (책 내용 중 특정 부분을 떠올리려는 듯) 아, 맞아. 그 이론에 대해 설명하는 부분 말이야. 논리적으로 정리되어 있어서 이해하기 쉬웠어. 내... 마법 연구에도 조금 도움이 같다는 생각도 들었고.\n",
3213
  "\n",
3214
- "...사실 요즘 이것저것 생각할 많아서 머리가 복잡했는데, 네가 책을 읽는 동안에는 다른 생각들을 다 잊고 내용에만 집중할 있었어.\n",
3215
  "\n",
3216
- "정말 좋은 선물이었어. 고마워.' (gratitude)\n",
3217
- "- [입력] '그때 화낸 미안해. 잘못이었어.' [응답] '아... 그때 화냈던 말이지...?\n",
 
3218
  "\n",
3219
- "음... 괜찮아. 누구나 가끔은 감정에 휩쓸릴 때가 있는 거니까. 나도 그런 걸.\n",
3220
  "\n",
3221
- "그렇게 말해줘서 고마워.' (gratitude)\n",
3222
- "- 인물은 최근 찰리와 농사일을 하고 밥에게 선물을 받는 긍정적인 경험과 더불어, 앨리스와 심하게 다투고 타인에게 무시당한다는 느낌을 받는 부정적인 갈등 상황도 겪었습니다. 즉, 다양한 사람들과 교류하며 좋은 경험과 나쁜 경험을 모두 경험했습니다. (None)\n",
3223
- "- [입력] '고마워. 나 도와줘서 정말 감사했어.' → [응답] '아냐, 괜찮아. 별거 아니었는데 뭘. 네가 그렇게 말해주니 오히려 내가 다 고맙네.' (gratitude)\n",
3224
  "\n",
3225
  "🔗 플레이어와의 관계:\n",
3226
  "호감 있음\n"
 
3136
  },
3137
  {
3138
  "cell_type": "code",
3139
+ "execution_count": 2,
3140
  "id": "246a140b",
3141
  "metadata": {},
3142
  "outputs": [
 
 
 
 
 
 
 
 
3143
  {
3144
  "name": "stdout",
3145
  "output_type": "stream",
3146
  "text": [
3147
  "\n",
3148
  "[플레이어 입력] 오늘 하루는 최악이었어. 왜 다들 날 무시하는 거지?\n",
3149
+ "[요약 실패] LLM 호출 에러가 발생하여 요약 기억을 저장하지 않습니다. 에러: [LLM Error] 500 An internal error has occurred. Please retry or report in https://developers.generativeai.google/guide/troubleshooting\n",
3150
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3151
+ "[NPC 응답] ...어... 그랬어? 하루가 최악이었다니... 정말 힘들었겠구나.\n",
3152
+ "\n",
3153
+ "(잠깐 침묵하며 네 얼굴을 가만히 바라봐.)\n",
3154
  "\n",
3155
+ "무시당하는 기분이라는 게... 얼마나 사람을 서글프게 만드는지, 나도... 조금은 알 것 같아. 마음이 많이 아팠겠네.\n",
3156
+ "\n",
3157
+ "무슨 일이 있었던 거야? 괜찮다면... 나에게 이야기해 줄 수 있을까? 네 이야기를 들으면... 조금이라도 마음이 편해질지도 모르잖아.\n",
3158
  "\n",
3159
  "[플레이어 입력] 고마워. 나 도와줘서 정말 감사했어.\n",
3160
+ "[요약 기억 저장됨] 사람은 과거에 무시당하는 느낌을 경험했던 것으로 보이며, 최근에는 찰리와 농사를 짓고 밥에게 선물을 받는 사람들과 교류하며 다양한 경험을 했고 특히 어제 앨리스와 심하게 다투기도 했습니다.\n",
3161
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3162
+ "[NPC 응답] \"...아, 고마워. (조금 생각하는 듯) 음... 아니야. 나야말로... 음, 그냥 도울 수 있어서 좋았어. 플레이어 네가 그렇게 고마워해주니... 나도 기쁘네. (아주 살짝 미소) 별거 아니었는데, 그렇게 말해주니 참... 좋네.\"\n",
3163
  "\n",
3164
  "[플레이어 입력] 그때 화낸 건 미안해. 내 잘못이었어.\n",
3165
+ "[요약 기억 저장됨] 제시된 정보를 종합해 보면, 사람은 최근 찰리와 함께 농사를 짓거나 밥에게 검을 선물받는다양한 사람들과 교류하며 여러 경험을 했습니다. 특히 어제는 앨리스와 심하게 다투기도 했습니다.\n",
3166
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3167
+ "[NPC 응답] 아, 아니에요. 괜찮아요.\n",
3168
  "\n",
3169
+ "그렇게 말해주니 오히려 마음이 편해지네요. 저도 그때 조금... 신경 쓰였거든요.\n",
3170
  "\n",
3171
+ "그래도 이렇게 먼저 말해줘서 고마워요. 이제 정말 괜찮아요.\n",
3172
  "\n",
3173
  "[플레이어 입력] 내가 선물한 책 어땠어?\n",
3174
+ "[요약 기억 저장됨] 사람은 최근 찰리와 함께 농사를 짓고 밥에게 선물을 받는 다양한 사람들과 교류했으며, 어제는 앨리스와 심하게 다투는 갈등을 겪었습니다.\n",
3175
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3176
+ "[NPC 응답] 아, 그 책! 정말... 정말 좋았어! 네가 나에게 맞는 책을 선물해줬구나 싶어서 읽는 내내 기뻤어.\n",
 
 
3177
  "\n",
3178
+ "특히 거기에 담긴 마법 이론에 대한 새로운 접근 방식이... 생각을 정말 많이 자극했어. 평소에 내가 고민하던 부분에 대한 실마리를 찾은같기도 하고 말이야.\n",
3179
  "\n",
3180
+ " 덕분에 정말 즐거운 시간을 보낼 있었어. 고마워! 요즘 이것저것 신경 일이 있었는데, 책 읽는 동안은 다 잊고 몰입할있었어. 네 덕분이야.\n",
3181
  "\n",
3182
+ "혹시 너도 책 읽어봤어? 어떤 부분이 가장 흥미로웠는지 궁금하네.\n",
3183
  "\n",
3184
  "[플레이어 입력] 우리 예전에 함께 일했던 거 기억나?\n",
3185
  "[요약 실패] LLM 호출 중 에러가 발생하여 요약 기억을 저장하지 않습니다. 에러: [LLM Error] 500 An internal error has occurred. Please retry or report in https://developers.generativeai.google/guide/troubleshooting\n",
3186
  "[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
3187
+ "[NPC 응답] 우리 예전에 함께 일했던 거? 어머, 당연히 기억하지! 😊\n",
 
3188
  "\n",
3189
+ "그때 생각하면... 왠지 모르게 기분이 좋아져. 함께 했던 시간들은... 나에게는 좋은 기억으로 남아있거든. 왜 갑자기 그 생각이 났어?\n",
3190
+ " - 기억 '[입력] '고마워. 나 도와줘서 정말...' (감정: joy, 중요도: 7) -> 관계에 1.4만큼의 강도로 영향을 줍니다.\n",
3191
+ "[관계 업데이트 완료] 플레이어와의 최종 관계 점수: 12.1\n",
3192
  "\n",
3193
  "🧠 현재 감정 상태 요약:\n",
3194
+ "감정 평균 강도: joy / 대표 감정: [('joy', 3.0), ('interest', 3.0), ('relief', 3.0)]\n",
3195
  "\n",
3196
  "📚 최근 기억:\n",
3197
+ "- [입력] '우리 예전에 함께 일했던 거 기억나?' → [응답] '우리 예전에 함께 일했던 거? 어머, 당연히 기억하지! 😊\n",
 
 
 
 
 
3198
  "\n",
3199
+ "그때 생각하면... 왠지 모르게 기분이 좋아져. 함께 했던 시간들은... 나에게는 좋은 기억으로 남아있거든. 왜 갑자기 그 생각이 났어?' (nostalgia)\n",
3200
+ "- [입력] '내가 선물한 책 어땠어?' → [응답] '아, 그 책! 정말... 정말 좋았어! 네가 나에게 딱 맞는 책을 선물해줬구나 싶어서 읽는 내내 기뻤어.\n",
3201
  "\n",
3202
+ "특히 거기에 담긴 마법 이론에 대한 새로운 접근 방식이... 생각을 정말 많이 자극했어. 평소에 내가 고민하던 부분�� 대한 실마리를 찾은같기도 하고 말이야.\n",
3203
  "\n",
3204
+ " 덕분에 정말 즐거운 시간을 보낼 있었어. 고마워! 요즘 이것저것 신경 일이 있었는데, 책 읽는 동안은 다 잊고 몰입할있었어. 네 덕분이야.\n",
3205
  "\n",
3206
+ "혹시 너도 책 읽어봤어? 어떤 부분이 가장 흥미로웠는지 궁금하네.' (gratitude)\n",
3207
+ "- 사람은 최근 찰리와 함께 농사를 짓고 밥에게 선물을 받는 다양한 사람들과 교류했으며, 어제는 앨리스와 심하게 다투는 큰 갈등을 겪었습니다. (joy)\n",
3208
+ "- [입력] '그때 화낸 건 미안해. 내 잘못이었어.' → [응답] '아, 아니에요. 괜찮아요.\n",
3209
  "\n",
3210
+ "그렇게 말해주니 오히려 마음이 편해지네요. 저도 그때 조금... 신경 쓰였거든요.\n",
3211
  "\n",
3212
+ "그래도 이렇게 먼저 말해줘서 고마워요. 이제 정말 괜찮아요.' (relief)\n",
3213
+ "- 제시된 정보를 종합해 보면, 사람은 최근 찰리와 함께 농사를 짓거나 밥에게 검을 선물받는다양한 사람들과 교류하며 여러 경험을 했습니다. 특히 어제는 앨리스와 심하게 다투기도 했습니다. (joy)\n",
 
3214
  "\n",
3215
  "🔗 플레이어와의 관계:\n",
3216
  "호감 있음\n"