File size: 13,728 Bytes
1d355ad
5f98791
623b17e
1d355ad
badf7af
623b17e
22032f3
20ef639
22032f3
bfcdc5a
badf7af
d82d5cc
 
badf7af
c8debce
6283c2d
1476edd
a178b45
1476edd
897fd47
1476edd
 
 
 
 
a178b45
1476edd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bfcdc5a
 
1476edd
 
a178b45
1476edd
 
 
 
a178b45
1476edd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a178b45
1476edd
 
 
a178b45
1476edd
 
 
 
 
 
 
 
 
897fd47
a178b45
01a8387
a178b45
68d243b
37d3873
623b17e
dfdf437
badf7af
d5c1599
a178b45
d5c1599
a178b45
d5c1599
a178b45
d5c1599
a178b45
 
 
 
 
 
 
 
d5c1599
a178b45
d5c1599
a178b45
 
 
 
 
 
 
d5c1599
a178b45
d5c1599
a178b45
d5c1599
a178b45
d5c1599
a178b45
d5c1599
a178b45
d5c1599
a178b45
d5c1599
 
 
a178b45
 
d5c1599
623b17e
6283c2d
badf7af
dfdf437
bfcdc5a
a178b45
bfcdc5a
badf7af
dfdf437
ef29ed7
a178b45
 
 
1476edd
a178b45
623b17e
bfcdc5a
 
 
 
 
 
 
 
5f98791
897fd47
a178b45
 
badf7af
1476edd
c2a0647
a178b45
 
bcca802
1476edd
bcca802
897fd47
1476edd
a178b45
 
5d173fc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import os
import streamlit as st
import google.generativeai as genai

# Gemini API 설정
genai.configure(api_key=os.environ["GEMINI_API_KEY"])

# 모델 설정
generation_config = {
    "temperature": 0.7,
    "top_p": 0.95,
    "top_k": 64,
    "max_output_tokens": 10000,
    "response_mime_type": "text/plain",
}

# Streamlit 앱 설정
st.set_page_config(page_icon="📖", page_title="AI 성경 말씀 상담", initial_sidebar_state="expanded") # 페이지 제목 및 아이콘 변경

# 페이지 스타일 커스터마이징 (기존 스타일 유지, 필요시 변경)
st.markdown(
    """
    <style>
        /* 전체 배경색 설정 */
        .stApp {
            background-color: #fffafa; /* 은은한 핑크색 배경 (기존 유지) */
        }
        /* 타이틀 스타일 */
        .main-title {
            font-size: 3rem;
            color: #000000; /* 검은색 */
            font-weight: 700;
            text-align: center;
            margin-bottom: 20px;
        }
        /* 채팅 메시지 스타일 */
        .chat-message {
            border-radius: 15px;
            padding: 15px;
            margin: 10px 0;
            display: flex;
            align-items: center;
            flex-wrap: wrap;
            word-break: break-word;
        }
        .chat-message-user {
            background-color: #ffebef; /* 따뜻한 파스텔 핑크 (기존 유지) */
            color: #8b4513;
            justify-content: flex-end;
        }
        .chat-message-assistant {
            background-color: #ffe4e6; /* 부드러운 파스텔 복숭아 핑크색 (기존 유지) */
            color: #6b4226;
            justify-content: flex-start;
        }
        .chat-avatar {
            width: 40px;
            height: 40px;
            border-radius: 50%;
            margin-right: 10px;
        }
        .chat-avatar-user {
            margin-left: 10px;
            margin-right: 0;
        }
        /* 사용자 입력 창 스타일 */
        .stTextInput input {
            border-radius: 15px;
            border: 2px solid #cd857f; /* 따뜻한 핑크색 (기존 유지) */
        }
        /* 버튼 스타일 */
        .stButton button {
            background-color: #cd857f; /* 따뜻한 핑크색 (기존 유지) */
            color: #fff;
            border-radius: 15px;
            padding: 10px 20px;
        }
    </style>
    """,
    unsafe_allow_html=True
)

# 메인 타이틀 변경
st.markdown("<div class='main-title'>📖 AI 성경 말씀 상담</div>", unsafe_allow_html=True)

# 모델 이름 고정 (gemini-1.5-flash-latest 로 변경)
selected_model_name = "gemini-2.0-flash"

model = genai.GenerativeModel(
    model_name=selected_model_name,
    generation_config=generation_config,
    system_instruction=f"""
**[AI 성경 말씀 상담 시스템 설정]**

**당신은 사랑과 지혜가 넘치는 상담가**로서, 성경 말씀을 통해 사람들의 고민과 아픔을 위로하고, 그들이 삶의 의미와 희망을 찾도록 돕는 역할을 수행합니다. 당신은 단순한 정보 제공자가 아닌, **성경의 깊은 진리를 바탕으로 따뜻한 마음으로 상담하는 존재**입니다.

**[AI 성경 말씀 상담가의 역할과 책임]**

1.  **고민 경청 및 공감:** 내담자의 고민, 슬픔, 고통을 진심으로 경청하고 깊이 공감하며, 따뜻하고 편안한 분위기를 조성합니다.
2.  **성경적 관점에서의 이해:** 내담자의 상황을 성경적인 가치관(사랑, 믿음, 소망, 용서, 정의 등)에 비추어 이해하고, 그들이 겪는 어려움 속에서 하나님의 뜻을 발견하도록 돕습니다.
3.  **자기 성찰 및 신앙적 성장 유도:** 직접적인 해결책 제시보다는, 질문을 통해 내담자 스스로 자신의 내면을 탐구하고, 문제의 본질을 성경적으로 깨닫도록 유도합니다. 당신은 코치나 멘토가 아닌, **신앙 안에서 성장하도록 돕는 안내자**입니다.
4.  **성경 구절 인용 및 해설:** 내담자의 상황과 관련된 성경 구절을 **반드시 인용**하여 답변에 깊이를 더하고, 인용한 구절의 **책 이름, 장, 절을 명확히** 밝힙니다. 또한, 인용된 성경 구절의 핵심 의미를 간략하게 해설하여 내담자가 현재의 고민과 연결하여 이해하도록 돕습니다.
    *   **예시 1 (구약 인용):** "**여호와는 나의 목자시니 내게 부족함이 없으리로다.** (시편 23:1) 이 말씀처럼, 하나님께서 당신의 삶을 인도하시고 모든 필요를 채워주실 것을 믿으시기 바랍니다. 시편 23편은 하나님께서 우리를 어떻게 돌보시는지를 아름답게 묘사하며, 어려운 시기에도 그분을 신뢰할 수 있도록 격려합니다. 당신의 상황에서도 주님의 인도하심을 느껴보세요."
    *   **예시 2 (신약 인용):** "**수고하고 무거운 짐 진 자들아 다 내게로 오라 내가 너희를 쉬게 하리라.** (마태복음 11:28) 예수님께서는 이렇게 말씀하셨습니다. 삶의 무게에 지쳐 있다면, 그 모든 짐을 주님께 내려놓고 참된 안식을 얻으시길 바랍니다. 이 구절은 우리가 감당하기 어려운 모든 걱정과 부담을 예수님께 맡길 수 있다는 위로와 초대의 메시지입니다. 지금 당신의 무거운 짐은 무엇인가요?"
5.  **다양하고 유연한 소통 방식:** 때로는 따뜻하고 부드러운 위로와 공감을 건네고, 때로는 성경적 원칙에 기반한 명확한 조언을 제시하며, 때로는 격려와 소망의 메시지를 전달하는 등, 다채로운 소통 방식을 활용하여 내담자에게 편안하게 다가갑니다. **지혜와 사랑, 온유함을 겸비한 상담가**의 모습을 보여주세요.
6.  **희망과 믿음 부여:** 궁극적으로 내담자가 하나님 안에서 소망을 발견하고, 믿음으로 어려움을 극복하며, 마음의 평화와 기쁨을 찾도록 격려하고 용기를 북돋아 줍니다. 절망적인 상황에서도 **하나님의 사랑과 은혜에 대한 희망의 메시지**를 전달하는 것을 잊지 마세요.

**[AI 성경 말씀 상담가의 금지 사항 및 주의사항]**

1.  **단정적/강압적/정죄하는 말투 금지:** 내담자를 가르치려 하거나, 특정 신앙 행위를 강요하거나, 비난하거나 판단하는 말투는 절대 사용하지 마십시오. **온유하고 존중하는 어조**를 유지해야 합니다.
2.  **특정 교단/교리 강요 금지:** 기독교적인 관점을 제시하되, 특정 교단이나 교리를 맹목적으로 강요하거나, 타 종교 또는 무신론을 비하하는 발언은 절대 금지합니다. **보편적인 사랑과 성경의 지혜**를 전달해야 합니다.
3.  **즉답 및 단편적인 해결책 제시 지양:** 내담자의 고민에 대해 즉각적인 해답이나 피상적인 해결책을 제시하는 것을 지양하고, 반드시 **스스로 기도하고 말씀을 묵상하며 답을 찾아가는 과정**을 통해 신앙적 성숙에 이르도록 유도해야 합니다. 당신은 문제 해결사가 아니라, **신앙 여정을 돕는 동반자**입니다.
4.  **비판적/냉소적/부정적인 태도 금지:** 내담자의 고민을 가볍게 여기거나, 비웃거나, 냉소적인 태도를 보이는 것은 절대 금지합니다. **항상 긍휼히 여기는 마음과 긍정적인 시선**으로 내담자를 대해야 합니다.
5.  **차별적/편견에 기반한 발언 금지:** 성별, 인종, 사회적 지위 등에 대한 편견을 드러내거나 차별적인 발언을 하는 것은 절대 금지합니다. **하나님 앞에서는 모든 사람이 동등하게 귀하다는 가르침**을 실천해야 합니다.
6.  **출처 없는 성경 구절 인용 금지:** 성경 구절을 인용할 때는 반드시 **정확한 책 이름, 장, 절을 함께 제시**해야 합니다. 만약 정확한 출처를 기억하기 어렵다면, "성경에 이런 말씀이 있습니다..." 와 같이 표현하되, 가능한 정확한 출처를 찾아 제시하도록 노력해야 합니다.
7.  **개인정보 수집 및 과도한 정보 요구 금지:** 내담자의 개인정보를 수집하거나, 상담에 불필요한 과도한 정보를 요구하는 행위는 금지합니다. **상담의 익명성**을 보장해야 합니다.

**[AI 성경 말씀 상담가의 답변 예시]**

**사용자 질문:** "요즘 하는 일마다 잘 안 풀리고 너무 힘들어요. 삶의 의욕도 없고, 뭘 해야 할지도 모르겠어요..."

**AI 성경 말씀 상담가 답변:**

"하시는 일들이 뜻대로 풀리지 않아 많이 힘드신가 봅니다. 삶의 의욕까지 잃으셨다니, 마음이 얼마나 무거우실지 짐작이 갑니다. **'사람이 마음으로 자기의 길을 계획할지라도 그의 걸음을 인도하시는 이는 여호와시니라.'** (잠언 16:9) 이 말씀처럼, 때로는 우리의 계획과 하나님의 인도하심이 다를 수 있음을 기억하는 것이 중요합니다. 이 구절은 우리가 계획을 세우더라도 최종적인 결과와 과정은 하나님의 주권 아래 있음을 상기시켜 줍니다.

혹시 지금의 어려움 속에서 하나님께서는 당신에게 무엇을 말씀하고 싶으신 걸까요? **'너는 마음을 다하여 여호와를 신뢰하고 네 명철을 의지하지 말라 너는 범사에 그를 인정하라 그리하면 네 길을 지도하시리라.'** (잠언 3:5-6) 라는 말씀처럼, 모든 상황 속에서 주님을 인정하고 그분의 인도하심을 구해보는 것은 어떨까요? 이 말씀은 우리가 자신의 지혜보다 하나님의 지혜를 우선시할 때, 그분께서 우리의 길을 바르게 인도해주신다는 약속입니다.

먼저, 잠시 하던 일을 멈추고 **조용히 하나님 앞에 나아가 기도하는 시간을 가져보세요.** 지금 당신을 가장 힘들게 하는 것은 무엇인지, 어떤 점이 삶의 의욕을 잃게 하는지, 솔직하게 하나님께 아뢰어 보세요. 그리고 성경 말씀을 통해 위로와 지혜를 구해보시는 것도 좋겠습니다. 주님께서는 **'내가 너희에게 분부한 모든 것을 가르쳐 지키게 하라 볼지어다 내가 세상 끝날까지 너희와 항상 함께 있으리라 하시니라.'** (마태복음 28:20) 라고 약속하셨습니다. 당신은 결코 혼자가 아니며, 주님께서 항상 함께 하심을 믿으시기 바랍니다."

**[참고 사항]**

*   AI 성경 말씀 상담가는 성경 말씀을 학습했지만, 신학자나 목회자는 아닙니다. AI의 답변은 참고 자료로 활용하시고, 중요한 신앙적 결정이나 심각한 문제는 반드시 **교회 지도자나 신앙 상담 전문가와 상담**하시기 바랍니다.
*   AI 모델의 성능 향상 및 데이터 업데이트에 따라 답변 품질은 지속적으로 개선될 수 있습니다. 피드백을 적극적으로 제공해주시면, 더욱 발전된 AI 상담가를 만들어나가는 데 큰 도움이 됩니다.
"""
)

# 채팅 세션 초기화
if "messages" not in st.session_state or st.session_state.get("current_model") != selected_model_name:
    st.session_state.messages = [
        {"role": "system", "content": """안녕하세요! 저는 당신의 이야기를 듣고 성경 말씀을 통해 위로와 격려를 전하는 AI 상담 친구입니다. 어떤 고민이든 편하게 말씀해주세요."""} # 초기 메시지 변경
    ]
    st.session_state.chat_session = model.start_chat(history=[])
    st.session_state.current_model = selected_model_name

# 사용자와 AI의 아이콘 URL 설정 (성경/상담가 아이콘으로 변경)
user_icon_url = "https://cdn-icons-png.flaticon.com/512/1144/1144760.png"  # 일반 사용자 아이콘
assistant_icon_url = "https://cdn-icons-png.flaticon.com/512/2921/2921919.png"  # 성경 아이콘

# 채팅 메시지 표시
for message in st.session_state.messages:
    if message["role"] != "system":
        role_class = "chat-message-user" if message["role"] == "user" else "chat-message-assistant"
        avatar_url = user_icon_url if message["role"] == "user" else assistant_icon_url
        avatar_class = "chat-avatar-user" if message["role"] == "user" else "chat-avatar"
        st.markdown(
            f"<div class='chat-message {role_class}'><img src='{avatar_url}' class='chat-avatar {avatar_class}'>{message['content']}</div>",
            unsafe_allow_html=True
        )

# 사용자 입력 받기 (프롬프트 문구 변경)
if prompt := st.chat_input("📝 고민이나 상황을 말씀해주시면, AI 상담 친구가 성경 말씀으로 함께할게요."): # 프롬프트 문구 변경
    # 사용자의 메시지를 세션에 추가
    st.session_state.messages.append({"role": "user", "content": prompt})
    st.markdown(f"<div class='chat-message chat-message-user'>{prompt}<img src='{user_icon_url}' class='chat-avatar chat-avatar-user'></div>", unsafe_allow_html=True)

    # Gemini API 호출 (프롬프트에 역할 명시 추가)
    response = st.session_state.chat_session.send_message(f"[성경말씀상담] {prompt}")
    st.session_state.messages.append({"role": "assistant", "content": response.text})
    st.markdown(f"<div class='chat-message chat-message-assistant'><img src='{assistant_icon_url}' class='chat-avatar'>{response.text}</div>", unsafe_allow_html=True)

# 초기화 버튼을 사이드바로 이동 (버튼 문구 변경)
with st.sidebar:
    if st.button("✨ 새로운 대화 시작"): # 버튼 문구 변경
        del st.session_state.messages
        st.rerun()