การค้นหาเวกเตอร์ด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การค้นหาไตรแกรม (pg_trgm) เพื่อการจับคู่แบบคลุมเครือ
- การค้นหาข้อความเต็มด้วย tsvector และ GIN
- การสร้างดัชนีเชิงภูมิสารสนเทศด้วย PostGIS
- การค้นหาเวกเตอร์ด้วย pgvector