ในยุคที่องค์กรไทยเผชิญกับการรับสมัครงานจำนวนมาก การคัดกรองเรซูเมแบบดั้งเดิมใช้เวลานานและมีโอกาสผิดพลาดสูง บทความนี้จะพาคุณสร้าง ระบบ AI คัดกรองเรซูเมอัตโนมัติ ตั้งแต่เริ่มต้นจนใช้งานจริงในองค์กร โดยใช้ HolySheep AI เป็นแกนหลักของการประมวลผลภาษาธรรมชาติ
ทำไมต้องสร้างระบบ AI คัดกรองเรซูเม
จากประสบการณ์การพัฒนาระบบ HR Tech ให้กับบริษัทอีคอมเมิร์ซรายใหญ่แห่งหนึ่ง ทีมงานเผชิญปัญหา:
- เรซูเมเข้ามาวันละ 500+ ชุด พนักงาน HR อ่านไม่หมด
- รูปแบบเรซูเมไม่ตรงกัน แต่ละคนเขียนต่างกัน
- ใช้เวลาคัดกรองเฉลี่ย 15 นาทีต่อเรซูเม 1 ชุด
- ต้นทุนค่าแรง HR สูงขึ้นเรื่อยๆ
การนำ 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
แหล่งข้อมูลที่เกี่ยวข้อง
บทความที่เกี่ยวข้อง