คุณเคยสงสัยไหมว่า ทำไมระบบ Chatbot บางตัวถึงตอบคำถามได้แม่นยำมาก แต่บางตัวกลับตอบอะไรก็ไม่ถูก? ความลับอยู่ที่ การค้นหาความคล้ายคลึง (Similarity Search) ซึ่งเป็นหัวใจสำคัญของระบบ AI Knowledge Base

ในบทความนี้ ผมจะพาคุณ (ที่ไม่เคยเขียนโค้ดมาก่อนเลย) สร้างระบบถาม-ตอบที่ฉลาดได้ด้วยตัวเอง โดยใช้ HolySheep AI ซึ่งมีความเร็วตอบสนองน้อยกว่า 50 มิลลิวินาที และราคาประหยัดกว่าบริการอื่นถึง 85%

การค้นหาความคล้ายคลึงคืออะไร?

ลองนึกภาพว่าสมองของเราจดจำความหมายของประโยค ไม่ใช่แค่คำๆ นั้น การค้นหาความคล้ายคลึงก็ทำงานคล้ายกัน:

# ตัวอย่างง่ายๆ ที่จะอธิบายหลักการ

สมมติเรามีคำถามในฐานข้อมูล

คำถาม: "วิธีรีเซ็ตรหัสผ่าน" คำตอบ: "ไปที่หน้าตั้งค่า > คลิกรีเซ็ตรหัสผ่าน > ยืนยันอีเมล"

เมื่อผู้ใช้ถามว่า "ลืมรหัสผ่านต้องทำไง"

ระบบจะรู้ว่าสองประโยคนี้ "หมายความเหมือนกัน"

แม้จะใช้คำไม่เหมือนกันเลย!

องค์ประกอบ 3 อย่างที่ทำให้ระบบทำงานได้

1. Embedding Model - แปลงข้อความเป็นตัวเลข

คอมพิวเตอร์ไม่เข้าใจภาษามนุษย์โดยตรง เราต้องแปลงข้อความเป็นตัวเลข (เรียกว่า Vector) ก่อน

2. Vector Database - ที่เก็บตัวเลขเหล่านั้น

เมื่อแปลงแล้ว เราต้องเก็บไว้ที่ใดที่หนึ่ง เพื่อนำมาเปรียบเทียบภายหลัง

3. Similarity Algorithm - วัดความ "ใกล้เคียง"

สุดท้าย วัดว่าคำถามใหม่ "ใกล้เคียง" กับคำถามเดิมในฐานข้อมูลแค่ไหน

เริ่มต้นใช้งาน: ติดตั้งเครื่องมือ

ก่อนจะเขียนโค้ด คุณต้องติดตั้งโปรแกรม Python และไลบรารีที่จำเป็นก่อน

# ติดตั้งไลบรารีที่จำเป็น
pip install requests numpy

วิธีตรวจสอบว่าติดตั้งสำเร็จ: เปิด Command Prompt (หรือ Terminal) แล้วพิมพ์คำสั่งข้างบน ถ้าไม่มีข้อความแดงขึ้นมาบอก error แสดงว่าสำเร็จ

ขั้นตอนที่ 1: สร้างฟังก์ชันแปลงข้อความเป็นตัวเลข (Embedding)

นี่คือโค้ดที่จะแปลงข้อความของคุณให้เป็น Vector ที่คอมพิวเตอร์เข้าใจได้:

import requests
import numpy as np

กำหนดค่าสำหรับเชื่อมต่อ HolySheep API

BASE_URL = "https://api.holysheep.ai/v1" API_KEY = "YOUR_HOLYSHEEP_API_KEY" # ใส่ API Key ของคุณตรงนี้ def get_embedding(text): """ ฟังก์ชันนี้จะแปลงข้อความให้เป็น Vector """ url = f"{BASE_URL}/embeddings" headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } payload = { "model": "text-embedding-3-small", "input": text } response = requests.post(url, headers=headers, json=payload) if response.status_code == 200: data = response.json() return np.array(data["data"][0]["embedding"]) else: print(f"เกิดข้อผิดพลาด: {response.status_code}") print(response.text) return None

ทดสอบการทำงาน

test_text = "วิธีติดต่อฝ่ายบริการลูกค้า" embedding = get_embedding(test_text) print(f"Vector ที่ได้: {embedding[:5]}...") # แสดงแค่ 5 ค่าแรก

หมายเหตุสำคัญ: คุณต้องได้รับ API Key จากการ สมัครสมาชิก HolySheep ก่อน โดยหลังสมัครจะได้รับเครดิตฟรีทันที

ขั้นตอนที่ 2: คำนวณความคล้ายคลึง (Cosine Similarity)

เมื่อได้ Vector แล้ว เราต้องวัดว่าสอง Vector นี้ "ใกล้กัน" แค่ไหน วิธีที่นิยมใช้คือ Cosine Similarity

def cosine_similarity(vec1, vec2):
    """
    คำนวณความคล้ายคลึงระหว่าง Vector สองตัว
    ค่าที่ได้จะอยู่ระหว่าง -1 ถึง 1
    ถ้าใกล้ 1 หมายถึง "คล้ายกันมาก"
    """
    dot_product = np.dot(vec1, vec2)
    norm_vec1 = np.linalg.norm(vec1)
    norm_vec2 = np.linalg.norm(vec2)
    
    if norm_vec1 == 0 or norm_vec2 == 0:
        return 0
    
    return dot_product / (norm_vec1 * norm_vec2)

ทดสอบ

vec_a = np.array([0.1, 0.5, 0.8]) vec_b = np.array([0.2, 0.4, 0.7]) similarity = cosine_similarity(vec_a, vec_b) print(f"ความคล้ายคลึง: {similarity:.4f}")

ขั้นตอนที่ 3: สร้างระบบ Knowledge Base พื้นฐาน

ตอนนี้เรามีทุกอย่างที่จะสร้างระบบถาม-ตอบแล้ว:

import requests
import numpy as np

BASE_URL = "https://api.holysheep.ai/v1"
API_KEY = "YOUR_HOLYSHEEP_API_KEY"

def get_embedding(text):
    """แปลงข้อความเป็น Vector"""
    url = f"{BASE_URL}/embeddings"
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {"model": "text-embedding-3-small", "input": text}
    response = requests.post(url, headers=headers, json=payload)
    return np.array(response.json()["data"][0]["embedding"])

def cosine_similarity(vec1, vec2):
    """คำนวณความคล้ายคลึง"""
    return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))

class SimpleKnowledgeBase:
    """ระบบถาม-ตอบแบบง่าย"""
    
    def __init__(self):
        self.questions = []
        self.answers = []
        self.question_vectors = []
    
    def add_qa(self, question, answer):
        """เพิ่มคำถาม-คำตอบลงในฐานข้อมูล"""
        self.questions.append(question)
        self.answers.append(answer)
        # แปลงคำถามเป็น Vector แล้วเก็บไว้
        q_vector = get_embedding(question)
        self.question_vectors.append(q_vector)
        print(f"✅ เพิ่ม: {question}")
    
    def find_answer(self, user_question, threshold=0.7):
        """หาคำตอบจากคำถามของผู้ใช้"""
        # แปลงคำถามผู้ใช้เป็น Vector
        user_vector = get_embedding(user_question)
        
        # หาคำถามที่คล้ายกันที่สุด
        best_score = 0
        best_index = -1
        
        for i, q_vec in enumerate(self.question_vectors):
            score = cosine_similarity(user_vector, q_vec)
            if score