Update app.py
Browse files
app.py
CHANGED
|
@@ -13,7 +13,7 @@ generation_config = {
|
|
| 13 |
"temperature": 0.75,
|
| 14 |
"top_p": 0.8,
|
| 15 |
"top_k": 40,
|
| 16 |
-
"max_output_tokens":
|
| 17 |
}
|
| 18 |
|
| 19 |
model = genai.GenerativeModel(
|
|
@@ -21,28 +21,28 @@ model = genai.GenerativeModel(
|
|
| 21 |
generation_config=generation_config,
|
| 22 |
)
|
| 23 |
|
| 24 |
-
# MBTI 유형 정보
|
| 25 |
mbti_types = {
|
| 26 |
-
"
|
| 27 |
-
"
|
| 28 |
-
"
|
| 29 |
-
"
|
| 30 |
-
"
|
| 31 |
-
"
|
| 32 |
-
"
|
| 33 |
-
"
|
| 34 |
-
"
|
| 35 |
-
"
|
| 36 |
-
"
|
| 37 |
-
"
|
| 38 |
-
"
|
| 39 |
-
"
|
| 40 |
-
"
|
| 41 |
-
"
|
| 42 |
}
|
| 43 |
|
| 44 |
-
# 관계 유형
|
| 45 |
-
|
| 46 |
"연인": "Romantic Couple",
|
| 47 |
"부부": "Married Couple",
|
| 48 |
"친구": "Friends",
|
|
@@ -51,33 +51,52 @@ relationship_types = {
|
|
| 51 |
"기타": "Others"
|
| 52 |
}
|
| 53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
|
| 59 |
-
|
| 60 |
-
|
|
|
|
|
|
|
|
|
|
| 61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
[대상자 정보]
|
| 63 |
-
|
| 64 |
-
- {partner_type_info}
|
| 65 |
[관계]
|
| 66 |
- {relationship}
|
| 67 |
[상황]
|
| 68 |
- {situation}
|
| 69 |
-
|
| 70 |
[요청 사항]
|
| 71 |
-
1. **각 대상자의 MBTI 유형에 대한
|
| 72 |
-
- 핵심 가치, 성격적 특징, 강점과 약점, 주의할 점 등을
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
-
|
| 76 |
-
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
-
|
| 80 |
-
-
|
|
|
|
| 81 |
"""
|
| 82 |
|
| 83 |
full_text = ""
|
|
@@ -94,39 +113,41 @@ def generate_relationship_scenario(my_name, my_gender, my_mbti, partner_name, pa
|
|
| 94 |
|
| 95 |
return full_text
|
| 96 |
|
| 97 |
-
|
| 98 |
# Streamlit UI
|
| 99 |
st.set_page_config(page_title="MBTI 관계 시뮬레이터", page_icon="🤝")
|
| 100 |
-
|
| 101 |
st.title("🤝 MBTI 관계 시뮬레이터")
|
| 102 |
-
st.write("
|
| 103 |
|
| 104 |
-
# 사이드바에 탭
|
| 105 |
with st.sidebar:
|
| 106 |
-
tabs = st.tabs(["
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
generate_button = st.button("시나리오 생성 ➡️")
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
# 메인 영역 - 출력
|
| 125 |
scenario_output_area = st.empty()
|
| 126 |
|
| 127 |
if generate_button:
|
| 128 |
-
full_text = generate_relationship_scenario(
|
| 129 |
-
my_name, my_gender, my_mbti, partner_name, partner_gender, partner_mbti, relationship, situation
|
| 130 |
-
)
|
| 131 |
if full_text:
|
| 132 |
-
scenario_output_area.markdown(markdown.markdown(full_text), unsafe_allow_html=True)
|
|
|
|
|
|
| 13 |
"temperature": 0.75,
|
| 14 |
"top_p": 0.8,
|
| 15 |
"top_k": 40,
|
| 16 |
+
"max_output_tokens": 8192,
|
| 17 |
}
|
| 18 |
|
| 19 |
model = genai.GenerativeModel(
|
|
|
|
| 21 |
generation_config=generation_config,
|
| 22 |
)
|
| 23 |
|
| 24 |
+
# MBTI 유형 정보 (상세 설명 고도화)
|
| 25 |
mbti_types = {
|
| 26 |
+
"INTJ": "전략가 (Architect) - 독창적이고 결단력 있는 성격으로, 지식과 논리에 근거한 장기적인 계획을 세우는 것을 좋아합니다. 비판적 사고와 독립적인 사고를 중시하며 효율성을 추구합니다.",
|
| 27 |
+
"INTP": "논리주의자 (Logician) - 혁신적인 문제 해결을 즐기며, 이론적이고 분석적인 성격입니다. 지식 탐구와 분석을 즐기며 복잡한 아이디어를 다루는 데 능합니다.",
|
| 28 |
+
"ENTJ": "지휘관 (Commander) - 목표를 향해 밀어붙이는 리더로서, 조직적이고 전략적인 사고를 합니다. 다른 사람을 이끌고 계획을 실행에 옮기는 것을 즐기며, 높은 목표를 추구합니다.",
|
| 29 |
+
"ENTP": "변론가 (Debater) - 토론과 논쟁을 통해 새로운 아이디어를 찾는 것을 좋아합니다. 호기심이 많고 창의적이며, 혁신적인 해결책을 찾기 위해 도전하는 것을 즐깁니다.",
|
| 30 |
+
"INFJ": "옹호자 (Advocate) - 도덕적인 신념과 직관력으로 다른 사람들을 돕고자 합니다. 공감 능력이 뛰어나고 깊이 있는 관계를 중시하며, 큰 비전을 가지고 세상을 더 나은 곳으로 만드는 것을 추구합니다.",
|
| 31 |
+
"INFP": "중재자 (Mediator) - 따뜻하고 이상적인 성격으로, 사람들의 내면을 이해하고 돕고자 합니다. 예술적이고 창의적이며, 자신의 가치를 소중히 여기며 사람들의 감정을 존중합니다.",
|
| 32 |
+
"ENFJ": "주도자 (Protagonist) - 다른 사람을 이끄는 리더로서, 사람들의 성장을 돕고 그들과 함께 목표를 이루고자 합니다. 사회적이며 배려심이 많고, 타인의 필요에 민감합니다.",
|
| 33 |
+
"ENFP": "활동가 (Campaigner) - 열정적이고 창의적이며, 새로운 가능성을 탐색하는 것을 즐깁니다. 인간관계를 중시하고, 주변 사람들에게 긍정적인 영향을 주고 싶어합니다.",
|
| 34 |
+
"ISTJ": "현실주의자 (Logistician) - 책임감 있고 실용적인 성격으로, 계획을 세우고 신뢰할 수 있는 결과를 추구합니다. 전통적인 가치를 중시하며 신뢰성과 성실성을 중요하게 생각합니다.",
|
| 35 |
+
"ISFJ": "수호자 (Defender) - 따뜻하고 섬세한 성격으로, 타인을 돕는 데 집중합니다. 실질적인 도움을 제공하고자 하며, 타인의 필요를 돌보는 데 헌신적입니다.",
|
| 36 |
+
"ESTJ": "경영자 (Executive) - 조직적이고 현실적인 접근을 선호하며, 질서와 효율을 중요시합니다. 강한 리더십을 발휘하여 목표를 달성하고, 전통과 규칙을 준수합니다.",
|
| 37 |
+
"ESFJ": "관리자 (Consul) - 사회적이고 배려심이 많은 성격으로, 주변 사람들을 돕고 공동체의 조화를 유지하고자 합니다. 타인의 감정에 민감하며 협력과 지원을 중요하게 생각합니다.",
|
| 38 |
+
"ISTP": "장인 (Virtuoso) - 도전적인 문제를 해결하고, 도구와 기술을 다루는 데 능숙합니다. 논리적이고 실용적인 사고를 하며, 손으로 무언가를 만드는 것을 즐깁니다.",
|
| 39 |
+
"ISFP": "모험가 (Adventurer) - 감각적이고 예술적인 성향을 가진 성격으로, 새로운 경험을 즐깁니다. 자신의 감정에 충실하며, 순간의 아름다움을 찾고자 합니다.",
|
| 40 |
+
"ESTP": "기업가 (Entrepreneur) - 적극적이고 현실적인 성격으로, 새로운 기회를 찾아 모험하는 것을 좋아합니다. 즉흥적이고 행동 중심적이며, 도전에 맞서기를 두려워하지 않습니다.",
|
| 41 |
+
"ESFP": "연예인 (Entertainer) - 사람들과의 상호작용을 즐기며, 주변에 즐거움을 주고 싶어하는 성격입니다. 개방적이고 감각적인 성향을 가지며, 현재를 즐기고자 합니다."
|
| 42 |
}
|
| 43 |
|
| 44 |
+
# 관계 유형 (2인 관계와 다인 관계 분리)
|
| 45 |
+
relationship_types_two = {
|
| 46 |
"연인": "Romantic Couple",
|
| 47 |
"부부": "Married Couple",
|
| 48 |
"친구": "Friends",
|
|
|
|
| 51 |
"기타": "Others"
|
| 52 |
}
|
| 53 |
|
| 54 |
+
relationship_types_multiple = {
|
| 55 |
+
"친구": "Friends",
|
| 56 |
+
"가족": "Family",
|
| 57 |
+
"직장 동료": "Coworkers",
|
| 58 |
+
"프로젝트 팀": "Project Team",
|
| 59 |
+
"스터디 그룹": "Study Group",
|
| 60 |
+
"기타": "Others"
|
| 61 |
+
}
|
| 62 |
|
| 63 |
+
# 추가된 기능: 대화형 입력 및 결과 다운로드
|
| 64 |
+
def download_results(full_text):
|
| 65 |
+
st.download_button(
|
| 66 |
+
label="시나리오 다운로드",
|
| 67 |
+
data=full_text,
|
| 68 |
+
file_name="relationship_scenario.txt",
|
| 69 |
+
mime="text/plain"
|
| 70 |
+
)
|
| 71 |
|
| 72 |
+
def generate_relationship_scenario(people, relationship, situation):
|
| 73 |
+
|
| 74 |
+
def create_type_info(person):
|
| 75 |
+
type_info = f"{person['name']} ({person['gender']}): {person['type']} ({mbti_types.get(person['type'], '알 수 없는 유형')})"
|
| 76 |
+
return type_info
|
| 77 |
|
| 78 |
+
people_info = "\n".join([f"- {create_type_info(person)}" for person in people])
|
| 79 |
+
|
| 80 |
+
system_prompt = f"""
|
| 81 |
+
당신은 MBTI 전문가이자 관계 코치입니다. 아래 제공된 정보를 바탕으로 관계 시나리오를 작성해주세요. 각 유형의 이름은 해당 유형의 대표적인 성격을 나타내므로, 이름에 지나치게 얽매이지 않고 전체적인 맥락을 반영하여 시나리오를 작성해 주세요.
|
| 82 |
[대상자 정보]
|
| 83 |
+
{people_info}
|
|
|
|
| 84 |
[관계]
|
| 85 |
- {relationship}
|
| 86 |
[상황]
|
| 87 |
- {situation}
|
|
|
|
| 88 |
[요청 사항]
|
| 89 |
+
1. **각 대상자의 MBTI 유형에 대한 심층 설명:**
|
| 90 |
+
- 각 대상자의 핵심 가치, 성격적 특징, 행동 패턴, 강점과 약점, 그리고 주의할 점 등을 자세히 설명해주세요.
|
| 91 |
+
- MBTI 유형에 따른 동기와 두려움, 주요 행동 경향 등을 심도 있게 서술해주세요.
|
| 92 |
+
2. **MBTI 유형을 바탕으로 한 구체적인 시나리오 작성:**
|
| 93 |
+
- 상황에 맞는 시나리오를 단계별로 작성하고, 각 단계를 구체적인 대화 장면으로 묘사해주세요.
|
| 94 |
+
- 각 단계에서 등장인물들의 감정 변화와 반응을 상세히 묘사하고, 각 인물의 말과 행동이 MBTI 특성과 어떻게 연결되는지 부가 설명해주세요.
|
| 95 |
+
- 등장인물 간의 상호작용과 그들이 각자의 유형에서 어떻게 행동하고 반응하는지를 상세히 설명해주세요.
|
| 96 |
+
3. **서로 이해하기 위한 실질적인 조언:**
|
| 97 |
+
- 각 대상자가 서로의 MBTI 유형을 이해하고, 더 나은 관계를 형성하기 위한 구체적인 조언을 제시해주세요.
|
| 98 |
+
- 조언에 모든 등장인물의 이름, 성별, MBTI 유형이 모두 반영되어야 합니다.
|
| 99 |
+
- 각 대상자가 다른 대상자에게 해주면 좋은 말과 행동의 구체적인 예와 그 이유도 상세히 설명해주세요.
|
| 100 |
"""
|
| 101 |
|
| 102 |
full_text = ""
|
|
|
|
| 113 |
|
| 114 |
return full_text
|
| 115 |
|
|
|
|
| 116 |
# Streamlit UI
|
| 117 |
st.set_page_config(page_title="MBTI 관계 시뮬레이터", page_icon="🤝")
|
|
|
|
| 118 |
st.title("🤝 MBTI 관계 시뮬레이터")
|
| 119 |
+
st.write("참여자들의 MBTI 유형, 관계, 상황을 입력하여 관계 시나리오를 생성해보세요.")
|
| 120 |
|
| 121 |
+
# 사이드바에 탭 생성
|
| 122 |
with st.sidebar:
|
| 123 |
+
tabs = st.tabs(["참여자 정보", "관계 및 상황 설정"])
|
| 124 |
+
|
| 125 |
+
# 참여자 정보 탭
|
| 126 |
+
with tabs[0]:
|
| 127 |
+
num_people = st.number_input("참여자 수", min_value=2, value=2)
|
| 128 |
+
people = []
|
| 129 |
+
for i in range(num_people):
|
| 130 |
+
with st.expander(f"참여자 {i+1} 정보"):
|
| 131 |
+
person = {}
|
| 132 |
+
person['name'] = st.text_input(f"이름/닉네임", key=f"name_{i}")
|
| 133 |
+
person['gender'] = st.radio("성별", ["남성", "여성"], key=f"gender_{i}")
|
| 134 |
+
person['type'] = st.selectbox("MBTI 유형", list(mbti_types.keys()), key=f"type_{i}")
|
| 135 |
+
people.append(person)
|
| 136 |
+
|
| 137 |
+
# 관계 및 상황 설정 탭
|
| 138 |
+
with tabs[1]:
|
| 139 |
+
if num_people == 2:
|
| 140 |
+
relationship = st.selectbox("관계 유형", list(relationship_types_two.keys()))
|
| 141 |
+
else:
|
| 142 |
+
relationship = st.selectbox("관계 유형", list(relationship_types_multiple.keys()))
|
| 143 |
+
situation = st.text_area("상황 (예: 갈등 상황, 특별한 이벤트 등)", height=150)
|
| 144 |
+
|
| 145 |
+
# 메인 영역 - 출력 및 버튼
|
| 146 |
generate_button = st.button("시나리오 생성 ➡️")
|
|
|
|
|
|
|
|
|
|
| 147 |
scenario_output_area = st.empty()
|
| 148 |
|
| 149 |
if generate_button:
|
| 150 |
+
full_text = generate_relationship_scenario(people, relationship, situation)
|
|
|
|
|
|
|
| 151 |
if full_text:
|
| 152 |
+
scenario_output_area.markdown(markdown.markdown(full_text), unsafe_allow_html=True)
|
| 153 |
+
download_results(full_text)
|