immunobiotech commited on
Commit
df21667
·
verified ·
1 Parent(s): 928ddf9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -13
app.py CHANGED
@@ -17,6 +17,10 @@ model = genai.GenerativeModel("gemini-2.0-flash-thinking-exp-1219")
17
  # PharmKG 데이터셋 로드
18
  pharmkg_dataset = load_dataset("vinven7/PharmKG")
19
 
 
 
 
 
20
  # 문장 임베딩 모델 로드
21
  embedding_model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
22
 
@@ -35,7 +39,7 @@ def format_chat_history(messages: list) -> list:
35
  })
36
  return formatted_history
37
 
38
- def find_most_similar_data(query):
39
  """
40
  주어진 쿼리와 가장 유사한 데이터 찾기
41
  """
@@ -43,10 +47,10 @@ def find_most_similar_data(query):
43
  most_similar = None
44
  highest_similarity = -1
45
 
46
- for split in pharmkg_dataset.keys():
47
- for item in pharmkg_dataset[split]:
48
- if 'Input' in item and 'Output' in item:
49
- item_text = f"입력: {item['Input']} 출력: {item['Output']}"
50
  item_embedding = embedding_model.encode(item_text, convert_to_tensor=True)
51
  similarity = util.pytorch_cos_sim(query_embedding, item_embedding).item()
52
 
@@ -56,6 +60,7 @@ def find_most_similar_data(query):
56
 
57
  return most_similar
58
 
 
59
  def stream_gemini_response(user_message: str, messages: list) -> Iterator[list]:
60
  """
61
  대화 기록 지원을 통해 생각과 응답을 스트리밍합니다(텍스트 입력만 해당).
@@ -73,13 +78,14 @@ def stream_gemini_response(user_message: str, messages: list) -> Iterator[list]:
73
  chat_history = format_chat_history(messages)
74
 
75
  # 유사 데이터 검색
76
- most_similar_data = find_most_similar_data(user_message)
 
77
 
78
  system_message = "사용자 질문에 대해 의약품 정보를 제공하는 전문 약학 어시스턴트입니다."
79
  system_prefix = """
80
  반드시 한글로 답변하십시오. 너의 이름은 'PharmAI'이다.
81
- 당신은 '의약품 지식 그래프(PharmKG) 데이터 100만 건 이상을 학습한 전문적인 의약품 정보 AI 조언자입니다.'
82
- 입력된 질문에 대해 PharmKG 데이터셋에서 가장 관련성이 높은 정보를 찾고, 이를 바탕으로 상세하고 체계적인 답변을 제공합니다.
83
  답변은 다음 구조를 따르십시오:
84
 
85
  1. **정의 및 개요:** 질문과 관련된 약물의 정의, 분류, 또는 개요를 간략하게 설명합니다.
@@ -89,7 +95,8 @@ def stream_gemini_response(user_message: str, messages: list) -> Iterator[list]:
89
  5. **부작용 및 주의사항 (Adverse Effects and Precautions):** 가능한 부작용과 사용 시 주의해야 할 사항을 상세히 설명합니다.
90
  6. **약물 상호작용 (Drug Interactions):** 다른 약물과의 상호작용 가능성을 제시하고, 그로 인한 영향을 설명합니다.
91
  7. **약동학적 특성 (Pharmacokinetics):** 약물의 흡수, 분포, 대사, 배설 과정에 대한 정보를 제공합니다.
92
- 8. **참고 문헌 (References):** 답변에 사용된 과학적 자료나 관련 연구를 인용합니다.
 
93
 
94
  * 답변은 가능하면 전문적인 용어와 설명을 사용하십시오.
95
  * 모든 답변은 한국어로 제공하며, 대화 내용을 기억해야 합니다.
@@ -108,10 +115,12 @@ def stream_gemini_response(user_message: str, messages: list) -> Iterator[list]:
108
  """
109
 
110
  # 시스템 프롬프트 및 관련 컨텍스트를 사용자 메시지 앞에 추가
111
- if most_similar_data:
112
- prefixed_message = f"{system_prefix} {system_message} 관련 정보: {most_similar_data}\n\n 사용자 질문:{user_message}"
113
- else:
114
- prefixed_message = f"{system_prefix} {system_message}\n\n 사용자 질문:{user_message}"
 
 
115
 
116
  # Gemini 채팅 시작
117
  chat = model.start_chat(history=chat_history)
 
17
  # PharmKG 데이터셋 로드
18
  pharmkg_dataset = load_dataset("vinven7/PharmKG")
19
 
20
+ # FDA_Pharmaceuticals_FAQ 데이터셋 로드
21
+ fda_dataset = load_dataset("Jaymax/FDA_Pharmaceuticals_FAQ")
22
+
23
+
24
  # 문장 임베딩 모델 로드
25
  embedding_model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
26
 
 
39
  })
40
  return formatted_history
41
 
42
+ def find_most_similar_data(query, dataset):
43
  """
44
  주어진 쿼리와 가장 유사한 데이터 찾기
45
  """
 
47
  most_similar = None
48
  highest_similarity = -1
49
 
50
+ for split in dataset.keys():
51
+ for item in dataset[split]:
52
+ if 'Question' in item and 'Answer' in item:
53
+ item_text = f"질문: {item['Question']} 답변: {item['Answer']}"
54
  item_embedding = embedding_model.encode(item_text, convert_to_tensor=True)
55
  similarity = util.pytorch_cos_sim(query_embedding, item_embedding).item()
56
 
 
60
 
61
  return most_similar
62
 
63
+
64
  def stream_gemini_response(user_message: str, messages: list) -> Iterator[list]:
65
  """
66
  대화 기록 지원을 통해 생각과 응답을 스트리밍합니다(텍스트 입력만 해당).
 
78
  chat_history = format_chat_history(messages)
79
 
80
  # 유사 데이터 검색
81
+ most_similar_pharmkg_data = find_most_similar_data(user_message, pharmkg_dataset)
82
+ most_similar_fda_data = find_most_similar_data(user_message, fda_dataset)
83
 
84
  system_message = "사용자 질문에 대해 의약품 정보를 제공하는 전문 약학 어시스턴트입니다."
85
  system_prefix = """
86
  반드시 한글로 답변하십시오. 너의 이름은 'PharmAI'이다.
87
+ 당신은 '의약품 지식 그래프(PharmKG) 데이터 100만 건 이상과 FDA 가이드 및 연관 정보에 대해 학습한 전문적인 의약품 정보 AI 조언자입니다.'
88
+ 입력된 질문에 대해 PharmKG 데이터셋과 FDA 데이터셋에서 가장 관련성이 높은 정보를 찾고, 이를 바탕으로 상세하고 체계적인 답변을 제공합니다.
89
  답변은 다음 구조를 따르십시오:
90
 
91
  1. **정의 및 개요:** 질문과 관련된 약물의 정의, 분류, 또는 개요를 간략하게 설명합니다.
 
95
  5. **부작용 및 주의사항 (Adverse Effects and Precautions):** 가능한 부작용과 사용 시 주의해야 할 사항을 상세히 설명합니다.
96
  6. **약물 상호작용 (Drug Interactions):** 다른 약물과의 상호작용 가능성을 제시하고, 그로 인한 영향을 설명합니다.
97
  7. **약동학적 특성 (Pharmacokinetics):** 약물의 흡수, 분포, 대사, 배설 과정에 대한 정보를 제공합니다.
98
+ 8. **FDA 가이드 연관 정보:** FDA 데이터셋에서 관련 정보가 있으면 해당 정보를 요약하여 제공합니다.
99
+ 9. **참고 문헌 (References):** 답변에 사용된 과학적 자료나 관련 연구를 인용합니다.
100
 
101
  * 답변은 가능하면 전문적인 용어와 설명을 사용하십시오.
102
  * 모든 답변은 한국어로 제공하며, 대화 내용을 기억해야 합니다.
 
115
  """
116
 
117
  # 시스템 프롬프트 및 관련 컨텍스트를 사용자 메시지 앞에 추가
118
+ prefixed_message = f"{system_prefix} {system_message}"
119
+ if most_similar_pharmkg_data:
120
+ prefixed_message += f" PharmKG 관련 정보: {most_similar_pharmkg_data}"
121
+ if most_similar_fda_data:
122
+ prefixed_message += f" FDA 가이드 및 연관 정보: {most_similar_fda_data}"
123
+ prefixed_message += f"\n\n 사용자 질문:{user_message}"
124
 
125
  # Gemini 채팅 시작
126
  chat = model.start_chat(history=chat_history)