บทนี้จะแนะนำการเริ่มต้น nstalling Qdrant vector database และวิธีการดำเนินการกับฐานข้อมูลเวกเตอร์โดยใช้ RESTful API

การติดตั้ง Qdrant

หมายเหตุ: บทแนะนำนี้เน้นการติดตั้งฐานข้อมูล Qdrant ด้วยการใช้ Docker โปรดติดตั้ง Docker ก่อนทำการต่อไป

ดาวน์โหลดภาพ qdrant

docker pull qdrant/qdrant

เริ่มบริการฐานข้อมูลเวกเตอร์ qdrant

docker run -p 6333:6333 \
    -v $(pwd)/qdrant_storage:/qdrant/storage:z \
    qdrant/qdrant

โดยค่าเริ่มต้น เราจะแม็ปไดเรกทอรี่ไฟล์โลคัลเข้ากับคอนเทนเนอร์ และข้อมูลทั้งหมดจะถูกเก็บไว้ในไดเรกทอรี ./qdrant_storage

ตอนนี้คุณสามารถเข้าถึง Qdrant ผ่าน localhost:6333

Qdrant vector database รองรับ RESTful API สำหรับดำเนินการฐานข้อมูล และยังรองรับ SDKs สำหรับภาษาโปรแกรม เช่น Python, Go เป็นต้น บทแนะนำนี้เน้นการอธิบายการใช้งาน RESTful API

ตัวอย่างการเข้าถถึง API

curl -X PUT 'http://localhost:6333/collections/test_collection' \
  -H 'Content-Type: application/json' \
  --data-raw '{
    "vectors": {
      "size": 4,
      "distance": "Dot"
    }
  }'

อินเตอร์เฟซเว็บ Qdrant

เข้าถถึงอินเตอร์เฟซเว็บผ่านทางที่อยู่ http://localhost:6333/dashboard

UI AI

การสร้างคอลเล็กชัน

แนวคิดของคอลเล็กชันใน Qdrant vector database สามารถเปรียบเทียบได้กับโครงสร้างตารางของ MYSQL เป็นที่ใช้เก็บข้อมูลเวกเตอร์ประเภทเดียวกันอย่างสม่ำเสมอ ข้อมูลแต่ละชิ้นที่ถูกเก็บไว้ในคอลเล็กชัน ที่เรียกว่าจุดใน Qdrant มีความหมายเหมือนกับจุดในพื้นที่เชิงเรขาคณิต แทนการแสดงของเวกเตอร์ในพื้นที่เชิงเรขาคณิต

PUT /collections/{collection_name}

{
    "vectors": {
      "size": 300,
      "distance": "Cosine"
    }
}

คำอธิบายพารามิเตอร์:

พารามิเตอร์ คำอธิบาย
collection_name ชื่อคอลเล็กชัน (จำเป็น)
vectors คำจำกัดค่าพารามิเตอร์เวกเตอร์ (จำเป็น)
vectors.size แทนขนาดเวกเตอร์ (หรือมิติของเวกเตอร์)
vectors.distance แทนอัลกอริทึมความคล้ายคำ รวมถึงอัลกอริทึมสามอย่าง: "Cosine," "Euclid," "Dot"

เพิ่มเวกเตอร์ (จุด)

หลังจากสร้างคอลเล็กชัน เราสามารถเพิ่มข้อมูลเวกเตอร์เข้าไปในคอลเล็กชัน ใน Qdrant เวกเตอร์ข้อมูลถูกแทนด้วยจุดโดยที่แต่ละข้อมูลจุดประกอบด้วยสามส่วน: ไอดี, โหลด (ข้อมูลที่เกี่ยวข้อง), และข้อมูลเวกเตอร์

ตัวอย่าง

PUT /collections/{collection_name}/points

{
    "points": [
        {
            "id": "5c56c793-69f3-4fbf-87e6-c4bf54c28c26", // ไอดี
            "payload": {"color": "red"}, // ข้อมูลที่เกี่ยวข้อง, ธุรกิจที่เกี่ยวเนียง , เช่น: ไอดีคำสั่ง, ไอดีผลิตภัณฑ์, ชื่อ ฯลฯ
            "vector": [0.9, 0.1, 0.1] // ข้อมูลเวกเตอร์ที่แทนคุณลักษณะของข้อมูลธุรกิจปัจจุบัน
        }
    ]
}

ค้นหาเวกเตอร์

หลังจากการเพิ่มข้อมูลเวกเตอร์ สามารถทำการค้นหาความคล้ายคำด้วยการใช้เวกเตอร์

ตัวอย่าง

// collection_name - ชื่อคอลเล็กชัน
POST /collections/{collection_name}/points/search

{
    "vector": [0.2, 0.1, 0.9, 0.7], // พารามิเตอร์เวกเตอร์
    "limit": 3 // ส่งกลับ 3 ข้อมูลที่มีความคล้ายคำสูงสุด
}

คำอธิยาาพารามิเตอร์:

  • เวกเตอร์: พารามิเตอร์เวกเตอร์ ที่ใช้เพื่อการค้นหาเนื้อหาที่คล้ายกันกับเวกเตอร์นี้ ตัวอย่าง: คุณสามารถแปลงคำคีย์เวิร์ดที่ผู้ใช้ต้องการค้นหาเป็นเวกเตอร์แล้วค้นหาเนื้อหาที่เกี่ยงกับข้อมูลผู้ใช้

การกรองแอตทริบิวต์

เมื่อค้นหาข้อมูล นอกจากการทำการค้นหาความคล้ายคลึงโดยใช้เวกเตอร์ บางครั้งเราต้องการดำเนินการกรองแอตทริบิวต์ที่คล้ายกับ WHERE clause ใน SQL เพื่อกรองบางแอตทริบิวต์ออกไป Qdrant รองรับคิวรีสำหรับการกรองแอตทริบิวต์ที่เกี่ยวข้องกับโหลดข้อมูลจุด

ตัวอย่าง

// collection_name - ชื่อคอลเล็กชัน
POST /collections/{collection_name}/points/search

{
    "filter": { // ใช้สำหรับกรองแอตทริบิวต์ที่เกี่ยวข้องกับโหลดข้อมูล และรูปแบบไวยากร์ทั้งหมดคล้ายกับ Elasticsearch syntax พารามิเตอร์นี้เป็นทางเลือก
        "must": [ // กรองข้อมูลจุดที่มีสีเป็นแดง
            {
                "key": "color",
                "match": {
                    "value": "red"
                }
            }
        ]
    },
    "vector": [0.2, 0.1, 0.9, 0.7], // พารามิเตอร์เวกเตอร์
    "limit": 3
}

สำหรับบทช่วยสอนที่ละเอียดมากยิ่งขึ้น โปรดอย่างให้คำตอบในบทถัดไป