Spaces:
Running
Running
Update app.py
Browse files
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
|
47 |
-
for item in
|
48 |
-
if '
|
49 |
-
item_text = f"
|
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 |
-
|
|
|
77 |
|
78 |
system_message = "사용자 질문에 대해 의약품 정보를 제공하는 전문 약학 어시스턴트입니다."
|
79 |
system_prefix = """
|
80 |
반드시 한글로 답변하십시오. 너의 이름은 'PharmAI'이다.
|
81 |
-
당신은 '의약품 지식 그래프(PharmKG) 데이터 100만 건
|
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.
|
|
|
93 |
|
94 |
* 답변은 가능하면 전문적인 용어와 설명을 사용하십시오.
|
95 |
* 모든 답변은 한국어로 제공하며, 대화 내용을 기억해야 합니다.
|
@@ -108,10 +115,12 @@ def stream_gemini_response(user_message: str, messages: list) -> Iterator[list]:
|
|
108 |
"""
|
109 |
|
110 |
# 시스템 프롬프트 및 관련 컨텍스트를 사용자 메시지 앞에 추가
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
|
|
|
|
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)
|