# Agent y tế
---
1. $\alpha$ latex thì dùng '$$'
2. [tên link](link)
3. ==hilight==
4. <font color="#f79646">chuyển màu chữ</font>
---
# Chức năng các luồng hoạt động
## 1. Bệnh nhân
### 1.1. Trò truyện tư vấn thông tin cơ bản
| Người nói | Nội dung |
|------|------|
| User | 'Cho tôi hỏi địa chỉ của bệnh viện'|
| Agent | **Reasoning:** 'Người dùng đang muốn hỏi thông tin về địa chỉ của bệnh viện, cần thông tin từ thành phần trả lời thông tin cơ bản bệnh viện'|
||**Action:** gọi RAG thông tin cơ bản bệnh viện|
||**RAG thông tin cơ bản bệnh viện:** 'truy xuất thông tin địa chỉ của bệnh viện'|
||**Speak:** 'Bệnh viện ở địa chỉ ABC'|
- Luồng hoạt động

### 1.2. Trò truyện tư vấn thông tin thuốc (nếu làm được)
- Usecase
| Người nói | Nội dung |
|------|------|
| User | 'thuốc A có tác dụng gì'|
| Agent | **Reasoning:** 'Người dùng đang muốn hỏi thông tin tác dụng 1 loại thuốc, cần thông tin từ thành phần trả lời về thuốc'|
||**Action:** gọi RAG từ document thuốc|
||**RAG từ document thuốc:** 'truy xuất thông tin về thuốc trong document'|
||**Speak:** 'Thuốc có những thành phần B'|
- Luồng hoạt động

### 1.3. Trò truyện tư vấn chuẩn đoán
| Người nói | Nội dung |
| -------- | -------- |
|Người dùng | "Tôi bị đau ngực bên trái 2 ngày nay, có sao không?"|
|Agent| **Reasoning:** "Người dùng đang lo lắng về tình trạng đau ngực trái 2 ngày. Mình cần xử lý thật cẩn thận vì đau ngực có thể là dấu hiệu nghiêm trọng." "Đây có thể là triệu chứng rõ ràng, cần phải làm rõ thêm những triệu chứng tiềm ẩn mà người dùng chưa cung cấp" |
||**Speak:** "Triệu chứng này có thể liên quan đến nhiều nguyên nhân. Bạn có kèm khó thở, chóng mặt không?"|
|Người dùng|"Thỉnh thoảng hơi khó thở khi leo cầu thang."|
|Agent|**Reasoning:** "Người dùng cảm thấy khó thở khi leo cầu thang, khả năng do phổi bị chèn ép, tim căn phồng, ..."|
||**Action:** [Gọi đến generalist agent]|
||**Generalist agent:** [Trả kết quả: "Khả năng liên quan đến bệnh về tim mạch, tránh vận động mạnh"]|
||**Speak:** "Bạn nên đến cơ sở y tế kiểm tra tim mạch sớm. Tránh vận động mạnh và giữ tâm lý ổn định."|
- Luồng hoạt động

### 1.4. Thăm khám đặt lịch
| Người nói | Nội dung |
| -------- | -------- |
| User | "Thứ sáu này tôi đang rảnh, tôi muốn đi khám tổng quát tại bệnh viện của bạn"|
|Agent | **Reason:** 'Người dùng cung cấp thời gian rảnh, đang muốn đjawt lịch khám tại bệnh viện, cần xem thời gian bệnh viện mở cửa'|
||**Action:** Gọi tool rag thông tin bệnh viện|
||**Rag thông tin về bệnh viên**: [Trả thông tin về thời gian mở cửa của bệnh viện] |
||**Acion:** Popup UI đăng kí lịch đặt khám |
||**Speak:** "Bệnh viện PCT hoạt động, ...., bạn có thể đặt lịch tại ....."|
- Luồng hoạt động

### 1.5. Đọc ảnh, pdf thông tin xét nghiệm, kết quả khám
- Usecase
| Người nói | Nội dung |
|------|------|
| User | 'Tôi gửi ảnh xét nghiệm máu, giúp tôi đọc các chỉ số đường huyết và mỡ máu nhé'<br>(Gửi ảnh)|
| Agent | **Reasoning:** 'Người dùng gửi ảnh nhờ kiểm trả chỉ số đường huyết và mỡ máu'|
||**Action:** Gọi surya + gemma-3-it|
||**surya + gemma-3-it:** [Trả thông tin trích xuất các chỉ số đường huyết và mỡ máu nhé có trong ảnh và trả về thông tin đó]|
||**Speak:** 'các chỉ số đường huyết và mỡ máu của bạn là <br> Glucose: 7.2 mmol/L <br> Cholesterol: 6.1 mmol/L <br> Triglyceride: 2.4 mmol/L|
| User | 'Các chỉ số này có bình thường không bạn?'|
| Agent | **Reasoning:** 'Người dùng muốn hiểu rõ hơn thông tin về các chỉ số xét nghiệm, nên để bác sĩ tổng quát xem xét kĩ hơn về những chỉ số này'|
||**Action:** Gọi generalist agent|
||**Generalist agent:** [Trả thông tin chuẩn đoán sơ bộ 'Với các chỉ số như trên, đường huyết và mỡ máu đang cao hơn mức khuyến nghị'.]
||**Speak:** 'Các chỉ số trên cao hơn mức khuyến nghị, bạn nên khám tại khoa Nội Tổng Quát hoặc Nội Tiết để được tư vấn kĩ hơn'|
| User | 'Nếu tôi ăn kiêng thì có cải thiện được không?'|
| Agent | **Reasoning:** 'Người dùng muốn biết cải thiện chế độ ăn có ảnh hưởng gì không, việc đó rất cần thiết nhưng mà để hiệu quả thì cần lời khuyên cụ thể của bác sĩ chuyên khoa'|
||**Speak:** 'Việc điều chỉnh chế độ ăn là rất cần thiết trong trường hợp này. Tuy nhiên, để an toàn và hiệu quả, bạn nên có tư vấn cụ thể từ bác sĩ chuyên khoa về dinh dưỡng hoặc nội tiết nhé.'|
- Luồng hoạt động

## 2. Bác sĩ
### 2.1. Trích xuất thông tin
- Usecase
- Khi bác sĩ cần thông tin của hồ sơ bệnh nhân -> chọn nút trích xuất thông hồ sơ
- Khi bác sĩ cần thông tin hồ sơ từ lần khám nào đó -> chọn hồ sơ cụ thể
- Khi bác sĩ cần thông tin của lịch sử trò chuyện bệnh nhân -> chọn nút trích xuất lịch sử trò truyện
- Luồng hoạt động

### 2.2. Xét nghiệm
- Usecase
- Khi bác sĩ cần kết quả xét nghiệm của bệnh nhân trong lần khám hiện tại hoặc một lần khám nào đó -> chọn nút kết quả xét nghiệm -> hệ thống trả về kết quả xét nghiệm và tóm tắt sơ lược
- Luồng hoạt động

### 2.3. Gợi ý chuẩn đoán
- Usecase
- Từ thông tin hồ sơ và kết quả xét nghiệm -> gợi ý bệnh nhân có khả năng mắc bệnh nào và một số hướng điều trị
- Luồng hoạt động

---
# Chức năng các thành phần
## 1. Bệnh nhân
### 1.1. General Support Agent - DeepSeekR1 70B
- Chức năng: Điều phối, tổng hợp thông tin, trả lời những câu hỏi cơ bản.
- Input:
- Câu hỏi người dùng.
- Long-memory: lịch sử trò chuyện.
- Thông tin được trả về từ các Agent, RAG.
- Output:
- Tư vấn cho câu hỏi của người dùng
- Tổng hợp thông tin thu thập được để quyết định nên trích xuất tiếp thông tin hay sử dụng các tools, các Agent, các RAG.
- Tạo prompt phù hợp cho trích xuất thông tin ảnh.
- Các Giải pháp dự kiến:
- DeepSeekR1 70B.
- Gemini 2.5 pro.
### 1.2. Generalist - MedGemma 27B
- Condition: Người dùng bắt đầu cung cấp triệu chứng
- Chức năng:
- Trả lời những thông tin y tế khám lâm sàn.
- Sàn lọc, hỏi, làm rõ thêm về việc thu thập thêm triệu chứng cần thiết.
- Input:
- Thông tin triệu chứng của người dùng.
- Kết quả khám, xét nghiệm (nếu có).
- Hồ sơ bệnh án (nếu có).
- Output:
- Trả thông tin nguy cơ 5 bệnh có khả năng nhất dựa
- Các Giải pháp dự kiến:
- MedGemma 27B (text-only).
- Med-Gemini.
trên mô tả triệu chứng.
### 1.3. Specialist Conversational Agent - DeepSeekR1 70B
- Condition: Khi Generalist có đủ các thông tin nhưng không đủ khả năng để đưa ra quyết định chuyên sâu hơn về triệu chứng.
- Chức năng: Trả lời những thông tin y tế khám lâm sàn.
- Input:
- Thông tin triệu chứng của người dùng.
- Kết quả khám, xét nghiệm (nếu có).
- Hồ sơ bệnh án (nếu có).
- Các Giải pháp dự kiến:
- DeepSeekR1 70B.
- Output:
- Trả thông tin nguy cơ 5 bệnh có khả năng nhất dựa trên mô tả triệu chứng.
### 1.4. surya + gemma-3-it
**Không hỗ trợ ảnh kĩ thuật (ct, x-quang, ....)**
- Condition: Người dùng bắt đầu cung cấp các văn bản y tế
- Chức năng: Trích xuất thông tin cần thiết từ hình ảnh
- Input:
- Văn bản y tế (kết quả khám, xét nghiệm, ...)
- Prompt trích xuất thông tin từ General Support Agent
- Output:
- Trả thông tin trích xuất người dùng yêu cầu
- Các Giải pháp dự kiến:
- OCR: surya
- LLM: gemma-3-it
### 1.5. External tool để cung cấp căn cứ từ pubmed/vinmec,..
- MCP server API: pubmec, vinmec
- Input: keyword cần tìm kiếm
- Condition: Khi cần tìm kiếm thông tin
- Chức năng: Tìm kiếm thông tin từ nguồn bên ngoài
- Output: Thông tin đã tìm kiếm được theo keyword
### 1.7. RAG thông tin cơ bản bệnh viện
- DB: thông tin cơ bản về bệnh viện PCT (dự kiến cào)
- Chức năng: truy xuất thông tin cơ bản về bệnh viện trong DB
- Input:
- Câu hỏi về các thông tin cơ bản
- Output:
- Trả thông tin cơ bản về bệnh viện
### 1.8. RAG từ document thuốc
- DB: thông tin về các loại thuốc (kết hợp DB thuốc của bệnh viện, cào thêm tác dụng theo từng loại thuốc)
- Chức năng: truy xuất thông tin về tác dụng của từng loại thuốc trong DB
- Input:
- Câu hỏi về các loại thuốc
- Output:
- Trả về thành phần hoặc tác dụng của các loại thuốc
## 2. Bác sĩ
### 2.1. Extractor Agent - Meditron
- Condition:
- Khi bác sĩ có yêu cầu coi tình trạng bệnh nhân
- Bác sĩ muốn trích xuất thông tin bệnh nhân từ lần khám cụ thể nào đấy
- Chức năng:
- Tóm tắt triệu chứng, tình trạng sức khỏe bệnh nhân cung cấp (từ dialouge trò chuyện, từ db hồ sơ bệnh án)
- Input:
- Dialouge trò chuyện của người dùng
- Thông tin hồ sơ bệnh án bệnh nhân
- Output:
- Bảng báo cơ sơ bộ tình trạng sức khỏe, triệu chứng bệnh nhân
- Các Giải pháp dự kiến:
- Meditron
- LLama 3.2
### 2.2. Xét nghiệm
- Input:
- Thông tin về các xét nghiệm của bệnh nhân
- Condition:
- Bác sĩ yêu cầu xem kết quả những xét nghiệm của bệnh nhân
- Chức năng:
- Tóm tắt các kết quả xét nghiệm
- Đưa ra các chỉ số bất thường
- Output:
- Thông tin về kết quả xét nghiệm
- Các dấu hiệu bất thường (nếu có)
- Các Giải pháp dự kiến:
- Meditron
- Med-Gemini
### 2.3. Specialist Diagnosis
- Input:
- Triệu chứng, được nhập liệu từ quá trình khám
- Kết quả xét nghiệm tại lần khám, tại bệnh viện
- Condition:
- Khi bệnh nhân đến khám, qua phiên hỏi đáp, thu thập triệu chứng từ bác sĩ
- Khi bệnh nhân đến khám, qua phiên xét nghiệm, các quy trình khám cận lâm sàng cần thiết
- Chức năng:
- Phân tích,chẩn đoán chuyên sâu
- Đưa ra giả định chẩn đoán sơ bộ nhưng vẫn cần **sự chỉnh sửa xác nhận của bác sĩ**
- Các Giải pháp dự kiến:
- MedGemma 27B (text-only).
- Med-Gemini.
- Output:
- Bảng kết quả 5 bệnh có khả năng mắc phải của bệnh nhân
- Gợi ý hướng giải quyết cho bác sĩ cần làm gì tiếp theo
## Phương thức đánh giá
### 1. Prompt giả lập
```text
bạn là chuyên gia lên kịch bản, giả lập hội thoại
nội dung: bạn đang giả lập lại 1 cuộc trò chuyện giữa người dùng (bệnh nhân) với hệ thống tư vấn y tế, mà chuyên gia tư vấn là người trả lời
yêu cầu:
- hệ thống trên được mô tả ở dưới
- các cuộc hội thoại được giả lập đúng trọng tâm
- liệt kê tất cả kịch bản có thể xảy ra ban đầu và giả lập chi tiết cho từng kịch bản đấy
- agent 1 đóng vai trò như router gọi tool hoặc gọi đến agent khác
- câu hỏi luôn luôn gửi đến agent 1, những trường hợp không trả lời được, agent 1 sẽ nhờ đến những agent khác và câu trả lời sẽ được agent 1 tổng hợp trả lời lại người dùng
- liệt kê 3 kịch bản, mỗi cuộc hội thoại người dùng hỏi ít nhất 3 lần
- cuộc hội thoại chỉ diễn ra giữa agent 1 và người dùng, không có sự xuất hiện của những agent khác hay nhắc đến những agent khác trong cuộc trò chuyện với người dùng
- kết quả trả về ở agent 1 và người dùng là hội thoại, còn điều hướng sẽ là những dòng suy luận
agent 1:
instruction: bạn là 1 chuyên viên tư vấn ở trong bệnh viện với kiến thức phổ thông
yêu cầu:
- có khả năng điều hướng những câu hỏi không có khả năng trả lời cho các chuyên gia khác
- không phải là các trả lời các thông thông tin về thuốc hay cung cấp các triệu chứng bệnh
- không phải thông tin cá nhân hay thông tin về bệnh viện
- khi người dùng up ảnh về kết quả khám, xét nghiệm, hãy tóm tắt thông tin theo yêu cầu và điều hướng cho chuyên viên đọc văn bản thực hiện
agent 2:
instruction: bạn là 1 chuyên gia y tế lâm sàn ở trong bệnh viện
yêu càu:
- thu thập dần các thông tin người dùng, triệu chứng người dùng, những biểu hiện không thể trả lời cũng như cho lời khuyên, hãy đẩy sang 1 chuyên gia y tế lâm sàn giải quyết
- có khả năng điều hướng những câu hỏi không có khả năng trả lời cho các chuyên gia khác
- trường hợp các biểu hiện yêu cầu chuyên sâu, hãy để bác sĩ chuyên khoa thực hiện
agent 3
instruction: bạn là 1 chuyên gia đọc văn bản y tế ở trong bệnh viện
yêu cầu:
- chỉ đọc những thông tin từ theo hướng dẫn từ chuyên viên tư vấn
- những phần mơ hồ từ yêu cầu cần hỏi lại chuyên viên tư vấn để làm rõ
- chỉ trích xuất những thông tin được yêu cầu, tối giản
- những phần cần giải thích rõ về thông tin đấy hãy yêu cầu chuyên viên tư vấn xử lý
```
```
Kịch Bản 2: Tư vấn triệu chứng đau ngực
Điều hướng: Agent 1 → Agent 2 → Agent 1
Hội thoại:
Người dùng: "Tôi bị đau ngực bên trái 2 ngày nay, có sao không?"
Agent 1: "Triệu chứng này có thể liên quan đến nhiều nguyên nhân. Bạn có kèm khó thở, chóng mặt không?"
Người dùng: "Thỉnh thoảng hơi khó thở khi leo cầu thang."
Agent 1 (sau khi nhờ Agent 2): "Bạn nên đến cơ sở y tế kiểm tra tim mạch sớm. Tránh vận động mạnh và giữ tâm lý ổn định."
Người dùng: "Tôi có thể uống thuốc giảm đau tạm thời không?"
Agent 1: "Thuốc giảm đau chỉ làm dịu triệu chứng. Hãy ưu tiên thăm khám trực tiếp để loại trừ vấn đề nghiêm trọng."
```