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

ทำไมต้องสร้างระบบ AI คัดกรองเรซูเม

จากประสบการณ์การพัฒนาระบบ HR Tech ให้กับบริษัทอีคอมเมิร์ซรายใหญ่แห่งหนึ่ง ทีมงานเผชิญปัญหา:

การนำ AI มาช่วยประมวลผลเรซูเมช่วยลดเวลาลง 85% และเพิ่มความแม่นยำในการคัดกรองเบื้องต้น ทำให้ทีม HR มีเวลาโฟกัสกับการสัมภาษณ์จริงมากขึ้น

เริ่มต้นใช้งาน HolySheep AI API

ก่อนเขียนโค้ด เราต้องตั้งค่า API Key กับ HolySheep AI ซึ่งมีจุดเด่นด้าน ความเร็วต่ำกว่า 50ms และราคาประหยัดกว่า OpenAI ถึง 85% โดยมีโมเดลให้เลือกหลากหลาย เช่น DeepSeek V3.2 ราคาเพียง $0.42/MTok หรือ Claude Sonnet 4.5 ที่ $15/MTok

# ติดตั้ง library ที่จำเป็น
pip install requests python-docx PyPDF2 python-dotenv
# สร้างไฟล์ config.py สำหรับเก็บ API Key
import os
from dotenv import load_dotenv

load_dotenv()

ใช้ HolySheep AI เป็น base_url

HOLYSHEEP_BASE_URL = "https://api.holysheep.ai/v1" HOLYSHEEP_API_KEY = os.getenv("HOLYSHEEP_API_KEY") # ตั้งค่าในไฟล์ .env def get_headers(): return { "Authorization": f"Bearer {HOLYSHEEP_API_KEY}", "Content-Type": "application/json" }

สกัดข้อมูลจากเรซูเมด้วย AI

ขั้นตอนแรกคือการอ่านไฟล์เรซูเม (รองรับ PDF และ DOCX) แล้วส่งให้ AI วิเคราะห์และดึงข้อมูลสำคัญ เช่น ชื่อ ตำแหน่งที่ต้องการ ประสบการณ์ทำงาน และทักษะ

import requests
import json

def extract_resume_data(resume_text, model="deepseek-chat"):
    """
    ส่งข้อความจากเรซูเมาให้ AI วิเคราะห์และสกัดข้อมูลสำคัญ
    รองรับหลายโมเดล: deepseek-chat, gpt-4o, claude-3-5-sonnet
    """
    prompt = f"""คุณคือผู้เชี่ยวชาญด้าน HR ให้วิเคราะห์เรซูเมต่อไปนี้และสกัดข้อมูลเป็น JSON:
    
    เรซูเม:
    {resume_text}
    
    ให้ส่งกลับเป็น JSON ที่มีโครงสร้างดังนี้:
    {{
        "ชื่อ-นามสกุล": "...",
        "ตำแหน่งที่ต้องการ": "...",
        "ประสบการณ์_จำนวนปี": "...",
        "ทักษะ": ["...", "..."],
        "การศึกษา": "...",
        "คะแนนความเหมาะสม": 0-100
    }}
    """
    
    response = requests.post(
        f"{HOLYSHEEP_BASE_URL}/chat/completions",
        headers=get_headers(),
        json={
            "model": model,
            "messages": [{"role": "user", "content": prompt}],
            "temperature": 0.3
        }
    )
    
    result = response.json()
    
    # แปลงข้อความตอบกลับเป็น JSON
    try:
        content = result["choices"][0]["message"]["content"]
        # ดึง JSON จาก markdown block ถ้ามี
        if "```json" in content:
            content = content.split("``json")[1].split("``")[0]
        return json.loads(content)
    except:
        return {"error": "ไม่สามารถประมวลผลเรซูเมได้"}

ระบบให้คะแนนและจัดลำดับผู้สมัคร

หลังจากสกัดข้อมูลแล้ว เราต้องสร้างระบบเปรียบเทียบโปรไฟล์ผู้สมัครกับคุณสมบัติที่ต้องการ และจัดลำดับความน่าจะเป็นที่จะเหมาะสมกับตำแหน่ง

def score_candidate(candidate_data, job_requirements):
    """
    ให้คะแนนผู้สมัครตามความต้องการของตำแหน่งงาน
    """
    prompt = f"""คุณคือผู้เชี่ยวชาญด้านการคัดกรองบุคลากร ให้คะแนนผู้สมัครและอธิบายเหตุผล

    ข้อมูลผู้สมัคร:
    {json.dumps(candidate_data, ensure_ascii=False, indent=2)}

    คุณสมบัติที่ต้องการ:
    {json.dumps(job_requirements, ensure_ascii=False, indent=2)}

    ให้คะแนน 0-100 พร้อมระบุ:
    1. คะแนนรวม
    2. จุดเด่นของผู้สมัคร
    3. จุดที่ต้องปรับปรุง
    4. คำแนะนำในการสัมภาษณ์
    """
    
    response = requests.post(
        f"{HOLYSHEEP_BASE_URL}/chat/completions",
        headers=get_headers(),
        json={
            "model": "deepseek-chat",  # ใช้ DeepSeek ประหยัดค่าใช้จ่าย
            "messages": [{"role": "user", "content": prompt}],
            "temperature": 0.5
        }
    )
    
    return response.json()["choices"][0]["message"]["content"]

รวมทุกอย่างเป็นระบบสมบูรณ์

from pathlib import Path
import PyPDF2
from docx import Document

class ResumeScreeningSystem:
    def __init__(self, api_key):
        self.api_key = api_key
        HOLYSHEEP_API_KEY = api_key
        self.results = []
    
    def read_file(self, file_path):
        """อ่านไฟล์เรซูเม รองรับ PDF และ DOCX"""
        path = Path(file_path)
        
        if path.suffix.lower() == '.pdf':
            with open(path, 'rb') as f:
                reader = PyPDF2.PdfReader(f)
                text = ""
                for page in reader.pages:
                    text += page.extract_text() + "\n"
            return text
        
        elif path.suffix.lower() in ['.docx', '.doc']:
            doc = Document(path)
            return "\n".join([p.text for p in doc.paragraphs])
        
        else:
            with open(path, 'r', encoding='utf-8') as f:
                return f.read()
    
    def process_resumes(self, folder_path, job_requirements):
        """ประมวลผลเรซูเมทั้งหมดในโฟลเดอร์"""
        folder = Path(folder_path)
        candidates = []
        
        for file in folder.glob('*.pdf'):
            print(f"กำลังประมวลผล: {file.name}")
            text = self.read_file(file)
            data = extract_resume_data(text)
            data['ไฟล์'] = file.name
            score = score_candidate(data, job_requirements)
            candidates.append({
                'ไฟล์': file.name,
                'ข้อมูล': data,
                'การประเมิน': score
            })
        
        # จัดเรียงตามคะแนน
        return sorted(candidates, 
                     key=lambda x: x['ข้อมูล'].get('คะแนนความเหมาะสม', 0), 
                     reverse=True)

ตัวอย่างการใช้งาน

job_reqs = { "ตำแหน่ง": "Senior Python Developer