0Pricing
SQL Academy · บทเรียน

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

ใช้ส่วนขยาย pgvector เพื่อจัดเก็บเวกเตอร์ฝังตัวและค้นหาเพื่อนบ้านที่ใกล้ที่สุดโดยประมาณด้วย ivfflat / HNSW

การค้นหาเวกเตอร์ด้วย pgvector เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

เวกเตอร์มีไว้ทำอะไร

การฝังความหมายใช้เข้ารหัสความหมาย เอกสารสองฉบับที่กล่าวถึงหัวข้อเดียวกันจะมีเวกเตอร์คล้ายกัน การค้นหาเวกเตอร์ช่วยขับเคลื่อนการค้นหาเชิงความหมาย RAG (การดึงข้อมูลมาเสริมการสร้างผลลัพธ์) และระบบแนะนำ

เปิดใช้งาน pgvector

ส่วนขยายนี้มีให้ใช้อย่างแพร่หลาย (RDS, Cloud SQL และ Supabase มีมาให้ในตัว):

CREATE EXTENSION vector;

คอลัมน์เวกเตอร์

กำหนดคอลัมน์ด้วยจำนวนมิติของโมเดลการฝังความหมายของคุณ:

CREATE TABLE docs (
  id BIGSERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  body TEXT NOT NULL,
  embedding vector(1536)
);

-- 1536 is OpenAI text-embedding-3-small dimension; varies by model.

การเพิ่มการฝังความหมาย

เพิ่มเวกเตอร์เป็นค่าลิเทอรัลของอาร์เรย์:

INSERT INTO docs (title, body, embedding)
VALUES ('SQL Course', 'Learn SQL', '[0.013, -0.024, ...]');

ตัวดำเนินการระยะทาง

pgvector มีตัวดำเนินการสามรายการ:

  • <-> — ระยะทางแบบยูคลิด (L2)
  • <#> — ผลคูณภายในเชิงลบ
  • <=> — ระยะทางโคไซน์ (ใช้กันมากที่สุดสำหรับการฝังความหมาย)

การค้นหาเพื่อนบ้านที่ใกล้ที่สุด

ค้นหาเอกสารที่ใกล้เคียงกับเวกเตอร์คิวรีมากที่สุด:

SELECT id, title, 1 - (embedding <=> $1) AS similarity
FROM docs
ORDER BY embedding <=> $1
LIMIT 10;

ดัชนี IVFFlat

สำหรับชุดข้อมูลขนาดใหญ่ ให้สร้างดัชนีเพื่อนบ้านที่ใกล้ที่สุดแบบประมาณค่า (ANN):

CREATE INDEX docs_embedding_idx
  ON docs USING IVFFLAT (embedding vector_cosine_ops)
  WITH (lists = 100);

-- Tune lists by row count: rule of thumb sqrt(N).
-- Set probes per query for accuracy:
SET ivfflat.probes = 10;

ดัชนี HNSW (PG 16 ขึ้นไป)

ในหลายกรณีมีความแม่นยำในการเรียกคืนและเวลาแฝงดีกว่า IVFFlat:

CREATE INDEX docs_embedding_hnsw
  ON docs USING HNSW (embedding vector_cosine_ops);

SET hnsw.ef_search = 100;

การค้นหาเวกเตอร์แบบมีตัวกรอง

รวมตัวกรองเวกเตอร์และตัวกรองข้อมูลแบบมีโครงสร้าง:

SELECT id, title
FROM docs
WHERE language = 'en'
  AND created_at >= NOW() - INTERVAL '30 days'
ORDER BY embedding <=> $1
LIMIT 10;
-- For best perf, partial index on the filter.

รูปแบบ RAG

ดึงเอกสารที่เกี่ยวข้องจำนวน N รายการด้วยการฝังความหมาย แล้วส่งเอกสารเหล่านั้นเป็นบริบทให้ LLM:

-- 1. Embed user query
-- 2. SELECT top-N docs by cosine
-- 3. Send docs + query to LLM
-- 4. Return LLM's answer to user

การค้นหาแบบผสม

รวมเวกเตอร์และการค้นหาเชิงคำศัพท์ (tsvector) เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด เพราะแต่ละวิธีเพียงอย่างเดียวไม่สามารถค้นพบทุกสิ่งได้:

SELECT id, title,
  0.6 * (1 - (embedding <=> $1)) + 0.4 * ts_rank(search_doc, $2) AS score
FROM docs
WHERE embedding <=> $1 < 0.7
   OR search_doc @@ $2
ORDER BY score DESC LIMIT 10;

การเลือกจำนวนมิติ

การฝังความหมายที่มีขนาดใหญ่ขึ้นแม่นยำกว่า แต่ใช้พื้นที่จัดเก็บมากขึ้นและทำงานช้าลง แอปจำนวนมากทำงานได้ดีด้วยโมเดลขนาด 384–768 มิติ โปรดเลือกโมเดลหนึ่งแบบและใช้แบบนั้นอย่างสม่ำเสมอ

สรุปทบทวน

pgvector เพิ่มการค้นหาเวกเตอร์ระดับพื้นฐานให้กับ Postgres

  • ชนิดคอลัมน์ vector(N)
  • ดัชนี IVFFlat / HNSW
  • ระยะทางโคไซน์ผ่าน <=> สำหรับการฝังความหมาย
  • การค้นหาแบบผสมกับ FTS เพื่อการเรียกคืนที่ดีที่สุด

ตรวจสอบอย่างรวดเร็ว

คุณกำลังค้นหาด้วยความคล้ายเชิงความหมายโดยใช้การฝังความหมายจาก OpenAI โดยทั่วไปควรใช้ตัวดำเนินการระยะทางใดของ pgvector

คำถามที่พบบ่อย

บทเรียน “การค้นหาเวกเตอร์ด้วย pgvector” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การค้นหาเวกเตอร์ด้วย pgvector” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การค้นหาเวกเตอร์ด้วย pgvector”

ใช้ส่วนขยาย pgvector เพื่อจัดเก็บเวกเตอร์ฝังตัวและค้นหาเพื่อนบ้านที่ใกล้ที่สุดโดยประมาณด้วย ivfflat / HNSW คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

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

บทเรียน “การค้นหาเวกเตอร์ด้วย pgvector” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ
  2. การค้นหาข้อความเต็มด้วย tsvector และ GIN
  3. การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS
  4. การค้นหาเวกเตอร์ด้วย pgvector
← กลับไปที่ SQL Academy