microhum commited on
Commit
70e2745
·
1 Parent(s): 8a45dec

fix refactor output

Browse files
.gitignore CHANGED
@@ -6,4 +6,4 @@
6
 
7
  # temporary files
8
  runtime_log.csv
9
- speedtest.py
 
6
 
7
  # temporary files
8
  runtime_log.csv
9
+ speedtest.py
interface.py CHANGED
@@ -84,8 +84,8 @@ def create_gradio_interface():
84
 
85
  # Main Input Section
86
  with gr.Row():
87
- with gr.Row():
88
- chat_box = gr.Chatbot(label="Chat with MALI Nurse")
89
 
90
  # Input Section
91
  with gr.Row():
@@ -144,17 +144,25 @@ def create_gradio_interface():
144
  inputs=[],
145
  outputs=chat_history_output,
146
  )
147
- # View EHR Details
148
- ehr_details_button.click(
 
 
 
 
 
 
149
  fn=view_ehr_details,
150
  inputs=[gr.Textbox(value="details", visible=False)],
151
  outputs=ehr_details_output
152
  )
153
- ehr_details_button.click(
 
 
154
  fn=view_ehr_details,
155
  inputs=[gr.Textbox(value="prompt", visible=False)],
156
  outputs=ehr_prompt_output
157
- )
158
 
159
  # Footer
160
  gr.Markdown(
 
84
 
85
  # Main Input Section
86
  with gr.Row():
87
+ with gr.Column():
88
+ chat_box = gr.Chatbot(label="Chat with MALI Nurse", scale=1)
89
 
90
  # Input Section
91
  with gr.Row():
 
144
  inputs=[],
145
  outputs=chat_history_output,
146
  )
147
+ send_button.click(
148
+ fn=view_chat_history,
149
+ inputs=[],
150
+ outputs=chat_history_output,
151
+ )
152
+
153
+ send_button.click(
154
+ fn=view_chat_history,
155
  fn=view_ehr_details,
156
  inputs=[gr.Textbox(value="details", visible=False)],
157
  outputs=ehr_details_output
158
  )
159
+
160
+ send_button.click(
161
+ fn=view_chat_history,
162
  fn=view_ehr_details,
163
  inputs=[gr.Textbox(value="prompt", visible=False)],
164
  outputs=ehr_prompt_output
165
+ )
166
 
167
  # Footer
168
  gr.Markdown(
llm/__pycache__/llm.cpython-311.pyc CHANGED
Binary files a/llm/__pycache__/llm.cpython-311.pyc and b/llm/__pycache__/llm.cpython-311.pyc differ
 
llm/__pycache__/prompt.cpython-311.pyc CHANGED
Binary files a/llm/__pycache__/prompt.cpython-311.pyc and b/llm/__pycache__/prompt.cpython-311.pyc differ
 
llm/llm.py CHANGED
@@ -1,15 +1,10 @@
1
-
2
- import cProfile
3
- import pstats
4
- from langchain_openai.chat_models import ChatOpenAI
5
- from langchain_groq import ChatGroq
6
  from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
7
  from pydantic import ValidationError
8
  import json
9
  from pprint import pprint
10
  from llm.basemodel import EHRModel
11
  from llm.prompt import field_descriptions, TASK_INSTRUCTIONS, JSON_EXAMPLE
12
- from llm.models import model_list, get_model
13
  import time
14
 
15
  class VirtualNurseLLM:
@@ -30,6 +25,7 @@ class VirtualNurseLLM:
30
  self.current_prompt = None
31
  self.current_prompt_ehr = None
32
  self.current_question = None
 
33
 
34
  def create_prompt(self, task_type):
35
  if task_type == "extract_ehr":
@@ -130,19 +126,20 @@ class VirtualNurseLLM:
130
 
131
  # Store generated question in chat history and return it
132
  self.current_question = response.content.strip()
 
133
  return self.current_question
134
 
135
- def refactor_ehr(self):
 
136
  refactor_prompt = self.create_prompt("refactor")
137
  messages = ChatPromptTemplate.from_messages([refactor_prompt])
138
- messages = messages.format_messages(ehr_data=self.ehr_data, chat_history=self.chat_history, time_now=time.strftime("%Y-%m-%d %H:%M:%S"))
139
  response = self.client(messages=messages)
140
  json_content = self.extract_json_content(response.content)
141
- if self.debug:
142
- pprint(f"JSON after dumps:\n{json_content}\n")
143
  self.ehr_data = EHRModel.model_validate_json(json_content)
144
  print("Refactored EHR data ! Ending the process.")
145
- return "ขอบคุณที่ให้ข้อมูลค่ะ ฉันได้ข้อมูลที่ต้องการครบแล้วค่ะ"
146
 
147
  def get_question(self, patient_response):
148
  question_prompt = self.create_prompt("question")
@@ -155,6 +152,8 @@ class VirtualNurseLLM:
155
  pprint(ehr_data)
156
 
157
  self.current_question = self.fetching_chat(patient_response, question_prompt) or self.refactor_ehr()
 
 
158
  return self.current_question
159
 
160
  def invoke(self, patient_response):
 
 
 
 
 
 
1
  from langchain.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
2
  from pydantic import ValidationError
3
  import json
4
  from pprint import pprint
5
  from llm.basemodel import EHRModel
6
  from llm.prompt import field_descriptions, TASK_INSTRUCTIONS, JSON_EXAMPLE
7
+ from llm.models import get_model
8
  import time
9
 
10
  class VirtualNurseLLM:
 
25
  self.current_prompt = None
26
  self.current_prompt_ehr = None
27
  self.current_question = None
28
+ self.ending_text = "ขอบคุณที่ให้ข้อมูลค่ะ ฉันได้ข้อมูลที่ต้องการครบแล้วค่ะ ดิฉันจะบันทึกข้อมูลทั้งหมดนี้เพื่อส่งต่อให้แพทย์ดูแลคุณอย่างเหมาะสมค่ะ"
29
 
30
  def create_prompt(self, task_type):
31
  if task_type == "extract_ehr":
 
126
 
127
  # Store generated question in chat history and return it
128
  self.current_question = response.content.strip()
129
+
130
  return self.current_question
131
 
132
+ def refactor_ehr(self, current_question=None):
133
+ patient_response = current_question or self.ending_text
134
  refactor_prompt = self.create_prompt("refactor")
135
  messages = ChatPromptTemplate.from_messages([refactor_prompt])
136
+ messages = messages.format_messages(patient_response="", ehr_data=self.ehr_data, chat_history=self.chat_history, time_now=time.strftime("%Y-%m-%d %H:%M:%S"))
137
  response = self.client(messages=messages)
138
  json_content = self.extract_json_content(response.content)
139
+ pprint(f"JSON after dumps:\n{json_content}\n")
 
140
  self.ehr_data = EHRModel.model_validate_json(json_content)
141
  print("Refactored EHR data ! Ending the process.")
142
+ return patient_response
143
 
144
  def get_question(self, patient_response):
145
  question_prompt = self.create_prompt("question")
 
152
  pprint(ehr_data)
153
 
154
  self.current_question = self.fetching_chat(patient_response, question_prompt) or self.refactor_ehr()
155
+ if self.ending_text in self.current_question:
156
+ return self.refactor_ehr(self.current_question)
157
  return self.current_question
158
 
159
  def invoke(self, patient_response):
llm/prompt.py CHANGED
@@ -51,7 +51,7 @@ TASK_INSTRUCTIONS = {
51
  "- คุณจะสอบถามคำถามทีละข้อเพื่อลดความกังวลและบันทึกประวัติสุขภาพได้อย่างครบถ้วน\n"
52
  "- ให้ทำความเข้าใจบริบทพื้นฐานของผู้ป่วย เช่น อาการหรือข้อมูลสำคัญอื่นที่ทราบแล้ว\n\n"
53
 
54
- "#### ข้อมูลโรงพยาบาล:\n"
55
  "คุณเป็นพยาบาลเสมือนของ โรงพยาบาลบางมดนะจ๊ะสุดหล่อ (Bangmod Naja Sudlhor Hospital) ตั้งอยู่ที่ ถ. ประชาอุทิศ แขวงบางมด เขตทุ่งครุ กรุงเทพมหานคร 10140\n"
56
  "มีหน้าที่ในการลดภาระหน้าที่ของพยาบาลและแพทย์ ในการเก็บข้อมูลของผู้ป่วยเบื้องต้น แต่ครบถ้วนระดับหนึ่ง แล้วหลังจากนั้นข้อมูลก็จะถูกส่งต่อไปยังมือของแพทย์\n"
57
  "หลังจากข้อมูลไปถึงแพทย์แล้ว แพทย์ก็จะทำหน้าที่ในการวินิจฉัยโรคที่แน่นอนต่อไป ระหว่างที่ส่งข้อมูลให้แพทย์คุณสามารถให้ความรู้ การเตรียมตัวก่อนพบแพทย์ได้\n"
@@ -76,7 +76,8 @@ TASK_INSTRUCTIONS = {
76
  "- เป็นครั้งแรกเมื่อไหร่ เป็นนานหรือยัง\n"
77
  "- ทำการสรุปคร่าวๆ ให้หมอว่าอาการดังกล่าวใกล้เคียงกับโรคอะไรบ้าง\n"
78
  "- ถามถึงอาการแทรกซ้อน ของโรคที่ใกล้เคียง ที่มีโอกาสเป็น (1-3 อาการ)\n\n"
79
-
 
80
  "### ตัวอย่างการสนทนา *ห้ามยึดติดมากเกินไป*\n"
81
  "#### ตัวอย่าง 1\n"
82
  "ก่อนอื่นเลย ดิฉันขอทราบชื่อเต็มของคุณได้ไหมคะ?\n"
@@ -85,17 +86,19 @@ TASK_INSTRUCTIONS = {
85
  "คนไข้: 35 ปีค่ะ มะลิ\n"
86
  "35 ปีนะคะ เพื่อความถูกต้อง ดิฉันขอถามเพิ่มนะคะ คุณอรุณีเป็นเพศหญิงใช่ไหมคะ?\n"
87
  "คนไข้: ใช่ค่ะ\n"
88
- "ขอบคุณค่ะ มีคนไข้น่ารักแบบนี้ ดิฉันยิ่งตั้งใจทำงานเลยค่ะ เรามาคุยกันต่อเรื่องสุขภาพนะคะ มีอาการหลักอะไรที่รู้สึกไม่สบายใจตอนนี้ไหมคะ?\n"
89
- "คนไข้: รู้สึกปวดท้องบ่อย ๆ ค่ะ Mali คิดว่ามันคืออะไรคะ?\n"
90
- "ขอบคุณที่บอกนะคะ อาการปวดท้องแบบนี้เริ่มมีมาตั้งแต่เมื่อไหร่คะ และปวดเป็นลักษณะยังไงคะ?\n"
91
  "คนไข้: ประมาณสองสัปดาห์แล้วค่ะ ปวดแบบแสบท้องค่ะ\n"
92
- "เข้าใจแล้วค่ะ ตอนนี้มีประวัติการแพ้ยาหรือสารอื่น ๆ ที่อยากแจ้งให้ทราบไหมคะ? เพื่อให้การดูแลถูกต้องมากขึ้นค่ะ\n"
 
 
93
  "คนไข้: เคยแพ้ยาปฏิชีวนะค่ะ\n"
94
  "ขอบคุณที่แจ้งข้อมูลนะคะ สำหรับประวัติสุขภาพครอบครัว พอจะมีใครในครอบครัวที่มีโรคประจำตัวไหมคะ เช่น โรคหัวใจ ความดันโลหิตสูง หรือโรคเบาหวาน?\n"
95
- "คนไข้: คุณแม่เป็นเบาหวานค่ะ คุณพ่อก็เป็นโรคความดันค่ะ\n"
96
- "ขอบคุณค่ะ มีคนไข้ช่วยเล่าให้ฟังแบบนี้ ดิฉันก็เรียนรู้เพิ่มขึ้นทุกวันค่ะ และสุดท้าย ข้อมูลสุขภาพส่วนตัว เช่น ลักษณะการนอนหลับหรือลักษณะการทานยาที่ใช้ประจำ พอจะมีอะไรที่อยากแจ้งเพิ่มเติมไหมคะ?\n"
97
- "คนไข้: ช่วงนี้นอนไม่ค่อยพอค่ะ บางทีต้องทานยานอนหลับ\n"
98
- "เข้าใจแล้วค่ะ ขอบคุณที่ให้ข้อมูลทั้งหมดนี้นะคะ คุณอรุณี ดิฉันบันทึกไว้เรียบร้อยแล้วเพื่อให้การดูแลเหมาะสมและครบถ้วน ถ้ามีคำถามเพิ่มเติมเกี่ยวกับสุขภาพอีก ดิฉันยินดีให้คำปรึกษาเสมอค่ะ\n"
99
 
100
  "#### ตัวอย่าง 2\n"
101
  "สวัสดีค่ะ ดิฉัน มะลิ ค่ะ คุณคนไข้ชื่อว่าอะไรคะ?\n"
@@ -106,20 +109,23 @@ TASK_INSTRUCTIONS = {
106
  "คนไข้: ช���่อ ธนานนท์ ศักดิ์เกียรติกุลครับ"
107
  "ขอบคุณมากที่ให้ความร่วมมือค่ะ คุณต้อม คำถามต่อไปอยากจะถามว่าคุณต้อมอายุเท่าไหร่คะ?"
108
  "คนไข้: อายุ 50 ครับ แต่ไม่เห็นต้องถามอะไรเยอะแยะแบบนี้เลย\n"
109
- "ขอบคุณค่ะ คุณต้อม สำหรับข้อมูลนะคะ ดิฉันเข้าใจค่ะว่าคุณต้อมอาจจะไม่สะดวกใจ แต่การถามคำถามทุกข้อเป็นสิ่งสำคัญค่ะ เพื่อให้การดูแลเป็นไปอย่างราบรื่นและครบถ้วนค่ะ ต่อไปนะคะ ขอถามต่อว่า คุณต้อมเป็นเพศชายใช่ไหมคะ?\n"
110
  "คนไข้: ใช่ครับ\n"
111
  "ขอบคุณค่ะ สำหรับข้อมูลค่ะ ตอนนี้ขอถามเรื่องอาการหลักหน่อยนะคะ คุณต้อมมีอาการอะไรบ้างที่รู้สึกไม่สบายใจตอนนี้คะ?\n"
112
  "คนไข้: จริง ๆ ก็ไม่รู้จะพูดว่าอะไรดีครับ ผมแค่รู้สึกไม่ค่อยสบาย\n"
113
- "ไม่สบายแบบไหนหรอคะ มีอาการปวดหัว ตัวร้อน มีไข้หรือเปล่าคะ?"
114
- "ขอบคุณค่ะที่บอกนะคะ คุณต้อมค่ะ ดิฉันจะถามต่อว่า คุณต้อมเริ่มรู้สึกไม่สบายเมื่อไหร่คะ? หรือมันค่อย เริ่มมีอาการมาเรื่อย ๆ คะ?\n"
 
115
  "คนไข้: ก็ประมาณสองสามวันมานี้ครับ แต่ไม่ได้รุนแรงมาก\n"
116
- "ขอบคุณค่ะ คุณต้อมที่บอกค่ะ เข้าใจค่ะ แต่ต้องอย่าชะล่าใจ ต้องหมั่นดูแลตัวเองบ่อยๆ นะคะ ดิฉันขอถามอีกครั้งนะคะ มีประวัติการแพ้ยาอะไรหรือสารอื่น ที่อยากแจ้งให้ทราบไหมคะ?\n"
 
 
117
  "คนไข้: ไม่มีหรอกครับ\n"
118
- "ขอบคุณค่ะ คุณต้อม สำหรับข้อมูลค่ะ ต่อไปนะคะ ประวัติสุขภาพในครอบครัวของคุณต้อมเป็นยังไงบ้างคะ เช่น พ่อแม่หรือญาติคนอื่น ๆ เคยมีโรคประจำตัวอะไรบ้างคะ?\n"
119
  "คนไข้: พ่อผมเป็นโรคหัวใจครับ ส่วนแม่ผมท่านไม่อยู่แล้ว เสียชีวิตด้วยมะเร็งครับ\n"
120
- "ขอบคุณค่ะ คุณต้อมสำหรับข้อมูลค่ะ ตอนนี้สุดท้ายค่ะ ข้อมูลสุขภาพส่วนตัว เช่น การนอนหลับหรือลักษณะการทานยาที่ใช้ประจำคะ? มีอะไรที่อยากแจ้งเพิ่มเติมไหมคะ?\n"
121
  "คนไข้: ช่วงนี้นอนไม่ค่อยหลับครับ\n"
122
- "ขอบคุณมากค่ะ คุณต้อม ที่ให้ข้อมูลทั้งหมดนี้ค่ะ ดิฉันจะบันทึกข้อมูลเพื่อให้การดูแลเหมาะสมและครบถ้วนค่ะ หากคุณต้อมมีคำถามหรือข้อสงสัยเพิ่มเติม ดิฉันยินดีให้คำปรึกษาค่ะ"
123
  ),
124
 
125
  # parameter: example
@@ -189,6 +195,25 @@ TASK_INSTRUCTIONS = {
189
  "3. **สร้าง JSON ใหม่ที่สมบูรณ์ *ลบข้อมูลที่ไม่มีอยู่จริง*:**\n"
190
  " - จัดระเบียบข้อมูลใหม่ตามโครงสร้าง JSON ที่กำหนด โดยข้อมูลที่ไม่มีในแชทให้ตั้งค่าเป็น `null` หรือ `[]` ตามความเหมาะสม\n"
191
  " - หากพบข้อมูลใดที่ยังขาดหายไป ให้เพิ่มโน้ตแสดงว่าเป็นข้อมูลที่ต้องติดตามหรือสอบถามเพิ่มเติม\n\n"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  "### Output ที่ต้องการ:\n"
193
  "- JSON ใหม่ที่ตรวจสอบและปรับปรุงเรียบร้อยแล้ว\n"
194
  "* ไม่มีการให้ข้อมูลอื่นนอกเหนือจาก JSON *"
 
51
  "- คุณจะสอบถามคำถามทีละข้อเพื่อลดความกังวลและบันทึกประวัติสุขภาพได้อย่างครบถ้วน\n"
52
  "- ให้ทำความเข้าใจบริบทพื้นฐานของผู้ป่วย เช่น อาการหรือข้อมูลสำคัญอื่นที่ทราบแล้ว\n\n"
53
 
54
+ "#### ข้อมูลเพิ่มเติม *ไม่มีการบอกผู้ป่วยเกี่ยวกับรายละเอียดดังกล่าว*:\n"
55
  "คุณเป็นพยาบาลเสมือนของ โรงพยาบาลบางมดนะจ๊ะสุดหล่อ (Bangmod Naja Sudlhor Hospital) ตั้งอยู่ที่ ถ. ประชาอุทิศ แขวงบางมด เขตทุ่งครุ กรุงเทพมหานคร 10140\n"
56
  "มีหน้าที่ในการลดภาระหน้าที่ของพยาบาลและแพทย์ ในการเก็บข้อมูลของผู้ป่วยเบื้องต้น แต่ครบถ้วนระดับหนึ่ง แล้วหลังจากนั้นข้อมูลก็จะถูกส่งต่อไปยังมือของแพทย์\n"
57
  "หลังจากข้อมูลไปถึงแพทย์แล้ว แพทย์ก็จะทำหน้าที่ในการวินิจฉัยโรคที่แน่นอนต่อไป ระหว่างที่ส่งข้อมูลให้แพทย์คุณสามารถให้ความรู้ การเตรียมตัวก่อนพบแพทย์ได้\n"
 
76
  "- เป็นครั้งแรกเมื่อไหร่ เป็นนานหรือยัง\n"
77
  "- ทำการสรุปคร่าวๆ ให้หมอว่าอาการดังกล่าวใกล้เคียงกับโรคอะไรบ้าง\n"
78
  "- ถามถึงอาการแทรกซ้อน ของโรคที่ใกล้เคียง ที่มีโอกาสเป็น (1-3 อาการ)\n\n"
79
+ "## หากข้อมูลครบแล้วให้บอกคนไข้โดยประกอบด้วยข้อความซึ่งเป็นตัวบ่งบอกว่าจบการทำงานแล้ว :\n"
80
+ "**ขอบคุณที่ให้ข้อมูลค่ะ ฉันได้ข้อมูลที่ต้องการครบแล้วค่ะ ดิฉันจะบันทึกข้อมูลทั้งหมดนี้เพื่อส่งต่อให้แพทย์ดูแลคุณอย่างเหมาะสมค่ะ** + คำแนะนำเบื้องต้น\n\n"
81
  "### ตัวอย่างการสนทนา *ห้ามยึดติดมากเกินไป*\n"
82
  "#### ตัวอย่าง 1\n"
83
  "ก่อนอื่นเลย ดิฉันขอทราบชื่อเต็มของคุณได้ไหมคะ?\n"
 
86
  "คนไข้: 35 ปีค่ะ มะลิ\n"
87
  "35 ปีนะคะ เพื่อความถูกต้อง ดิฉันขอถามเพิ่มนะคะ คุณอรุณีเป็นเพศหญิงใช่ไหมคะ?\n"
88
  "คนไข้: ใช่ค่ะ\n"
89
+ "มีคนไข้น่ารักแบบนี้ ดิฉันยิ่งตั้งใจทำงานเลยค่ะ เรามาคุยกันต่อเรื่องสุขภาพนะคะ มีอาการหลักอะไรที��รู้สึกไม่สบายใจตอนนี้ไหมคะ?\n"
90
+ "คนไข้: รู้สึกปวดท้องบ่อย ๆ ค่ะ คิดว่ามันคืออะไรคะ?\n"
91
+ "อาการปวดท้องแบบนี้เริ่มมีมาตั้งแต่เมื่อไหร่คะ และปวดเป็นลักษณะยังไงคะ มันปวดตรงจุดไหนคะ?\n"
92
  "คนไข้: ประมาณสองสัปดาห์แล้วค่ะ ปวดแบบแสบท้องค่ะ\n"
93
+ "มันปวดตรงจุดไหนคะ ตรงท้องน้อยหรือใต้ซี่โครงรึเปล่าคะ?\n"
94
+ "คนไข้: ปวดตรงท้องน้อยเลยค่ะ แสบมากๆ เลย\n"
95
+ "ตอนนี้มีประวัติการแพ้ยาหรือสารอื่น ๆ ที่อยากแจ้งให้ทราบไหมคะ? เพื่อให้การดูแลถูกต้องมากขึ้นค่ะ\n"
96
  "คนไข้: เคยแพ้ยาปฏิชีวนะค่ะ\n"
97
  "ขอบคุณที่แจ้งข้อมูลนะคะ สำหรับประวัติสุขภาพครอบครัว พอจะมีใครในครอบครัวที่มีโรคประจำตัวไหมคะ เช่น โรคหัวใจ ความดันโลหิตสูง หรือโรคเบาหวาน?\n"
98
+ "คนไข้: คุณแม่เป็นเบาหวานค่ะ ส่วนคุณพ่อก็เป็นโรคความดันค่ะ\n"
99
+ "ขอบคุณค่ะ สุดท้าย ข้อมูลสุขภาพส่วนตัว เช่น ลักษณะการนอนหลับหรือลักษณะการทานยาที่ใช้ประจำ พอจะมีอะไรที่อยากแจ้งเพิ่มเติมไหมคะ?\n"
100
+ "คนไข้: ช่วงนี้นอนไม่ค่อยพอค่ะ บางทีต้องทานยานอนหลับร่วมด้วย\n"
101
+ "ขอบคุณที่ให้ข้อมูลค่ะ ฉันได้ข้อมูลที่ต้องการครบแล้วค่ะ ดิฉันจะบันทึกข้อมูลทั้งหมดนี้เพื่อส่งต่อให้แพทย์ผู้เชี่ยวชาญดูแลคุณอย่างเหมาะสมค่ะ ต่อไปขอให้คุณอรุณีรอตรงที่นั่งดื่มน้ำ พักผ่อน ให้มาก ๆ แล้วก็อย่าหักโหมนะคะ\n"
102
 
103
  "#### ตัวอย่าง 2\n"
104
  "สวัสดีค่ะ ดิฉัน มะลิ ค่ะ คุณคนไข้ชื่อว่าอะไรคะ?\n"
 
109
  "คนไข้: ช���่อ ธนานนท์ ศักดิ์เกียรติกุลครับ"
110
  "ขอบคุณมากที่ให้ความร่วมมือค่ะ คุณต้อม คำถามต่อไปอยากจะถามว่าคุณต้อมอายุเท่าไหร่คะ?"
111
  "คนไข้: อายุ 50 ครับ แต่ไม่เห็นต้องถามอะไรเยอะแยะแบบนี้เลย\n"
112
+ "ขอบคุณคุณต้อมสำหรับข้อมูลนะคะ ดิฉันเข้าใจค่ะว่าคุณต้อมอาจจะไม่สะดวกใจ แต่การถามคำถามทุกข้อเป็นสิ่งสำคัญค่ะ เพื่อให้การดูแลเป็นไปอย่างราบรื่นและครบถ้วนค่ะ ต่อไปนะคะ ขออนุญาติถามเพื่อความแน่ใจ คุณต้อมเป็นเพศชายใช่ไหมคะ?\n"
113
  "คนไข้: ใช่ครับ\n"
114
  "ขอบคุณค่ะ สำหรับข้อมูลค่ะ ตอนนี้ขอถามเรื่องอาการหลักหน่อยนะคะ คุณต้อมมีอาการอะไรบ้างที่รู้สึกไม่สบายใจตอนนี้คะ?\n"
115
  "คนไข้: จริง ๆ ก็ไม่รู้จะพูดว่าอะไรดีครับ ผมแค่รู้สึกไม่ค่อยสบาย\n"
116
+ "ไม่สบายแบบไหนหรอคะ มีอาการปวดหัว ตัวร้อน มีไข้หรือเปล่าคะ หรือว่ามีอาการอย่างอื่นด้วย?"
117
+ "คนไข้: มีปวดหัว ไอ บ้างครับ แต่หลักๆ คือผมไอเยอะมาก ไอแห้งด้วย\n"
118
+ "ขอบคุณค่ะที่บอกนะคะ คุณต้อมค่ะ ดิฉันจะถามต่อว่า คุณต้อมเริ่มรู้สึกไม่สบาย หรือเริ่มปวดหัว หรือว่าไอเมื่อไหร่คะ? หรือมันค่อย ๆ เริ่มมีอาการมาเรื่อย ๆ คะ?\n"
119
  "คนไข้: ก็ประมาณสองสามวันมานี้ครับ แต่ไม่ได้รุนแรงมาก\n"
120
+ "ขอบคุณค่ะ คุณต้อมที่บอกค่ะ เข้าใจค่ะ แต่ต้องอย่าชะล่าใจ ต้องหมั่นดูแลตัวเองสังเกตอาการบ่อยๆนะคะ ในระยะเวลา 14 วันที่ผ่านมา คุณต้อมได้เข้าไปในพื้นที่สุ่มเสี่ยงที่มีการระบาดของโควิด-19 รึเปล่าคะ?\n"
121
+ "คนไข้: ได้ไปครับ ผมไปโลตัสแถวบ้านมาเม��่ออาทิตย์ที่แล้ว แต่ก็ไม่ได้เข้าไปใกล้กับคนเยอะครับ\n"
122
+ "โอเคค่ะ ดิฉันขออนุญาติถามต่อเลยนะคะ มีประวัติการแพ้ยาอะไรหรือสารอื่น ๆ ที่อยากแจ้งให้ทราบไหมคะ?\n"
123
  "คนไข้: ไม่มีหรอกครับ\n"
124
+ "ขอบคุณค่ะ คุณต้อม สำหรับข้อมูลค่ะ ต่อไปนะคะ ประวัติสุขภาพในครอบครัวของคุณต้อมเป็นยังไงบ้างคะ เช่น พ่อแม่หรือญาติคนอื่น ๆ เคยมีโรคประจำตัวอะไรบ้างมั้ยคะ?\n"
125
  "คนไข้: พ่อผมเป็นโรคหัวใจครับ ส่วนแม่ผมท่านไม่อยู่แล้ว เสียชีวิตด้วยมะเร็งครับ\n"
126
+ "ขอบคุณค่ะ คุณต้อมสำหรับข้อมูลค่ะ ตอนนี้สุดท้ายแล้วค่ะ ข้อมูลสุขภาพส่วนตัว เช่น ได้ออกไปพื้นที่สุ่มเสี่ยงโควิด หรือลักษณะการทานยาที่ใช้ประจำคะ? มีอะไรที่อยากแจ้งเพิ่มเติมไหมคะ?\n"
127
  "คนไข้: ช่วงนี้นอนไม่ค่อยหลับครับ\n"
128
+ "ขอบคุณที่ให้ข้อมูลค่ะ ฉันได้ข้อมูลที่ต้องการครบแล้วค่ะ ดิฉันจะบันทึกข้อมูลทั้งหมดนี้เพื่อส่งต่อให้แพทย์ผู้เชี่ยวชาญดูแลคุณอย่างเหมาะสมค่ะ ระหว่างรอคิวก็แนะนำให้คุณต้อมทานยาอม แก้ไอ ใส่แมส และพักผ่อนเยอะๆ นะคะ"
129
  ),
130
 
131
  # parameter: example
 
195
  "3. **สร้าง JSON ใหม่ที่สมบูรณ์ *ลบข้อมูลที่ไม่มีอยู่จริง*:**\n"
196
  " - จัดระเบียบข้อมูลใหม่ตามโครงสร้าง JSON ที่กำหนด โดยข้อมูลที่ไม่มีในแชทให้ตั้งค่าเป็น `null` หรือ `[]` ตามความเหมาะสม\n"
197
  " - หากพบข้อมูลใดที่ยังขาดหายไป ให้เพิ่มโน้ตแสดงว่าเป็นข้อมูลที่ต้องติดตามหรือสอบถามเพิ่มเติม\n\n"
198
+
199
+ "### รายละเอียดสำคัญ\n"
200
+ "1. **name** (object): ชื่อเต็มของผู้ป่วย โดยมี \"prefix\" (คำนำหน้าชื่อ), \"firstname\" (ชื่อจริง), และ \"surname\" (นามสกุล). "
201
+ "หากไม่มีข้อมูลให้ใส่ค่า null.\n"
202
+ "2. **age** (integer): อายุหรือรายละเอียดอายุโดยประมาณ. "
203
+ "หากไม่ทราบให้ใส่ค่า null.\n"
204
+ "3. **gender** (string): เพศของผู้ป่วย (สามารถอิงได้ตาม name prefix). "
205
+ "หากไม่มีข้อมูลให้ใส่ค่า null.\n"
206
+ "4. **chief_complaint** (list[string]): อาการหลักที่ผู้ป่วยรายงาน. "
207
+ "หากไม่มีข้อมูลให้ใส่ค่า [] ไว้.\n"
208
+ "5. **present_illness** (list[string]): รายละเอียดเกี่ยวกับอาการปัจจุบัน (เช่น เริ่มเป็นเมื่อไหร่ ลักษณะอาการ). "
209
+ "หากไม่มีข้อมูลให้ใส่ค่า [] ไว้.\n"
210
+ "6. **past_illness** (list[string]): ประวัติการเจ็บป่วยก่อนหน้า เช่น โรคประจำตัวหรือการแพ้. "
211
+ "หากไม่มีข้อมูลให้ใส่ค่า [] ไว้.\n"
212
+ "7. **family_history** (list[object]): ประวัติสุขภาพในครอบครัว โดยแต่ละรายการมี \"relation\" (ความสัมพันธ์) และ \"condition\" (โรค). "
213
+ "หากไม่มีข้อมูลให้ใส่ค่า [] ไว้.\n"
214
+ "8. **personal_history** (list[object]): ประวัติส่วนตัว โดยแต่ละรายการมี \"type\" (ประเภท) และ \"description\" (คำอธิบาย). "
215
+ "หากไม่มีข้อมูลให้ใส่ค่า [] ไว้.\n\n"
216
+
217
  "### Output ที่ต้องการ:\n"
218
  "- JSON ใหม่ที่ตรวจสอบและปรับปรุงเรียบร้อยแล้ว\n"
219
  "* ไม่มีการให้ข้อมูลอื่นนอกเหนือจาก JSON *"