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

tRPC là gì? Framework API end-to-end typesafe cho TypeScript

tRPC là gì? Framework API end-to-end typesafe cho TypeScript giúp loại bỏ hoàn toàn lớp API truyền thống bằng cách chia sẻ kiểu dữ liệu giữa client và server. Khác…

Xem thêm

OpenTelemetry là gì? Tiêu chuẩn observability cho microservices hiện đại

OpenTelemetry là gì? Tiêu chuẩn observability cho microservices hiện đại OpenTelemetry (OTel) là bộ công cụ mã nguồn mở thuộc CNCF (Cloud Native Computing Foundation) cung cấp tiêu chuẩn thống…

Xem thêm

GraphQL là gì? So sánh với REST API và ứng dụng thực tế

GraphQL là một ngôn ngữ truy vấn API và môi trường runtime được phát triển bởi Facebook (Meta) năm 2012 và công khai nguồn mở vào năm 2015. Nó cho…

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