บทนำ: ทำไมร้านขายยาต้องมีระบบตรวจสอบใบสั่งยาอัตโนมัติ
ในปี 2026 การจัดการใบสั่งยาในร้านขายยาเป็นเรื่องที่ต้องระมัดระวังอย่างยิ่ง ทั้งเรื่องความปลอดภัยของผู้ป่วย การปฏิบัติตามกฎหมาย และการลดความเสี่ยงจากข้อผิดพลาดของเภสัชกร ผมเคยทำงานในร้านขายยาขนาดใหญ่แห่งหนึ่ง พบว่าการตรวจสอบใบสั่งยาด้วยมือใช้เวลาเฉลี่ย 3-5 นาทีต่อใบ ซึ่งทำให้ลูกค้าต้องรอนานและเภสัชกรเองก็เหนื่อยล้า
บทความนี้จะสอนคุณวิธีสร้างระบบตรวจสอบใบสั่งยาอัตโนมัติโดยใช้
HolySheep AI ตั้งแต่เริ่มต้น ไม่ต้องมีประสบการณ์เขียนโค้ดมาก่อนก็ทำได้
ระบบทำงานอย่างไร
ระบบนี้ทำหน้าที่หลัก 3 อย่าง:
- ตรวจสอบความเสี่ยงด้านยา (DeepSeek Risk Alerts) - AI จะวิเคราะห์ว่ายาที่สั่งมีปฏิกิริยาต่อกันหรือมีข้อห้ามใช้กับผู้ป่วยบางกลุ่มหรือไม่
- อ่านและอธิบายคำขอยา (Kimi Medication Instructions) - แปลงข้อมูลใบสั่งยาให้เข้าใจง่าย พร้อมอธิบายวิธีการใช้ยาแต่ละชนิด
- บันทึกการทำงานตามกฎหมาย (Compliance Logging) - เก็บบันทึกทุกขั้นตอนเพื่อใช้เป็นหลักฐานเมื่อมีการตรวจสอบ
เครื่องมือที่ต้องเตรียม
- บัญชี HolySheep AI (ลงทะเบียนฟรีที่ สมัครที่นี่)
- คีย์ API จากหน้าแดชบอร์ด
- Python 3.8+ ติดตั้งในเครื่อง
- โปรแกรมแก้ไขโค้ด เช่น VS Code
ขั้นตอนที่ 1: ตั้งค่า HolySheep API
ก่อนเริ่มต้น ให้คุณล็อกอินเข้า HolySheep AI แล้วไปที่หน้า API Keys เพื่อสร้างคีย์ใหม่ ตั้งชื่อว่า "pharmacy-reviewer" หรืออะไรก็ได้ตามต้องการ คัดลอกคีย์นั้นเก็บไว้ (จะเห็นได้เพียงครั้งเดียว)
ติดตั้งไลบรารีที่จำเป็น
เปิด Terminal (หรือ Command Prompt) แล้วพิมพ์คำสั่งติดตั้ง:
pip install requests python-dotenv datetime json hashlib
สร้างไฟล์ใหม่ชื่อ
pharmacy_config.py เพื่อเก็บการตั้งค่า:
# pharmacy_config.py
import os
ตั้งค่า HolySheep API - URL นี้ถูกต้องตามข้อกำหนด
BASE_URL = "https://api.holysheep.ai/v1"
ใส่คีย์ API ของคุณที่นี่
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
หัวข้อสำหรับการตรวจสอบความเสี่ยง
RISK_CHECK_MODEL = "deepseek-chat" # ใช้ DeepSeek สำหรับวิเคราะห์ความเสี่ยง
หัวข้อสำหรับการอ่านคำขอยา
MEDICATION_MODEL = "moonshot-v1-32k" # ใช้ Kimi สำหรับอ่านและอธิบายยา
ขั้นตอนที่ 2: สร้างฟังก์ชันตรวจสอบความเสี่ยงด้วย DeepSeek
ในการทำงานจริง การตรวจสอบว่ายามีความเสี่ยงหรือไม่เป็นเรื่องสำคัญมาก ตัวอย่างเช่น ยาบางชนิดห้ามใช้กับผู้ป่วยที่มีโรคไต หรือยาสองชนิดที่รวมกันแล้วอาจเกิดอันตรายได้
สร้างไฟล์
risk_checker.py:
import requests
import json
from datetime import datetime
def check_medication_risk(patient_info, medications, api_key, base_url):
"""
ตรวจสอบความเสี่ยงของยาที่สั่ง
Args:
patient_info: ข้อมูลผู้ป่วย (อายุ, โรคประจำตัว, การแพ้ยา)
medications: รายการยาที่สั่ง
api_key: คีย์ API จาก HolySheep
base_url: URL ของ API
Returns:
dict: ผลการตรวจสอบพร้อมระดับความเสี่ยง
"""
# สร้างคำถามสำหรับ DeepSeek
prompt = f"""คุณเป็นเภสัชกรผู้เชี่ยวชาญ ตรวจสอบความเสี่ยงของใบสั่งยานี้:
ข้อมูลผู้ป่วย: {json.dumps(patient_info, ensure_ascii=False, indent=2)}
ยาที่สั่ง: {json.dumps(medications, ensure_ascii=False, indent=2)}
ตอบเป็น JSON ดังนี้:
{{
"risk_level": "สูง/ปานกลาง/ต่ำ",
"warnings": ["คำเตือนแต่ละข้อ"],
"contraindications": ["ยาที่ห้ามใช้พร้อมกัน"],
"recommendations": ["ข้อแนะนำสำหรับเภสัชกร"]
}}
"""
# เรียกใช้ DeepSeek ผ่าน HolySheep
response = requests.post(
f"{base_url}/chat/completions",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"model": "deepseek-chat",
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.3 # ค่าต่ำเพื่อความแม่นยำ
}
)
if response.status_code == 200:
result = response.json()
content = result["choices"][0]["message"]["content"]
# แปลงผลลัพธ์เป็น JSON
try:
return json.loads(content)
except:
return {"error": "ไม่สามารถแปลงผลลัพธ์", "raw": content}
else:
return {"error": f"API Error: {response.status_code}", "detail": response.text}
ตัวอย่างการใช้งาน
if __name__ == "__main__":
patient = {
"age": 65,
"conditions": ["โรคไตเรื้อรัง", "ความดันโลหิตสูง"],
"allergies": ["เพนิซิลิน"]
}
meds = [
{"name": "แอสไพริน", "dosage": "80mg", "frequency": "วันละ 1 ครั้ง"},
{"name": "วอร์ฟาริน", "dosage": "5mg", "frequency": "วันละ 1 ครั้ง"},
{"name": "ไอบูโพรเฟน", "dosage": "400mg", "frequency": "เมื่อปวด"}
]
result = check_medication_risk(
patient, meds,
"YOUR_HOLYSHEEP_API_KEY",
"https://api.holysheep.ai/v1"
)
print(json.dumps(result, ensure_ascii=False, indent=2))
ขั้นตอนที่ 3: สร้างระบบอ่านคำขอยาด้วย Kimi
Kimi เหมาะสำหรับการอ่านและแปลงข้อมูลใบสั่งยาให้เข้าใจง่าย เพราะสามารถประมวลผลข้อความภาษาไทยได้ดีมาก สร้างไฟล์
medication_reader.py:
import requests
import json
from datetime import datetime
def read_medication_instructions(prescription_text, api_key, base_url):
"""
อ่านและอธิบายคำขอยาอย่างเข้าใจง่าย
Args:
prescription_text: ข้อความใบสั่งยา
api_key: คีย์ API จาก HolySheep
base_url: URL ของ API
Returns:
dict: คำอธิบายยาแต่ละชนิด
"""
prompt = f"""อ่านใบสั่งยานี้และอธิบายให้ผู้ป่วยเข้าใจง่าย:
{prescription_text}
สำหรับแต่ละยา ให้อธิบาย:
1. ชื่อยาและวัตถุประสงค์
2. วิธีการรับประทาน/ใช้
3. สิ่งที่ควรและไม่ควรทำ
4. ผลข้างเคียงที่อาจพบ
5. อาการที่ต้องพบแพทย์ทันที
ตอบเป็น JSON:
{{
"medications": [
{{
"name": "ชื่อยา",
"purpose": "วัตถุประสงค์",
"how_to_use": "วิธีใช้",
"do's": ["สิ่งที่ควรทำ"],
"don'ts": ["สิ่งที่ไม่ควรทำ"],
"side_effects": ["ผลข้างเคียง"],
"emergency_signs": ["อาการฉุกเฉิน"]
}}
],
"summary": "สรุปสำคัญ 2-3 ประโยค",
"pharmacist_notes": "หมายเหตุสำหรับเภสัชกร"
}}
"""
# เรียกใช้ Kimi (moonshot) ผ่าน HolySheep
response = requests.post(
f"{base_url}/chat/completions",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"model": "moonshot-v1-32k",
"messages": [{"role": "user", "content": prompt}]
}
)
if response.status_code == 200:
result = response.json()
content = result["choices"][0]["message"]["content"]
try:
return json.loads(content)
except:
return {"error": "ไม่สามารถแปลงผลลัพธ์", "raw": content}
else:
return {"error": f"API Error: {response.status_code}"}
def generate_patient_leaflet(instructions, api_key, base_url):
"""
สร้างแผ่นพับให้ผู้ป่วยนำกลับบ้าน
"""
prompt = f"""สร้างแผ่นพับให้ผู้ป่วยจากข้อมูลนี้ เขียนเป็นภาษาที่เข้าใจง่าย ไม่ใช้ศัพท์แพทย์มากเกินไป:
{json.dumps(instructions, ensure_ascii=False, indent=2)}
แผ่นพับควรมี:
- ชื่อยาและรูปร่างยา (ถ้ามี)
- เวลาที่ต้องรับประทาน
- สิ่งที่ควรระวัง
- วิธีเก็บรักษา
- เบอร์โทรติดต่อเมื่อมีปัญหา
"""
response = requests.post(
f"{base_url}/chat/completions",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"model": "moonshot-v1-32k",
"messages": [{"role": "user", "content": prompt}]
}
)
if response.status_code == 200:
return response.json()["choices"][0]["message"]["content"]
else:
return "เกิดข้อผิดพลาดในการสร้างแผ่นพับ"
ขั้นตอนที่ 4: ระบบบันทึกการทำงานตามกฎหมาย
การบันทึกทุกขั้นตอนเป็นสิ่งจำเป็นตามกฎหมาย เพื่อใช้เป็นหลักฐานเมื่อมีการตรวจสอบจากสำนักงานคณะกรรมการอาหารและยา (อย.) สร้างไฟล์
compliance_logger.py:
import hashlib
import json
from datetime import datetime
from typing import Dict, List, Any
import sqlite3
class ComplianceLogger:
"""
ระบบบันทึกการทำงานตามกฎหมาย
เก็บบันทึกทุกขั้นตอนไม่สามารถแก้ไขได้ (immutable)
"""
def __init__(self, db_path: str = "compliance_log.db"):
self.db_path = db_path
self._init_database()
def _init_database(self):
"""สร้างตารางฐานข้อมูล"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS audit_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp TEXT NOT NULL,
event_type TEXT NOT NULL,
prescription_id TEXT,
pharmacist_id TEXT,
action_details TEXT,
risk_check_result TEXT,
hash_previous TEXT,
self_hash TEXT,
api_response_time_ms REAL
)
""")
conn.commit()
conn.close()
def _calculate_hash(self, data: str) -> str:
"""สร้าง hash จากข้อมูลเพื่อป้องกันการแก้ไข"""
return hashlib.sha256(data.encode()).hexdigest()
def log_prescription_review(
self,
prescription_id: str,
pharmacist_id: str,
action: str,
details: Dict[str, Any],
risk_result: Dict[str, Any],
api_response_time_ms: float
) -> str:
"""
บันทึกการตรวจสอบใบสั่งยา
Returns:
str: hash ของบันทึกนี้
"""
# สร้างข้อมูลที่จะ hash
timestamp = datetime.now().isoformat()
data_to_hash = f"{timestamp}|{prescription_id}|{pharmacist_id}|{action}|{json.dumps(details)}|{json.dumps(risk_result)}"
# hash ของ record ก่อนหน้า (ถ้ามี)
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute("SELECT self_hash FROM audit_logs ORDER BY id DESC LIMIT 1")
prev_row = cursor.fetchone()
prev_hash = prev_row[0] if prev_row else "GENESIS"
# hash ของ record นี้
record_hash = self._calculate_hash(f"{prev_hash}|{data_to_hash}")
# บันทึกลงฐานข้อมูล
cursor.execute("""
INSERT INTO audit_logs
(timestamp, event_type, prescription_id, pharmacist_id,
action_details, risk_check_result, hash_previous, self_hash, api_response_time_ms)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
""", (
timestamp,
"PRESCRIPTION_REVIEW",
prescription_id,
pharmacist_id,
json.dumps(details, ensure_ascii=False),
json.dumps(risk_result, ensure_ascii=False),
prev_hash,
record_hash,
api_response_time_ms
))
conn.commit()
conn.close()
return record_hash
def verify_integrity(self) -> Dict[str, Any]:
"""
ตรวจสอบความถูกต้องของบันทึกทั้งหมด
ถ้ามีการแก้ไขข้อมูล hash จะไม่ตรงกัน
"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute("SELECT * FROM audit_logs ORDER BY id")
rows = cursor.fetchall()
conn.close()
issues = []
prev_hash = "GENESIS"
for row in rows:
# สร้าง hash จากข้อมูลจริง
data = f"{row[1]}|{row[3]}|{row[4]}|{row[5]}|{row[6]}"
expected_hash = self._calculate_hash(f"{prev_hash}|{data}")
if expected_hash != row[8]: # self_hash
issues.append(f"Record ID {row[0]}: Hash mismatch")
prev_hash = row[8]
return {
"total_records": len(rows),
"integrity_check": "PASSED" if len(issues) == 0 else "FAILED",
"issues": issues
}
def generate_audit_report(self, start_date: str, end_date: str) -> str:
"""สร้างรายงานการตรวจสอบตามช่วงเวลา"""
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute("""
SELECT * FROM audit_logs
WHERE timestamp BETWEEN ? AND ?
ORDER BY timestamp
""", (start_date, end_date))
rows = cursor.fetchall()
conn.close()
report = f"รายงานการตรวจสอบใบสั่งยา\n"
report += f"ช่วงเวลา: {start_date} ถึง {end_date}\n"
report += f"จำนวนรายการ: {len(rows)}\n\n"
for row in rows:
report += f"[{row[1]}] ใบสั่งยา: {row[3]} | การกระทำ: {row[5]}\n"
return report
ขั้นตอนที่ 5: เชื่อมระบบทั้งหมดเข้าด้วยกัน
สร้างไฟล์
main_system.py เพื่อรวมทุกระบบเข้าด้วยกัน:
import time
from datetime import datetime
from risk_checker import check_medication_risk
from medication_reader import read_medication_instructions, generate_patient_leaflet
from compliance_logger import ComplianceLogger
class PharmacyReviewSystem:
"""ระบบตรวจสอบใบสั่งยาครบวงจร"""
def __init__(self, api_key: str, base_url: str):
self.api_key = api_key
self.base_url = base_url
self.logger = ComplianceLogger()
def process_prescription(self, prescription_data: dict) -> dict:
"""
ประมวลผลใบสั่งยาทั้งหมด
Args:
prescription_data: {
"id": "RX-2026-001",
"patient": {...},
"medications": [...],
"prescription_text": "...",
"pharmacist_id": "P001"
}
"""
start_time = time.time()
results = {}
# ขั้นตอนที่ 1: ตรวจสอบความเสี่ยง
print("กำลังตรวจสอบความเสี่ยง...")
risk_result = check_medication_risk(
prescription_data["patient"],
prescription_data["medications"],
self.api_key,
self.base_url
)
results["risk_check"] = risk_result
# ขั้นตอนที่ 2: อ่านและอธิบายยา
print("กำลังอ่านคำขอยา...")
instructions = read_medication_instructions(
prescription_data["prescription_text"],
self.api_key,
self.base_url
)
results["instructions"] = instructions
# ขั้นตอนที่ 3: สร้างแผ่นพับให้ผู้ป่วย
print("กำลังสร้างแผ่นพับ...")
leaflet = generate_patient_leaflet(instructions, self.api_key, self.base_url)
results["patient_leaflet"] = leaflet
# คำนวณเวลาตอบสนอง
end_time = time.time()
response_time_ms = (end_time - start_time) * 1000
# ขั้นตอนที่ 4: บันทึกตามกฎหมาย
print("กำลังบันทึกบันทึกการทำงาน...")
log_hash = self.logger.log_prescription_review(
prescription_id=prescription_data["id"],
pharmacist_id=prescription_data["pharmacist_id"],
action="REVIEW_COMPLETED",
details={
"medications_count": len(prescription_data["medications"]),
"patient_age": prescription_data["patient"]["age"]
},
risk_result=risk_result,
api_response_time_ms=response_time_ms
)
results["log_hash"] = log_hash
# สรุปผลลัพธ์
results["summary"] = {
"status": "completed",
"response_time_ms": round(response_time_ms, 2),
"risk_level": risk_result.get("risk_level", "unknown"),
"warnings_count": len(risk_result.get("warnings", []))
}
return results
def verify_compliance(self) -> dict:
"""ตรวจสอบความถูกต้องของบันทึกทั้งหมด"""
return self.logger.verify_integrity()
ตัวอย่างการใช้งาน
if __name__ == "__main__":
system = PharmacyReviewSystem(
api_key="YOUR_HOLYSHEEP_API_KEY",
base_url="https://api.holysheep.ai/v1"
)
# ข้อมูลใบสั่งยาตัวอย่าง
prescription = {
"id": "RX-2026-0526-001",
"patient": {
"name": "นายสมชาย ใจดี",
"age": 58,
"weight_kg": 72,
"conditions": ["เบา�
แหล่งข้อมูลที่เกี่ยวข้อง
บทความที่เกี่ยวข้อง