Mô hình và nền tảng AI
Pinecone phát hành Pg_pinecone, tiện ích mở rộng tìm kiếm mã nguồn mở cho Postgres

Pinecone phát hành pg_pinecone vào ngày 27 tháng 10 năm 2026. Đây là tiện ích mở rộng mã nguồn mở cho Postgres, được cấp phép theo Apache 2.0, đưa công cụ tìm kiếm vector mà công ty cho biết đang vận hành ở quy mô lớn vào các cột pgvector mà ứng dụng đã lưu trữ. Trong các phép đo hiệu năng do công ty công bố, chỉ mục gốc của tiện ích mở rộng dành cho 1 triệu vector 768 chiều có dung lượng 136 MB, so với 2.0 GB đối với HNSW trên halfvec và 4.1 GB đối với vector kích thước đầy đủ.
Bản phát hành được giới thiệu trong một bài đăng thông báo do Harshita Daddala và Anthony Mahanna chấp bút. Theo bài đăng, cách phổ biến để chạy tìm kiếm vector trong Postgres là dùng chỉ mục dạng đồ thị như HNSW. Loại chỉ mục này cần ngày càng nhiều bộ nhớ để duy trì hiệu năng, mất nhiều thời gian để xây dựng và giảm độ chính xác khi tìm kiếm có bộ lọc; khi truy vấn được giới hạn cho một người dùng hoặc một khách thuê, chỉ mục dạng đồ thị có thể trả về ít hàng hơn số lượng được chỉ định trong LIMIT của truy vấn. Thay vào đó, pg_pinecone áp dụng bộ lọc ngay trong quá trình tìm kiếm, nhờ đó, theo Pinecone, ngay cả phạm vi hẹp cũng có thể trả về đủ số lượng kết quả, còn với công cụ mặc định, dữ liệu không bao giờ rời khỏi Postgres.
Ba công cụ đứng sau một chỉ mục
pg_pinecone hoạt động với các cột vector đã được lưu trong pgvector. Ứng dụng kết nối với Postgres theo cách cũ và gửi cùng một câu lệnh SQL, chẳng hạn ORDER BY embedding <=> $1 LIMIT 10; các bảng, bao gồm cả vector đầy đủ, vẫn được lưu nguyên tại chỗ và Postgres tiếp tục là hệ thống lưu giữ dữ liệu chính thức.
Mỗi bảng sử dụng một trong ba công cụ. Công cụ gốc, được chọn làm mặc định, xây dựng và tìm kiếm chỉ mục hoàn toàn bên trong Postgres, không cần tài khoản Pinecone, khóa API hay kết nối mạng. Công cụ pgvector tìm kiếm chỉ mục pgvector hiện có, dù là HNSW hay IVFFlat; kho lưu trữ GitHub của dự án cho biết công cụ này phù hợp với các bảng đã có chỉ mục pgvector và không dùng bộ lọc. Công cụ từ xa gửi yêu cầu tìm kiếm đến một chỉ mục phi máy chủ trong dịch vụ được quản lý của Pinecone, dành cho các bảng đã vượt quá khả năng của một máy chủ Postgres. Chuyển một bảng giữa các công cụ chỉ cần gọi pinecone.set_engine() một lần; các truy vấn không thay đổi và có thể hoàn tác mọi lần chuyển đổi.
Cách công cụ gốc thực hiện tìm kiếm
Giống HNSW của pgvector, công cụ gốc sử dụng thuật toán tìm láng giềng gần nhất xấp xỉ, nhưng thay đồ thị bằng chỉ mục tệp đảo, phân nhóm các vector tương tự thành từng cụm. Mỗi vector được lưu dưới dạng mã RaBitQ đã lượng tử hóa, với khoảng một bit cho mỗi chiều cùng một vài giá trị hiệu chỉnh; bài đăng cho biết phương pháp này do Gao và Long giới thiệu tại SIGMOD 2024. Các mã của từng cụm được lưu liền nhau, nhờ đó quá trình tìm kiếm chỉ cần đọc một vài trang liên tiếp thay vì phải nhảy qua lại trên đồ thị.
Quá trình tìm kiếm gồm ba bước: xác định các cụm gần nhất bằng cách so sánh vector truy vấn với trọng tâm của từng cụm; tính khoảng cách ước lượng cho mỗi hàng dựa trên mã RaBitQ của hàng đó và giữ lại các ứng viên tốt nhất; sau đó xếp hạng lại các ứng viên bằng vector đầy đủ lấy từ bảng.
Bộ lọc được áp dụng ngay trong quá trình tìm kiếm. Pinecone cho biết HNSW của pgvector lọc sau, tức là trước tiên tìm các láng giềng gần nhất rồi mới áp dụng mệnh đề WHERE; vì vậy, bộ lọc hẹp sẽ loại bỏ phần lớn ứng viên, còn các lần quét lặp lại sẽ bổ sung kết quả vào danh sách nhưng làm tăng thời gian và, khi sử dụng relaxed_order, giảm độ chính xác. Công cụ gốc lưu giá trị của một cột lọc bên cạnh mã của mỗi hàng và đếm số hàng theo từng giá trị khi xây dựng chỉ mục. Với bộ lọc hẹp, mặc định là 3% số hàng trở xuống, công cụ lọc trước bằng cách quét mọi hàng phù hợp trong tất cả các cụm và chấm điểm từng hàng bằng vector đầy đủ để kết quả chính xác tuyệt đối. Với bộ lọc rộng hơn, công cụ áp dụng lọc một giai đoạn: tìm kiếm tối đa một nửa số cụm gần nhất, rồi kiểm tra bộ lọc bên trong từng cụm trước khi chấm điểm.
Các bản ghi mới được thêm vào cụm gần nhất và có thể tìm kiếm ngay lập tức. Vì các trọng tâm vẫn giữ nguyên vị trí được xác định khi xây dựng chỉ mục, bài đăng khuyến nghị chạy REINDEX hoặc bật chế độ bảo trì tự động sau những thay đổi lớn, chẳng hạn như tải hàng loạt khiến bảng tăng gấp đôi kích thước, để cân bằng lại các cụm.
Các phép đo hiệu năng do Pinecone công bố
Pinecone so sánh công cụ gốc với chỉ mục HNSW của pgvector, sử dụng vector kích thước đầy đủ và halfvec, trên 1 triệu vector wiki_dpr có 768 chiều. Các thử nghiệm được chạy trên máy AWS r6id.4xlarge với 16 vCPU và 128 GB RAM: độ trễ khi không dùng bộ lọc, thời gian xây dựng và dung lượng chỉ mục được đo trong một phiên trên PostgreSQL 17; tìm kiếm có bộ lọc được đo trong một phiên khác trên PostgreSQL 18; cấu hình giới hạn bộ nhớ được đo trong phiên thứ ba. Độ trễ được báo cáo là trung vị p50 tại k=10 với một máy khách; công ty cho biết toàn bộ thiết lập và các lệnh để chạy lại thử nghiệm có trong README của bộ công cụ đo hiệu năng trong kho lưu trữ.
Với 1 triệu vector, Pinecone báo cáo chỉ mục gốc có dung lượng 136 MB, so với 2.0 GB đối với HNSW trên halfvec và 4.1 GB đối với vector kích thước đầy đủ. Khi tìm kiếm không dùng bộ lọc, công ty báo cáo độ trễ 1.3 ms ở mức recall 0.95, so với 1.7 ms đối với HNSW trên halfvec và 2.7 ms đối với vector kích thước đầy đủ; ở mức recall 0.99, độ trễ lần lượt là 2.3 ms, so với 4.7 ms và 6.7 ms. Với bộ lọc khớp 10% số hàng, Pinecone báo cáo công cụ gốc đạt recall 1.000 trong 12.3 ms khi dùng phương pháp lọc một giai đoạn, trong khi HNSW với các lần quét lặp lại đạt recall tối đa 0.920 trong 5.9 ms; với bộ lọc 1%, công ty báo cáo recall 0.981 trong 8.3 ms. Thời gian xây dựng được báo cáo là 45 giây đối với công cụ gốc, so với 62 giây đối với HNSW trên halfvec và 79 giây đối với vector kích thước đầy đủ.
Khả năng cung cấp và các tính năng Pinecone tùy chọn
pg_pinecone yêu cầu PostgreSQL 17 hoặc 18, quyền truy cập của siêu người dùng và pgvector được cài đặt trên máy chủ. Có thể cài đặt từ các bản phát hành dựng sẵn trên GitHub hoặc dưới dạng hình ảnh pineconeteam/pg_pinecone trên Docker Hub. README mô tả hình ảnh này là hình ảnh pgvector/pgvector được bổ sung pg_pinecone, phát hành với một thẻ cho mỗi phiên bản chính của Postgres, chẳng hạn như 0.11.0-pg17; để chạy công cụ từ xa, cũng cần nạp phần mở rộng thông qua shared_preload_libraries. Quá trình thiết lập tạo các phần mở rộng vector và pg_pinecone, rồi xây dựng chỉ mục bằng lệnh gọi pinecone.create_index(). Dự án cũng có thể được dựng từ mã nguồn bằng bộ công cụ Rust và cargo-pgrx 0.19.2.
Khi có khóa API Pinecone tùy chọn, công cụ từ xa sẽ đồng bộ các embedding với một chỉ mục Pinecone trong nền, trong khi hoạt động tìm kiếm vẫn tiếp tục trên Postgres cho đến khi hoàn tất việc sao chép. Bài viết nêu thêm ba tính năng tùy chọn: embed() gọi dịch vụ suy luận của Pinecone để chuyển văn bản thành embedding ngay từ SQL, hoạt động với cả công cụ gốc lẫn công cụ từ xa, và có thể dùng gói miễn phí của Pinecone cho lần dựng đầu tiên; tính năng tìm kiếm toàn văn BM25 chạy song song với tìm kiếm vector trên cùng một bảng, cho phép thực hiện truy vấn BM25, vector hoặc kết hợp từ SQL; còn rerank() sắp xếp lại các kết quả hàng đầu bằng các mô hình xếp hạng lại của Pinecone.
Tài liệu trên docs.pinecone.io trình bày cách cài đặt, các công cụ lưu trữ, cách chuyển đổi công cụ và chức năng tìm kiếm toàn văn; trong khi đó, kho mã nguồn bổ sung tài liệu tham khảo SQL, sổ tay vận hành và hướng dẫn khôi phục sau thảm họa. Pinecone mô tả đây là bản phát hành đầu tiên của dự án, cho biết họ duy trì pg_pinecone và xem xét mọi yêu cầu kéo, đồng thời cho biết lộ trình công khai sẽ được xây dựng dựa trên phản hồi gửi qua các vấn đề trên GitHub, cộng đồng Discord và các buổi tư vấn hằng tháng.












