ฐานข้อมูลเวกเตอร์คือ abstraction ที่ผิด
(timescale.com)- ข้อความที่ตามหลอกหลอนทีมวิศวกรรมที่พยายามสร้างแอปพลิเคชัน AI คือ: "embedding ไม่ได้ซิงก์กันอีกต่อไป"
- การทำเวกเตอร์เสิร์ชแบบง่าย ๆ มักพัฒนาไปเป็นออร์เคสตราที่ซับซ้อนของการมอนิเตอร์ การซิงก์ และการแก้ปัญหา
- หลังจากพูดคุยกับทีมวิศวกรรมที่สร้างระบบ AI ด้วยฐานข้อมูลเวกเตอร์ ผู้เขียนพบทั้ง abstraction ที่ผิดของฐานข้อมูลเวกเตอร์และข้อบกพร่องของวิธีใช้งานในปัจจุบัน
"กรณีใช้งานทั่วไปของการสร้างระบบ RAG"
- ใช้ Pinecone เป็นฐานข้อมูลเวกเตอร์เพื่อเก็บและค้นหา embedding
- เนื่องจากข้อมูลข้อความไม่เข้ากับเมตาดาต้าของ Pinecone มากนัก จึงใช้ DynamoDB จัดการ blob และข้อมูลแอปพลิเคชัน
- ต้องใช้ OpenSearch สำหรับการค้นหาเชิงศัพท์
- ตอนนี้การเชื่อมและซิงก์ทั้ง 3 ระบบกลายเป็นฝันร้าย
เมื่อลบเอกสารต้นทาง ต้องทำสิ่งต่อไปนี้:
- รัน boto3 เพื่อลบเรคอร์ดออกจาก DynamoDB
- อัปเดต Pinecone เพื่อยืนยันว่า embedding ถูกลบแล้ว
- ต้องส่งคำขอ POST เพื่ออัปเดตดัชนีค้นหาเชิงศัพท์
- ต้องทำแบบนี้ทุกครั้งที่มีการอัปเดต เพิ่ม หรือลบเอกสารต้นทาง
- การจัดการคอนฟิกไม่เพียงยุ่งเหยิง แต่ยังเสี่ยงอีกด้วย
- มีทีมหนึ่งที่จ่าย $2,000 ต่อเดือนสำหรับดัชนีที่ควรถูกลบไปตั้งแต่ 4 เดือนก่อน
- มีความเสี่ยงที่จะส่งคืนข้อมูลผิดหรือข้อมูลล้าสมัยให้ผู้ใช้
ฐานข้อมูลเวกเตอร์ถูกสร้างบน abstraction ที่ผิด
- ฐานข้อมูลเวกเตอร์ปฏิบัติต่อ embedding เสมือนเป็นข้อมูลอิสระ ไม่ใช่ข้อมูลอนุพันธ์
- การปฏิบัติต่อ embedding เป็นข้อมูลอิสระสร้างความซับซ้อนที่ไม่จำเป็น
วิธีที่ดีกว่า: abstraction แบบ "Vectorizer"
- เสนอ abstraction แบบ "vectorizer" ที่ปฏิบัติต่อ embedding เหมือนดัชนีของฐานข้อมูล
- แนวทางนี้ซิงก์ embedding กับข้อมูลต้นทางโดยอัตโนมัติ และช่วยตัดต้นทุนการดูแลรักษาออกไป
- vectorizer ที่เทียบได้กับคำสั่ง
CREATE INDEXมีหน้าตาแบบนี้:
SELECT ai.create_vectorizer(
'public.blogs'::regclass,
embedding => ai.embedding_openai('text-embedding-3-small', 1536),
chunking => ai.chunking_recursive_character_text_splitter('content')
);
- คำสั่งนี้จะสร้าง embedding สำหรับทุกแถวในตารางบล็อก และอัปเดต embedding ต่อเนื่องเมื่อข้อมูลในตารางเปลี่ยนแปลง
ปัญหาของฐานข้อมูลเวกเตอร์ (และชนิดข้อมูลเวกเตอร์)
- ฐานข้อมูลเวกเตอร์ถูกพัฒนาขึ้นเพื่อจัดการ embedding เวกเตอร์จำนวนมากสำหรับข้อมูลข้อความ รูปภาพ และมัลติโหมด
- ฐานข้อมูลเอนกประสงค์อย่าง PostgreSQL, MySQL, MongoDB และ Oracle ก็เพิ่มการรองรับการค้นหาเวกเตอร์เช่นกัน
- แต่ abstraction ของความสามารถค้นหาเวกเตอร์ ไม่ว่าจะในระบบแยกเดี่ยวหรือที่เพิ่มเข้ามาในฐานข้อมูลเดิม มีข้อบกพร่องร้ายแรง
- เมื่อ embedding ถูกแทรกเข้าไปในฐานข้อมูล ความเชื่อมโยงระหว่างข้อมูลไร้โครงสร้างที่ถูก embed กับ embedding เวกเตอร์นั้นก็ขาดออกจากกัน
- เมื่อไม่มีความเชื่อมโยงนี้ embedding จึงถูกปฏิบัติผิด ๆ เสมือนเป็นอะตอมข้อมูลอิสระที่นักพัฒนาต้องดูแลเอง แทนที่จะเป็นข้อมูลอนุพันธ์
- เมื่อมอง embedding ใหม่ในฐานะข้อมูลอนุพันธ์ ก็จะเห็นความย้อนแย้งของ abstraction ฐานข้อมูลเวกเตอร์ในปัจจุบันอย่างชัดเจน ว่ามันไม่เชื่อม embedding เข้ากับข้อมูลต้นทาง
ทีมพัฒนาต้องจัดการสิ่งต่อไปนี้:
-
ไปป์ไลน์ ETL (extract-load-transform) ที่ซับซ้อน
-
ฐานข้อมูลเวกเตอร์สำหรับ embedding, ฐานข้อมูลอีกตัวสำหรับเมตาดาต้าและข้อมูลแอป, และดัชนีค้นหาเชิงศัพท์
-
บริการซิงก์ข้อมูล
-
ระบบคิวสำหรับการอัปเดตและซิงก์
-
เครื่องมือมอนิเตอร์เพื่อตรวจจับ data drift และรับมือกับ rate limit ของบริการ embedding เป็นต้น
-
ระบบแจ้งเตือนเมื่อการค้นหาส่งคืนผลลัพธ์ล้าสมัย
-
การตรวจสอบความถูกต้องของทุกระบบ
-
หากต้องการอัปเกรดไปใช้โมเดล embedding ใหม่ หรือลองวิธี chunking แบบอื่น ก็ต้องเขียนโค้ดคัสตอมและประสานการเปลี่ยนแปลงข้ามบริการข้อมูลและฐานข้อมูลหลายตัว
-
งานเหล่านี้ทำให้ทีมพัฒนาต้องแบกรับภาระในการรับประกันว่า embedding จะถูกสร้างอย่างทันท่วงทีตามการเปลี่ยนแปลงของข้อมูลต้นทาง
-
ไม่เช่นนั้นก็เสี่ยงที่ embedding จะล้าสมัยอยู่บ่อยครั้ง และทำให้ผู้ใช้ได้รับประสบการณ์แอปที่แย่ลง
วิธีที่ดีกว่า: ให้ฐานข้อมูลจัดการความซับซ้อน
- เมื่อมอง embedding เป็นข้อมูลอนุพันธ์ ก็สามารถมอบความรับผิดชอบในการสร้างและอัปเดต embedding ตามการเปลี่ยนแปลงของข้อมูลพื้นฐานให้ระบบจัดการฐานข้อมูลได้
- การเปลี่ยนแปลงนี้ช่วยปลดภาระนักพัฒนาจากการต้องคอยซิงก์ embedding กับข้อมูลต้นทางด้วยมือ
- ความแตกต่างนี้อาจไม่สำคัญนักสำหรับแอปง่าย ๆ ที่นำเข้าข้อมูลครั้งเดียวเพื่อใช้กับ RAG
- แต่ในแอปจริงส่วนใหญ่ ข้อมูลมีการเปลี่ยนแปลงอย่างต่อเนื่อง
- ลองนึกถึงแพลตฟอร์มอีคอมเมิร์ซที่ใช้การค้นหาเชิงความหมายด้วย embedding หรือแอป RAG สำหรับผู้ช่วยด้านผลิตภัณฑ์ที่ต้องคงความทันสมัยด้วยข้อมูลสินค้าล่าสุด
- การติดตามความเปลี่ยนแปลงเหล่านี้ด้วยมือและสร้าง embedding ใหม่ ไม่เพียงใช้แรงงานมากและเกิดข้อผิดพลาดได้ง่าย แต่ยังรบกวนนักพัฒนาไม่ให้โฟกัสกับเป้าหมายธุรกิจหลัก
- ในเมื่อระบบฐานข้อมูลจัดการให้อัตโนมัติได้ แล้วจะเสียเวลาพัฒนาไปทำไม?
Vectorizer: embedding เวกเตอร์ในฐานะดัชนี
- abstraction ที่มีประสิทธิภาพกว่าคือการมอง embedding เวกเตอร์เป็นดัชนีพิเศษของข้อมูลที่ถูก embed แทนที่จะเป็นตารางอิสระหรือชนิดข้อมูลหนึ่ง
- embedding เวกเตอร์ไม่ใช่ดัชนีในความหมายดั้งเดิม
- แต่ทำหน้าที่เป็นกลไกการจัดทำดัชนีเพื่อดึงส่วนของข้อมูลที่เกี่ยวข้องที่สุดตาม embedding
- เราอาจเรียก abstraction ใหม่ที่คล้ายดัชนีนี้ว่า "vectorizer"
ประโยชน์หลักของ abstraction แบบ vectorizer:
การซิงก์อัตโนมัติ
- ประโยชน์หลักอย่างหนึ่งของการทำดัชนีในฐานข้อมูลคือการทำให้ข้อมูลต้นทางกับดัชนีซิงก์กันโดยอัตโนมัติ
- เมื่อข้อมูลในคอลัมน์เปลี่ยน ดัชนีก็จะอัปเดตตาม
- เมื่อปฏิบัติต่อ embedding เวกเตอร์ในฐานะรูปแบบหนึ่งของการทำดัชนี ก็สามารถใช้ประโยชน์จากการซิงก์อัตโนมัติแบบเดียวกันนี้ได้
- ระบบจะรับประกันว่า embedding เวกเตอร์จะทันสมัยกับข้อมูลล่าสุดเสมอ ช่วยลดความจำเป็นในการอัปเดตด้วยมือและลดความเสี่ยงจากข้อผิดพลาด
ความสัมพันธ์ข้อมูล-embedding ที่แน่นแฟ้นขึ้น
- เมื่อจัดเก็บเวกเตอร์อย่างอิสระ ความสัมพันธ์กับข้อมูลต้นฉบับจะสูญหายได้ง่าย
- เวกเตอร์นี้สร้างจากการอัปเดตล่าสุดของข้อมูลหรือไม่? หรือเป็นเวกเตอร์เก่าจากโมเดล embedding รุ่นก่อน?
- คำถามเหล่านี้สำคัญมาก และความสับสนตรงนี้อาจก่อให้เกิดข้อผิดพลาดร้ายแรง
- การผูก embedding เวกเตอร์เข้ากับข้อมูลโดยตรงในรูปแบบดัชนี ทำให้ความสัมพันธ์ชัดเจนและได้รับการดูแลโดยอัตโนมัติ
การจัดการข้อมูลง่ายขึ้น
- นักพัฒนามักเจอความยากลำบากเมื่อจำเป็นต้องจัดการการซิงก์ข้อมูลด้วยมือ
- ตัวอย่างเช่น หากลืมลบข้อมูลจากโมเดล embedding รุ่นก่อนเมื่อข้อมูลพื้นฐานถูกลบ ก็อาจเกิดความไม่สอดคล้องกันได้
- abstraction แบบ vectorizer ทำให้การจัดการความสัมพันธ์เหล่านี้เป็นหน้าที่ของระบบ ช่วยลดภาระทางความคิดของนักพัฒนาและลดโอกาสผิดพลาดให้เหลือน้อยที่สุด
Vectorizer คือวิวัฒนาการตามธรรมชาติของคำมั่นสัญญาหลักของ DBMS
- แนวคิด vectorizer คือวิวัฒนาการตามธรรมชาติของความสามารถในระบบจัดการฐานข้อมูลสมัยใหม่ (DBMS)
- ทุกวันนี้ DBMS มีความชำนาญในการจัดการการแปลงข้อมูลและการซิงก์ผ่านโครงสร้างเชิงประกาศอย่างดัชนี ทริกเกอร์ และ materialized view อยู่แล้ว
- abstraction แบบ vectorizer เข้ากับพาราไดม์นี้ได้อย่างดี โดยมอบเครื่องมือใหม่สำหรับจัดการงานดูแล embedding เวกเตอร์ที่ยิ่งทวีความสำคัญ
- เมื่อรวมความสามารถนี้เข้าไว้ใน DBMS โดยตรง เราก็ขยับเข้าใกล้การทำให้คำมั่นสัญญาสูงสุดของระบบฐานข้อมูลเป็นจริงมากขึ้น
- นั่นคือการจัดการข้อมูลโดยซ่อนความซับซ้อนไว้ เพื่อให้ผู้ใช้โฟกัสกับสิ่งที่ทำได้ดีที่สุด ไม่ว่าจะเป็นการสร้างแอปพลิเคชัน วิเคราะห์ข้อมูล หรือขับเคลื่อนนวัตกรรม
การนำ vectorizer ไปใช้กับ PostgreSQL: pgai Vectorizer
- ด้วยแรงผลักดันจากคำมั่นว่าจะลดภาระของนักพัฒนา ทีมวิศวกรรม AI ของ Timescale จึงสร้าง vectorizer สำหรับ PostgreSQL ขึ้นมา
- มันมีชื่อว่า pgai Vectorizer และตอนนี้อยู่ในสถานะ Early Access
- มันเป็นส่วนหนึ่งของโครงการ PGAI ที่มุ่งทำให้ PostgreSQL เหมาะกับระบบ AI มากขึ้น และทำให้การพัฒนา AI ง่ายขึ้นสำหรับนักพัฒนาที่คุ้นเคยกับ PostgreSQL
- หากต้องการดูว่า pgai Vectorizer สร้างและอัปเดต embedding เวกเตอร์ให้ข้อมูลใน PostgreSQL อย่างอัตโนมัติได้อย่างไร โปรดดูวิดีโอเดโม
วิธีการทำงานของ pgai Vectorizer
- กำหนดและสร้าง vectorizer ใน SQL
- คิวรีต่อไปนี้จะสร้าง vectorizer และระบุตารางที่มันทำงานด้วย คอลัมน์ที่จะทำเวกเตอร์ไรซ์ โมเดล embedding ที่จะใช้ และรูปแบบเพิ่มเติมสำหรับข้อมูลอื่นที่ต้องรวมในข้อมูลต้นทางที่จะนำไป embed
-- สร้าง vectorizer ที่ embed ข้อมูลในตาราง blogs โดยอัตโนมัติ
SELECT ai.create_vectorizer(
'public.blogs'::regclass
-- ใช้โมเดล OpenAI text-embedding-3-small
, embedding=>ai.embedding_openai('text-embedding-3-small', 1536, api_key_name=>'OPENAI_API_KEY')
-- สร้างดัชนี StreamingDiskANN อัตโนมัติเมื่อมี 100k แถวในตาราง
, indexing => ai.indexing_diskann(min_rows => 100000, storage_layout => 'memory_optimized'),
-- ใช้ recursive chunking กับคอลัมน์ content
, chunking=>ai.chunking_recursive_character_text_splitter('content')
-- เพิ่มเมตาดาต้าจากคอลัมน์อื่นเข้าไปใน embedding เพื่อให้ค้นหาได้ดีขึ้น
, formatting=>ai.formatting_python_template('Blog title: $title url: $url blog chunk: $chunk')
);
-- vectorizer จะอัปเดต embedding เมื่อมีการเปลี่ยนแปลงในตารางต้นทาง
-- ไม่ต้องมีการกระทำอื่นจากผู้ใช้
- นอกจากนี้ ยังมีการกำหนดฟังก์ชัน chunking พื้นฐาน เพราะข้อความยาวจำเป็นต้องถูกแบ่งเป็นหลายชิ้นเล็กเพื่อให้พอดีกับข้อจำกัดจำนวนโทเค็นของโมเดล embedding
การติดตามการเปลี่ยนแปลงของข้อมูลต้นทาง
- ภายใน pgai Vectorizer จะตรวจสอบการเปลี่ยนแปลงในตารางต้นทาง (insert, update, delete) และสร้างกับอัปเดต embedding เวกเตอร์แบบอะซิงโครนัส
- pgai Vectorizer ถูกสร้างมาสำหรับการดีพลอย 2 แบบ: self-hosted และแบบ fully managed บน Timescale Cloud
- ในการใช้งาน pgai Vectorizer แบบโฮสต์บนคลาวด์ จะใช้ฟังก์ชันคลาวด์ของแพลตฟอร์ม Timescale Cloud เพื่อสร้าง embedding
- ส่วนเวอร์ชันโอเพนซอร์สของ pgai Vectorizer จะรัน worker ภายนอกเพื่อสร้าง embedding
- pgai Vectorizer เก็บข้อมูลการตั้งค่าและแค็ตตาล็อก พร้อมข้อมูล internal bookkeeping สำคัญไว้ภายในฐานข้อมูล
แล้ว embedding ถูกสร้างจริง ๆ ที่ไหน?
- กระบวนการสร้าง embedding จริงเกิดขึ้นในโปรเซสภายนอกนอกฐานข้อมูล
- ซึ่งช่วยลดภาระบนเซิร์ฟเวอร์ฐานข้อมูล และหมายความว่า vectorizer จะไม่กระทบความสามารถของฐานข้อมูลในการรองรับแอปพลิเคชันคิวรี
- นอกจากนี้ยังช่วยให้สเกลงานสร้าง embedding แยกจากงานฐานข้อมูลอื่นได้ง่าย
- กระบวนการนี้จะเริ่มจากอ่านฐานข้อมูลเพื่อตรวจว่ามีงานที่ต้องทำหรือไม่
- หากมี ก็จะอ่านข้อมูลจากฐานข้อมูล ทำ chunking และ formatting เรียกผู้ให้บริการโมเดล embedding อย่าง OpenAI เพื่อสร้าง embedding แล้วเขียนผลลัพธ์กลับลงฐานข้อมูล
การปรับแต่งกระบวนการ
- pgai Vectorizer มีความยืดหยุ่น: คุณสามารถระบุกฎ chunking และ formatting ที่ใช้สร้าง embedding ได้
- โดยเฉพาะอย่างยิ่ง คุณสามารถกำหนดคอลัมน์ของตารางต้นทางที่จะนำมาเวกเตอร์ไรซ์ และตั้งกฎ chunking กับ formatting เพื่อให้ข้อมูลต้นทางพอดีกับข้อจำกัดโทเค็นของ embedding และมีข้อมูลที่เกี่ยวข้องรวมอยู่ในแต่ละ embedding
- ใน Early Access ของ pgai Vectorizer ผู้ใช้สามารถปรับแต่งการเลือกโมเดล embedding ของ OpenAI, กลยุทธ์ chunking สำหรับแบ่งข้อความเป็นชิ้นเล็ก, ตัวเลือก formatting เพื่อเติมบริบทเพิ่มเติมในแต่ละชิ้น, รวมถึงการตั้งค่า indexing แบบกำหนดเองเพื่อสร้างดัชนีอัตโนมัติและจูนประสิทธิภาพ
- และในเร็ว ๆ นี้ มีแผนจะเพิ่มความยืดหยุ่นยิ่งขึ้น โดยให้ผู้ใช้ส่งโค้ด Python ของตนเองเพื่อปรับแต่ง chunking, embedding และ formatting ได้อย่างเต็มที่
ตัวอย่างเช่น ด้านล่างนี้คือ vectorizer ที่ตั้งค่าให้แบ่งไฟล์ต้นทาง HTML แบบ recursive และสร้าง OpenAI embedding จากข้อมูลต้นทาง คุณสามารถตั้งค่า chunking และ formatting ให้เหมาะกับข้อมูลแอปของคุณ ไม่ว่าจะเป็นโค้ด เอกสาร Markdown และอื่น ๆ
-- การตั้งค่า vectorizer ขั้นสูง
SELECT ai.create_vectorizer(
'public.blogs'::regclass,
destination => 'blogs_embedding_recursive',
embedding => ai.embedding_openai('text-embedding-3-small', 1536),
-- ใช้ recursive chunking กับ HTML content ตามการตั้งค่าที่กำหนด
chunking => ai.chunking_recursive_character_text_splitter(
'content',
chunk_size => 800,
chunk_overlap => 400,
-- ตัวคั่นแบบรู้จัก HTML เรียงจากลำดับความสำคัญสูงสุดไปต่ำสุด
separator => array[
E'
', -- แบ่งที่ส่วนเอกสารหลัก
E'
', -- แบ่งที่ขอบเขต div
E'
',
E'
', -- แบ่งที่ย่อหน้า
E'
', -- แบ่งที่จุดขึ้นบรรทัดใหม่
E'
', -- แบ่งที่รายการลิสต์
E'. ', -- ใช้ขอบเขตประโยคแทน
' ' -- ทางเลือกสุดท้าย: แบ่งที่ช่องว่าง
]
),
formatting => ai.formatting_python_template('title: $title url: $url $chunk')
);
ความเห็นของ GN⁺
- pgai Vectorizer ดูเหมือนเป็นเครื่องมือที่ทรงพลังและสร้างสรรค์ ซึ่งสามารถทำให้การจัดการ embedding ง่ายขึ้นอย่างมาก abstraction แบบ vectorizer ช่วยลดภาระที่นักพัฒนาต้องจัดการ embedding ด้วยมือ และรับประกันว่า embedding จะซิงก์กับข้อมูลต้นทาง
- โดยเฉพาะเมื่อต้องนำการเปลี่ยนแปลงอย่างการอัปเกรดโมเดล embedding หรือเปลี่ยนกลยุทธ์ chunking มาใช้ มันน่าจะมีประโยชน์มาก ในฐานข้อมูลเวกเตอร์แบบเดิม การเปลี่ยนแปลงเหล่านี้อาจนำไปสู่กระบวนการซับซ้อนที่ต้องเขียนโค้ดคัสตอมและประสานหลายระบบ แต่เมื่อใช้ pgai Vectorizer ก็เพียงอัปเดตคอนฟิกของ vectorizer
- นอกจากนี้ การจัดการ embedding ในฐานข้อมูลเอนกประสงค์อย่าง PostgreSQL ยังช่วยหลีกเลี่ยงปัญหาการต้องออร์เคสเทรตระบบเฉพาะทางหลายตัว ซึ่งอาจทำให้การพัฒนาแอปพลิเคชันง่ายขึ้นมาก
- ประเด็นหนึ่งที่ควรพิจารณาคือ embedding จริงถูกสร้างในโปรเซส Python ภายนอก ซึ่งเป็นตัวเลือกด้านการออกแบบที่ดีเพราะไม่กระทบประสิทธิภาพฐานข้อมูล แต่ก็หมายความว่าต้องมอนิเตอร์และจัดการกระบวนการสร้าง embedding แยกต่างหาก
- ท้ายที่สุด pgai Vectorizer แสดงถึงความก้าวหน้าที่สำคัญของวิธีจัดการ embedding สำหรับแอปพลิเคชัน AI เมื่อมีทีมใช้งานมากขึ้นและให้ฟีดแบ็กมากขึ้น ก็คาดว่าเครื่องมือทรงพลังนี้จะพัฒนาต่อไปอีก การผสานการจัดการ embedding เข้ากับเครื่องมือที่คุ้นเคยอย่าง Postgres จะช่วยให้นักพัฒนาจำนวนมากขึ้นเข้าถึงความสามารถ AI ขั้นสูงได้
1 ความคิดเห็น
ความเห็นจาก Hacker News
กำลังประเมินภาระโอเวอร์เฮดของการซิงก์ข้อมูลสูงเกินไป และเวิร์กโฟลว์ที่อิงกับ embedding ส่วนใหญ่ไม่ได้มีการอัปเดตหรือลบบ่อยนัก แม้แต่ในชุดข้อมูลขนาดเล็กก็ยังสังเกตปัญหาความสอดคล้องได้ยาก แต่การไม่ต้องกังวลเรื่องการซิงก์ข้อมูลก็ยังถือว่ายอดเยี่ยมอยู่ดี
ในฐานะพนักงานของ Elastic มีการกล่าวถึงว่า Elasticsearch เพิ่งเพิ่มชนิดข้อมูลชื่อ semantic_text เข้ามา ซึ่งจะตัดข้อความเป็นชังก์โดยอัตโนมัติและคำนวณพร้อมจัดเก็บ embedding เอาไว้ อีกทั้งยังทำให้คำสั่ง query เรียบง่ายขึ้น ลด I/O และทำให้โค้ดฝั่งไคลเอนต์ง่ายขึ้น
มีการแนะนำเครื่องมือสำหรับ PostgreSQL ที่ตีความ vector embedding ใหม่ให้เป็นดัชนีของฐานข้อมูล ตอนนี้รองรับแค่ OpenAI แต่มีแผนจะรองรับโมเดล local และ OSS ในเร็ว ๆ นี้ และกำลังรอฟีดแบ็กกับกระแสตอบรับ
มีการตั้งคำถามกับการใช้ FAISS เป็นฐานข้อมูลเดี่ยว โดยมองว่านี่คล้ายกับ sqlite สำหรับ vector embedding และสามารถเก็บ metadata กับ vector ไว้ด้วยกันเพื่อรักษาความสัมพันธ์ได้
มีมุมมองเชิงบวกต่อการใช้ vector บน Postgres และตั้งคำถามเรื่องลำดับการกรองเมื่อใส่ทั้งการค้นหา vector และตรรกะไว้ใน SQL query ชอบ DX ของ pg_vector แต่การกรองหลังค้นหา vector อาจทำให้ช้าลงได้
มีการกล่าวว่าการเก็บ raw embedding ไว้ใน vector database ก็เหมือนกับการเก็บ raw n-gram ของข้อความไว้ในฐานข้อมูล การเก็บเอกสารน่าจะสมเหตุสมผลกว่า
มีการใช้งาน sqlite-vec และ FTS5 บน SQLite อยู่ และระบุว่ามีประโยชน์มาก
มีการสร้าง PostgreSQL ORM บน Node.js เพื่อให้เขียนโค้ดที่มีฟิลด์ vector ได้ ซึ่งสามารถ query ได้ทั้งข้อมูลและเนื้อหา embedding และกำหนดได้ว่าจะเก็บฟิลด์ใดของโมเดลเป็น embedding
มีการกล่าวว่า Materialized Views นั้นดี
มีการกล่าวว่าแอป AI ที่ใช้ชังก์แบบอิงจำนวนตัวอักษรยังไม่เคยก้าวพ้นขั้น PoC