1. 介绍

目前用到三个插件:
sqlite-ai:使用sql来操作llm
sqlite-vector:类似faiss的向量检索插件
sqlite-rag:基于sqlite的混合rag插件
补充:sqlite-vec结合sqlite_lembed也可以用于向量搜索

2. sqlite-ai

使用pip进行安装,下面是使用示例:

import importlib.resources
import sqlite3
conn = sqlite3.connect("example.db")
ext_path = importlib.resources.files("sqliteai.binaries.cpu") / "ai"
conn.enable_load_extension(True)
conn.load_extension(str(ext_path))
conn.enable_load_extension(False)
conn.execute("SELECT llm_model_load('../MiniCPM4-0.5B-bf16.gguf', 'n_predict=4096,n_gpu_layers=99');")
conn.execute("SELECT llm_context_create('n_ctx=512,n_threads=6,n_batch=128');")
conn.execute("SELECT llm_chat_respond('你是谁?replay within 10 words');").fetchone()[0]

3. sqlite-vector

使用方法如下:

import importlib.resources
import sqlite3
conn = sqlite3.connect("example.db")
ext_path = importlib.resources.files("sqlite_vector.binaries") / "vector"
conn.enable_load_extension(True)
conn.load_extension(str(ext_path))
conn.enable_load_extension(False)
conn.execute("CREATE TABLE IF NOT EXISTS documents (id INTEGER PRIMARY KEY AUTOINCREMENT,embedding BLOB);")
conn.execute("SELECT vector_init('documents', 'embedding', 'dimension=3,type=FLOAT32,distance=cosine');")
conn.execute("INSERT INTO documents(embedding) VALUES(vector_as_f32('[0.1, 0.2, 0.3]'));")
conn.execute("INSERT INTO documents(embedding) VALUES(vector_as_f32('[0.1, 0.2, 0.5]'));")
conn.commit()
conn.execute("SELECT rowid, distance FROM vector_full_scan('documents', 'embedding', vector_as_f32('[0.1, 0.2, 0.3]'), 5);").fetchall()

4. sqlite-vec

使用pip进行安装,下面是使用示例:

import sqlite3
import sqlite_vec
import sqlite_lembed
from typing import List
db = sqlite3.connect(":memory:")
db.enable_load_extension(True)
sqlite_vec.load(db)
sqlite_lembed.load(db)
db.enable_load_extension(False)
db.executef"""INSERT INTO temp.lembed_models(name, model) select 'default', lembed_model_from_file('m3e-base.f16.gguf')""")
db.execute("""create table articles (headline text);""")
db.execute("""create virtual table vec_articles using vec0(headline_embeddings float[768]);""")
db.execute(f"""insert into articles VALUES ('{text[:500]}');""")
db.execute("""insert into vec_articles(rowid, headline_embeddings) select rowid, lembed(headline) from articles;""")
db.execute(f"""with matches as (SELECT rowid,distance FROM vec_articles WHERE headline_embeddings MATCH lembed('天气') and k = 2 ORDER BY distance)
select headline,100/(1+distance) from matches left join articles on articles.rowid = matches.rowid;""").fetchall()

更多推荐