Spaces:
Sleeping
Sleeping
humanda5
commited on
Commit
·
d505821
1
Parent(s):
c08ff6f
코드 리팩토링
Browse files- npc_social_network/data/saves/simulation_state.pkl +0 -0
- npc_social_network/data/vectorstores/bob.faiss +0 -0
- npc_social_network/data/vectorstores/charlie.faiss +0 -0
- npc_social_network/models/llm_helper.py +4 -4
- npc_social_network/npc/npc_base.py +18 -23
- npc_social_network/npc/npc_planner.py +1 -1
- npc_social_network/routes/npc_route.py +1 -1
npc_social_network/data/saves/simulation_state.pkl
CHANGED
Binary files a/npc_social_network/data/saves/simulation_state.pkl and b/npc_social_network/data/saves/simulation_state.pkl differ
|
|
npc_social_network/data/vectorstores/bob.faiss
CHANGED
Binary files a/npc_social_network/data/vectorstores/bob.faiss and b/npc_social_network/data/vectorstores/bob.faiss differ
|
|
npc_social_network/data/vectorstores/charlie.faiss
CHANGED
Binary files a/npc_social_network/data/vectorstores/charlie.faiss and b/npc_social_network/data/vectorstores/charlie.faiss differ
|
|
npc_social_network/models/llm_helper.py
CHANGED
@@ -240,7 +240,7 @@ def generate_dialogue_action(speaker: "NPC", target: "NPC", conversation: "Conve
|
|
240 |
당신의 성격과 상대방과의 관계, 관련된 과거 기억, 그리고 지금까지의 대화 흐름을 모두 고려하여 가장 현실적이고 깊이 있는 다음 대사를 만드세요.
|
241 |
|
242 |
# Inner State
|
243 |
-
- 당신의 성격: {speaker.personality.
|
244 |
- "{target.korean_name}"와의 관계: {speaker.relationships.get_relationship_summary(target.name)}
|
245 |
|
246 |
# Reputation Information
|
@@ -299,10 +299,10 @@ def evaluate_social_action_outcome(initiator: "NPC", target: "NPC", action_type:
|
|
299 |
"""두 NPC의 성격과 관계를 바탕으로 사회적 행동의 결과를 추론합니다."""
|
300 |
prompt = f"""
|
301 |
# Context
|
302 |
-
- 행동자: "{initiator.korean_name}" (성격: {initiator.personality.
|
303 |
-
- 대상자: "{target.korean_name}" (성격: {target.personality.
|
304 |
- 둘의 관계: {initiator.relationships.get_relationship_summary(target.name)}
|
305 |
-
- 행동:
|
306 |
|
307 |
# Your Task
|
308 |
위 상황을 바탕으로, 이 행동의 결과를 현실적으로 추론해주세요.
|
|
|
240 |
당신의 성격과 상대방과의 관계, 관련된 과거 기억, 그리고 지금까지의 대화 흐름을 모두 고려하여 가장 현실적이고 깊이 있는 다음 대사를 만드세요.
|
241 |
|
242 |
# Inner State
|
243 |
+
- 당신의 성격: {speaker.personality.get_narrative_summary()}
|
244 |
- "{target.korean_name}"와의 관계: {speaker.relationships.get_relationship_summary(target.name)}
|
245 |
|
246 |
# Reputation Information
|
|
|
299 |
"""두 NPC의 성격과 관계를 바탕으로 사회적 행동의 결과를 추론합니다."""
|
300 |
prompt = f"""
|
301 |
# Context
|
302 |
+
- 행동자: "{initiator.korean_name}" (성격: {initiator.personality.get_narrative_summary()})
|
303 |
+
- 대상자: "{target.korean_name}" (성격: {target.personality.get_narrative_summary()})
|
304 |
- 둘의 관계: {initiator.relationships.get_relationship_summary(target.name)}
|
305 |
+
- 행동: 행동자('{initiator.korean_name}')는 대상자('{target.korean_name}')를 도와주려고 합니다. (Action: {action_type})
|
306 |
|
307 |
# Your Task
|
308 |
위 상황을 바탕으로, 이 행동의 결과를 현실적으로 추론해주세요.
|
npc_social_network/npc/npc_base.py
CHANGED
@@ -46,36 +46,31 @@ class PersonalityManager:
|
|
46 |
def keys(self):
|
47 |
return self.traits.keys()
|
48 |
|
49 |
-
def
|
50 |
-
"""
|
51 |
-
|
52 |
-
|
53 |
sensitive = self.traits.get("sensitive", 0.5)
|
54 |
stoic = self.traits.get("stoic", 0.5)
|
55 |
-
|
56 |
|
57 |
-
|
58 |
-
if sensitive > 0.7:
|
59 |
-
|
60 |
-
elif sensitive < 0.3:
|
61 |
-
|
62 |
else:
|
63 |
-
|
64 |
-
|
65 |
-
if
|
66 |
-
|
67 |
-
elif
|
68 |
-
|
69 |
-
|
70 |
-
if cognitive_bias > 0.7:
|
71 |
-
summary_parts.append("이성적이고 논리적인 사고를 선호합니다.")
|
72 |
-
elif cognitive_bias < 0.3:
|
73 |
-
summary_parts.append("직관과 감정에 따라 판단하는 경향이 있습니다.")
|
74 |
|
75 |
-
if not
|
76 |
return "평범하고 균형 잡힌 성격입니다."
|
77 |
|
78 |
-
return "
|
79 |
|
80 |
# NPC 클래스 정의
|
81 |
class NPC:
|
|
|
46 |
def keys(self):
|
47 |
return self.traits.keys()
|
48 |
|
49 |
+
def get_narrative_summary(self) -> str:
|
50 |
+
"""현재 성격 수치를 바탕으로 서술적인 묘사를 동적으로 생성"""
|
51 |
+
narratives = []
|
52 |
+
|
53 |
sensitive = self.traits.get("sensitive", 0.5)
|
54 |
stoic = self.traits.get("stoic", 0.5)
|
55 |
+
congitive_bias = self.traits.get("cognitive_bias", 0.5)
|
56 |
|
57 |
+
# 각 성격 축에 대한 서술적 묘사 생성
|
58 |
+
if sensitive > 0.7 and stoic < 0.3:
|
59 |
+
narratives.append("감수성이 매우 풍부하고 감정의 영향을 쉽게 받는 편입니다.")
|
60 |
+
elif stoic > 0.7 and sensitive < 0.3:
|
61 |
+
narratives.append("감정을 거의 드러내지 않는 과묵하고 무던한 성향입니다.")
|
62 |
else:
|
63 |
+
narratives.append("상황에 따라 감정을 표현할 줄 아는 균형 잡힌 모습을 보입니다.")
|
64 |
+
|
65 |
+
if congitive_bias > 0.7:
|
66 |
+
narratives.append("대화를 할 때 논리적이고 사실에 기반하여 판단하려는 경향이 강합니다.")
|
67 |
+
elif congitive_bias < 0.3:
|
68 |
+
narratives.append("직관과 감정에 따라 상황을 판단하는 경향이 있습니다.")
|
|
|
|
|
|
|
|
|
|
|
69 |
|
70 |
+
if not narratives:
|
71 |
return "평범하고 균형 잡힌 성격입니다."
|
72 |
|
73 |
+
return "".join(narratives)
|
74 |
|
75 |
# NPC 클래스 정의
|
76 |
class NPC:
|
npc_social_network/npc/npc_planner.py
CHANGED
@@ -115,7 +115,7 @@ class PlannerManager:
|
|
115 |
print(f"[{self.npc.korean_name}] 계획 생성에 최종 실패했습니다.")
|
116 |
|
117 |
def complete_step(self):
|
118 |
-
"""현재
|
119 |
if not self.has_active_plan():
|
120 |
return
|
121 |
|
|
|
115 |
print(f"[{self.npc.korean_name}] 계획 생성에 최종 실패했습니다.")
|
116 |
|
117 |
def complete_step(self):
|
118 |
+
"""현재 단계를 완료하고 다음 단계로 진행. 계획이 모두 끝나면 모표를 완료 처리"""
|
119 |
if not self.has_active_plan():
|
120 |
return
|
121 |
|
npc_social_network/routes/npc_route.py
CHANGED
@@ -108,7 +108,7 @@ def get_npc_details(npc_name):
|
|
108 |
|
109 |
details = {
|
110 |
"name": npc.korean_name, "age": npc.age, "job": npc.job,
|
111 |
-
"personality_summary": npc.personality.
|
112 |
"emotions": npc.get_composite_emotion_state(top_n=5),
|
113 |
"goals": npc.planner.current_goal.description if npc.planner.has_active_plan() else "특별한 목표 없음",
|
114 |
"memories": [mem.content for mem in npc.memory_store.get_recent_memories(limit=10)]
|
|
|
108 |
|
109 |
details = {
|
110 |
"name": npc.korean_name, "age": npc.age, "job": npc.job,
|
111 |
+
"personality_summary": npc.personality.get_narrative_summary(),
|
112 |
"emotions": npc.get_composite_emotion_state(top_n=5),
|
113 |
"goals": npc.planner.current_goal.description if npc.planner.has_active_plan() else "특별한 목표 없음",
|
114 |
"memories": [mem.content for mem in npc.memory_store.get_recent_memories(limit=10)]
|