Spaces:
Sleeping
Sleeping
12단계까지 모든 오류 수정 및 테스트 완료
Browse files- npc_social_network/README.txt +1 -1
- npc_social_network/models/llm_prompt_builder.py +26 -12
- npc_social_network/npc/npc_base.py +12 -20
- test.ipynb +35 -45
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단계 | 감정 ↔ 관계 변화 구조 구현 |
|
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 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
|
|
|
|
33 |
|
34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
553 |
-
|
554 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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":
|
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 |
-
"[요약
|
3158 |
"[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
|
3159 |
-
"[NPC 응답]
|
|
|
|
|
3160 |
"\n",
|
3161 |
-
"
|
|
|
|
|
3162 |
"\n",
|
3163 |
"[플레이어 입력] 고마워. 나 도와줘서 정말 감사했어.\n",
|
3164 |
-
"[요약
|
3165 |
"[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
|
3166 |
-
"[NPC 응답]
|
3167 |
"\n",
|
3168 |
"[플레이어 입력] 그때 화낸 건 미안해. 내 잘못이었어.\n",
|
3169 |
-
"[요약 기억 저장됨]
|
3170 |
"[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
|
3171 |
-
"[NPC 응답]
|
3172 |
"\n",
|
3173 |
-
"
|
3174 |
"\n",
|
3175 |
-
"
|
3176 |
"\n",
|
3177 |
"[플레이어 입력] 내가 선물한 책 어땠어?\n",
|
3178 |
-
"[요약
|
3179 |
"[Personality Update] 엘라 → sensitive: 1.00, stoic: 0.00, cognitive_bias: 1.00\n",
|
3180 |
-
"[NPC 응답]
|
3181 |
-
"\n",
|
3182 |
-
"(잠깐 생각에 잠긴 듯)\n",
|
3183 |
"\n",
|
3184 |
-
"
|
3185 |
"\n",
|
3186 |
-
"
|
3187 |
"\n",
|
3188 |
-
"
|
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 응답]
|
3194 |
-
"엘라: 응... 우리 함께 일했던 거? 기억나지, 물론.\n",
|
3195 |
"\n",
|
3196 |
-
"
|
3197 |
-
"
|
|
|
3198 |
"\n",
|
3199 |
"🧠 현재 감정 상태 요약:\n",
|
3200 |
-
"감정 평균 강도:
|
3201 |
"\n",
|
3202 |
"📚 최근 기억:\n",
|
3203 |
-
"- [입력] '우리 예전에 함께 일했던 거 기억나?' → [응답] '
|
3204 |
-
"엘라: 응... 우리 함께 일했던 거? 기억나지, 물론.\n",
|
3205 |
-
"\n",
|
3206 |
-
"엘라: 음... 어떤 때를 말하는 거야? 우리 함께 했던 일들은... 대부분 좋은 기억으로 남아있으니까.\n",
|
3207 |
-
"```' (nostalgia)\n",
|
3208 |
-
"- [입력] '내가 선물한 책 어땠어?' → [응답] '아... 네가 선물해 준 그 책 말이지...?\n",
|
3209 |
"\n",
|
3210 |
-
"
|
|
|
3211 |
"\n",
|
3212 |
-
"
|
3213 |
"\n",
|
3214 |
-
"
|
3215 |
"\n",
|
3216 |
-
"
|
3217 |
-
"-
|
|
|
3218 |
"\n",
|
3219 |
-
"
|
3220 |
"\n",
|
3221 |
-
"
|
3222 |
-
"-
|
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"
|