SQLite trong ứng dụng AI: Hướng dẫn tích hợp embedding và vector search

SQLite là cơ sở dữ liệu nhúng phổ biến nhất thế giới, nhưng ít người biết nó còn có thể làm vector database cho ứng dụng AI nhờ extension sqlite-vss (Vector Similarity Search) của Alex Garcia. Kết hợp embedding model local như all-MiniLM-L6-v2, bạn có thể chạy semantic search hoàn toàn offline mà không cần server riêng.

Trước khi sqlite-vss xuất hiện, người ta thường dùng Chroma, Qdrant hay Pinecone để lưu vector. Giờ bạn chỉ cần một file .db đơn giản. Điều này đặc biệt hữu ích cho app desktop, CLI tool, hoặc prototype nhanh mà không muốn chạy container phức tạp.

cấu trúc database SQLite với extension vector search

So sánh SQLite vs vector database chuyên dụng

Không phải lúc nào cũng nên dùng SQLite cho AI. Bảng dưới đây giúp bạn quyết định nhanh:

Tiêu chí SQLite + sqlite-vss Qdrant / Chroma / Pinecone
Kích thước dataset Dưới vài triệu vector, DB < 10GB Hàng triệu đến tỷ vector, cluster
Latency 1-5ms cho local ANN 1-20ms tùy infra
Chi phí Miễn phí, file .db Có thể miễn phí tier, nhưng cần server
Triển khai Copy file, không cần network Cần endpoint, container, hoặc cloud
Filter metadata Hỗ trợ SQL WHERE Hỗ trợ payload filter

Cài đặt sqlite-vss và chạy thử

Bước 1: Cài extension. Trên macOS/Linux bạn dùng brew install sqlite-vss hoặc build từ source nếu dùng Windows. Python có gói sqlite-vss tự động load extension.

Bước 2: Tạo bảng lưu embedding. Cấu trúc bảng gồm 2 phần: bảng chính lưu nội dung và metadata, bảng vss lưu vector.

import sqlite3
import sqlite_vss

conn = sqlite3.connect("knowledge.db")
conn.enable_load_extension(True)
sqlite_vss.load(conn)

conn.execute("""
    CREATE TABLE IF NOT EXISTS documents (
        id INTEGER PRIMARY KEY,
        content TEXT,
        url TEXT
    )
""")

conn.execute("""
    CREATE VIRTUAL TABLE IF NOT EXISTS vss_docs USING vss0(
        embedding(384)
    )
""")

Bước 3: Chèn dữ liệu và search. Dùng model all-MiniLM-L6-v2 của sentence-transformers để tạo embedding 384 chiều, rồi insert vào bảng vss_docs.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")
docs = [
    ("Python là gì? Ngôn ngữ lập trình bậc cao", "https://example.com/python"),
    ("SQLite là gì? Database nhúng nhẹ", "https://example.com/sqlite"),
]

for text, url in docs:
    emb = model.encode(text).tolist()
    cur = conn.execute("INSERT INTO documents (content, url) VALUES (?, ?)", (text, url))
    doc_id = cur.lastrowid
    conn.execute("INSERT INTO vss_docs (rowid, embedding) VALUES (?, ?)", (doc_id, emb))

conn.commit()

Bước 4: Tìm kiếm semantic. Câu truy vấn sẽ được biến thành vector, rồi sqlite-vss tìm top-k vector gần nhất bằng khoảng cách cosine hoặc Euclidean.

query = "hướng dẫn học lập trình Python"
q_emb = model.encode(query).tolist()

results = conn.execute("""
    SELECT d.id, d.content, d.url, v.distance
    FROM vss_docs v
    JOIN documents d ON d.rowid = v.rowid
    WHERE v.embedding MATCH ?
    ORDER BY v.distance
    LIMIT 3
""", (q_emb,)).fetchall()

for r in results:
    print(f"[{r[2]}] {r[1]} (distance: {r[3]:.4f})")

so sánh trực quan giữa SQLite và Qdrant cho AI search

Khi nào nên dùng, khi nào không?

Dùng SQLite + sqlite-vss khi bạn cần prototype nhanh, app desktop, CLI tool, hoặc dataset nhỏ dưới vài triệu vector. Không dùng khi cần quy mô lớn, đồng thời nhiều writer, hoặc cần advanced filtering phức tạp vì SQLite chỉ phù hợp với single-writer ở mức độ cao.

Kết hợp tốt nhất là dùng SQLite làm local cache và Qdrant làm cloud backend — app đồng bộ metadata lên cloud khi online, vẫn hoạt động offline nhờ bản sao SQLite local.

Tìm hiểu thêm về sqlite-vss trên GitHub

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Debugging là gì: quy trình, kỹ thuật và công cụ tìm lỗi

Debugging là gì: quy trình, kỹ thuật và công cụ tìm lỗi phần mềm Debugging là quá trình phát hiện, cô lập và khắc phục lỗi trong phần mềm. Từ…

Xem thêm

Terraform là gì: công cụ Infrastructure as Code của HashiCorp

Terraform là gì: công cụ Infrastructure as Code của HashiCorp Terraform là một công cụ Infrastructure as Code (IaC) do HashiCorp phát triển, cho phép người dùng khai báo và…

Xem thêm

Fortran là gì: ngôn ngữ lập trình cho tính toán khoa học

Fortran là gì: ngôn ngữ lập trình cho tính toán khoa học Fortran là gì? Đây là ngôn ngữ lập trình cao cấp được thiết kế riêng cho các bài…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất