morethanair commited on
Commit
f12197e
·
1 Parent(s): 792130a

썸네일/링크 및 공감 프롬프트 문구 개선

Browse files
Files changed (1) hide show
  1. app.py +52 -10
app.py CHANGED
@@ -218,14 +218,41 @@ def generate_khan_answer(query: str, search_results: List[Dict], client: OpenAI)
218
 
219
  # Updated system prompt to instruct Markdown link usage
220
  system_prompt = """너는 현실적인 조언을 잘하는 PM 멘토 Khan이다.
221
- - 말투는 단호하지만 공감력이 있다. "~입니다." 또는 "~죠." 와 같이 명확하게 끝맺는다. 존댓말을 사용한다.
222
- - 모호한 위로보다는 구조적이고 실용적인 제안을 한다. 문제의 핵심을 파악하고 구체적인 해결책이나 다음 단계를 제시한다.
223
- - 질문이 막연하면 구체화해서 되물어본다.
224
- - (이전 대화 기록은 없으므로) 반복 질문에는 "이전에 유사한 내용을 찾아봤었죠. 다시 한번 살펴보면..." 같이 언급할 수 있다.
225
- - 설명보단 핵심을 빠르게 전달하고, 필요하다면 간결한 비유를 활용한다.
226
- - 주어진 '관련 정보' (영상 제목, 요약, 원본 내용, 타임스탬프 적용 URL 등)를 바탕으로 답변해야 한다. 정보가 부족하거나 질문과 관련성이 낮으면, 그 점을 명확히 밝히고 추가 정보를 요청하거나 질문을 구체화하도록 유도한다.
227
- - **답변 중 관련 정보를 참조할 때는, 반드시 '타임스탬프 적용 URL'을 사용하여 다음과 같은 Markdown 링크 형식으로 만들어야 한다: `[영상 제목](타임스탬프_적용_URL)`. 예를 들어, "자세한 내용은 [비개발자가 연봉 2억을 받는 현실적인 방법](https://www.youtube.com/watch?v=VIDEO_ID&t=178s) 영상을 참고하시면 도움이 될 겁니다." 와 같이 표시한다.**
228
- - 답변은 한국어로 한다."""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
 
230
  # Use triple quotes for the multi-line f-string
231
  user_message = f"""사용자 질문: {query}
@@ -255,8 +282,8 @@ def generate_khan_answer(query: str, search_results: List[Dict], client: OpenAI)
255
  st.set_page_config(page_title="Khan 멘토 (PM 영상 기반)", layout="wide")
256
  st.markdown(
257
  """
258
- <a href="https://eopla.net/orders/new?target_id=290&target_type=Event" target="_blank">
259
- <img src="https://morethanair.com/wp-content/uploads/2025/04/ratio_1c4a9488-d64a-42c8-8c4c-31bfc20aba35NKH_PM_Thumbnail.png.png" style="width:40%; border-radius: 10px;" />
260
  </a>
261
  """,
262
  unsafe_allow_html=True
@@ -304,6 +331,7 @@ if st.session_state['step'] == 2:
304
  empathy_prompt = f"""
305
  너는 따뜻하고 공감 능력이 뛰어난 상담가야.
306
  아래 사용자의 상황을 듣고, 충분히 감정적으로 공감해주고, 용기를 북돋아주는 말을 해줘.
 
307
  상황: "{st.session_state['user_state']}"
308
  """
309
  try:
@@ -408,6 +436,20 @@ if st.session_state['step'] == 4:
408
  except Exception as e:
409
  logger.warning(f"st.video failed for non-YouTube URL {url}: {e}")
410
  st.markdown("---")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
  st.caption("Powered by Pinecone, Sentence Transformers, and OpenAI")
412
  # 다시 처음으로 돌아가기 버튼
413
  if st.button("다시 질문 흐름 시작하기"):
 
218
 
219
  # Updated system prompt to instruct Markdown link usage
220
  system_prompt = """너는 현실적인 조언을 잘하는 PM 멘토 Khan이다.
221
+
222
+ - 말투는 단호하지만 공감력이 있다. "~입니다." 또는 "~죠."와 같이 명확하게 끝맺는다. 존댓말을 사용한다.
223
+ - 완곡한 표현을 활용하며, 상대방의 감정을 함부로 단정 짓지 않는다. 예: "그럴 수 있습니다", "음, 그렇게 느낄 수 있죠" 등.
224
+ - 단순한 위로보다는 구조적이고 실용적인 제안을 우선한다. 질문자가 놓친 맥락이나 구조를 짚어주고, 다음 단계 또는 전략적 선택지를 제시한다.
225
+ - 질문이 막연하거나 추상적이면, 핵심을 좁혀 다시 되물어본다. 예: "그 상황에서 가장 답답했던 순간은 언제였나요?"와 같이 질문을 구체화한다.
226
+ - 설명보다는 핵심을 빠르게 전달한다. 다만, 필요한 경우 짧은 비유나 예시로 직관적인 이해를 돕는다.
227
+ - 답변 중 관련 정보를 참조할 때는, 반드시 '타임스탬프 적용 URL'을 사용하여 다음과 같은 Markdown 링크 형식으로 제시해야 한다: `[영상 제목](타임스탬프_적용_URL)`. 예: "자세한 내용은 [비개발자가 연봉 2억을 받는 현실적인 방법](https://www.youtube.com/watch?v=VIDEO_ID&t=178s) 영상을 참고하시면 도움이 될 겁니다."
228
+ - 이전 대화 기록은 없으므로, 반복 질문이 들어올 경우에는 "이전에 유사한 내용을 찾아봤었죠. 다시 한번 살펴보면..."처럼 자연스럽게 이어간다.
229
+ - 답변은 반드시 한국어로 한다.
230
+
231
+ Khan은 전략적으로 사고하며, 본질과 방향을 중시한다.
232
+ 단정적으로 단언하기보다는 "~일 수도 있습니다", "그렇게도 볼 수 있죠"와 같이 여지를 남긴다.
233
+ 상대방이 스스로 선택지를 판단할 수 있도록 돕는 방향으로 조언한다.
234
+
235
+ 예시처럼 말투와 사고 흐름을 유지해야 한다:
236
+
237
+ ---
238
+
239
+ Q: 요즘 팀원과의 관계가 어려운데, 제가 뭘 놓치고 있는 걸까요?
240
+
241
+ A: 음, 그럴 수 있습니다. 관계가 어려울 때는 감정보다는 기대가 엇갈렸던 순간을 먼저 봐야 하죠.
242
+ 그 팀원이 무언가를 기대했는데, 내가 그걸 놓쳤을 가능성이 있습니다.
243
+ 혹시 최근에 서로 오해가 생긴 순간이 있었는지, 먼저 짚어보는 게 좋겠습니다.
244
+
245
+ ---
246
+
247
+ Q: 회사를 옮기고 싶은데, 성과 없이 퇴사하면 안 좋을까요?
248
+
249
+ A: 단기적으로는 맞습니다. 성과 없이 퇴사하면 이력서에 남죠.
250
+ 하지만 지금 상황에서 배울 게 없다면, 그 자체가 리스크이기도 합니다.
251
+ '내가 남아서 얻을 수 있는 게 무엇인가'와 '지금 나가서 시작할 수 있는 게 무엇인가'를 나란히 두고 비교해 보시죠.
252
+
253
+ ---
254
+
255
+ 이런 식의 말투와 흐름을 바탕으로 질문에 답변하세요."""
256
 
257
  # Use triple quotes for the multi-line f-string
258
  user_message = f"""사용자 질문: {query}
 
282
  st.set_page_config(page_title="Khan 멘토 (PM 영상 기반)", layout="wide")
283
  st.markdown(
284
  """
285
+ <a href="https://vo.la/eAKBGo" target="_blank">
286
+ <img src="https://morethanair.com/wp-content/uploads/2025/04/KakaoTalk_Photo_2025-04-20-23-47-37.png" style="width:70%; border-radius: 10px;" />
287
  </a>
288
  """,
289
  unsafe_allow_html=True
 
331
  empathy_prompt = f"""
332
  너는 따뜻하고 공감 능력이 뛰어난 상담가야.
333
  아래 사용자의 상황을 듣고, 충분히 감정적으로 공감해주고, 용기를 북돋아주는 말을 해줘.
334
+ 부를 때는 '당신은', '당신이'처럼 친근한 말투로 부르고, 물음표는 사용하지 않아.
335
  상황: "{st.session_state['user_state']}"
336
  """
337
  try:
 
436
  except Exception as e:
437
  logger.warning(f"st.video failed for non-YouTube URL {url}: {e}")
438
  st.markdown("---")
439
+ # --- 예시 질문 버튼/직접입력 다시 노출 (후속 질문) ---
440
+ st.markdown("#### 추가로 궁금한 점이 있으신가요? 아래 예시 질문을 클릭하거나 직접 입력해보세요!")
441
+ cols = st.columns(len(st.session_state['example_questions']))
442
+ for i, q in enumerate(st.session_state['example_questions']):
443
+ if cols[i].button(q, key=f"followup_{i}"):
444
+ st.session_state['selected_question'] = q
445
+ st.session_state['step'] = 4
446
+ st.rerun()
447
+ user_q = st.text_input("직접 궁금한 점을 입력해도 좋아요! (후속 질문)", value="", key="followup_input")
448
+ if st.button("Khan 멘토에게 추가 질문하기", key="followup_btn"):
449
+ st.session_state['selected_question'] = user_q
450
+ st.session_state['step'] = 4
451
+ st.rerun()
452
+ st.markdown("---")
453
  st.caption("Powered by Pinecone, Sentence Transformers, and OpenAI")
454
  # 다시 처음으로 돌아가기 버튼
455
  if st.button("다시 질문 흐름 시작하기"):