บทนำ: ทำไมร้านขายยาต้องมีระบบตรวจสอบใบสั่งยาอัตโนมัติ

ในปี 2026 การจัดการใบสั่งยาในร้านขายยาเป็นเรื่องที่ต้องระมัดระวังอย่างยิ่ง ทั้งเรื่องความปลอดภัยของผู้ป่วย การปฏิบัติตามกฎหมาย และการลดความเสี่ยงจากข้อผิดพลาดของเภสัชกร ผมเคยทำงานในร้านขายยาขนาดใหญ่แห่งหนึ่ง พบว่าการตรวจสอบใบสั่งยาด้วยมือใช้เวลาเฉลี่ย 3-5 นาทีต่อใบ ซึ่งทำให้ลูกค้าต้องรอนานและเภสัชกรเองก็เหนื่อยล้า บทความนี้จะสอนคุณวิธีสร้างระบบตรวจสอบใบสั่งยาอัตโนมัติโดยใช้ HolySheep AI ตั้งแต่เริ่มต้น ไม่ต้องมีประสบการณ์เขียนโค้ดมาก่อนก็ทำได้

ระบบทำงานอย่างไร

ระบบนี้ทำหน้าที่หลัก 3 อย่าง:
  1. ตรวจสอบความเสี่ยงด้านยา (DeepSeek Risk Alerts) - AI จะวิเคราะห์ว่ายาที่สั่งมีปฏิกิริยาต่อกันหรือมีข้อห้ามใช้กับผู้ป่วยบางกลุ่มหรือไม่
  2. อ่านและอธิบายคำขอยา (Kimi Medication Instructions) - แปลงข้อมูลใบสั่งยาให้เข้าใจง่าย พร้อมอธิบายวิธีการใช้ยาแต่ละชนิด
  3. บันทึกการทำงานตามกฎหมาย (Compliance Logging) - เก็บบันทึกทุกขั้นตอนเพื่อใช้เป็นหลักฐานเมื่อมีการตรวจสอบ

เครื่องมือที่ต้องเตรียม

ขั้นตอนที่ 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": ["เบา�