使用 SQLiteVec 將 SQLite 作為向量儲存庫
本筆記本涵蓋如何開始使用 SQLiteVec 向量儲存庫。
SQLite-Vec 是一個
SQLite
擴充功能,專為向量搜尋而設計,強調本地優先的操作,並且易於整合到應用程式中,無需外部伺服器。 它是同一作者 SQLite-VSS 的後繼者。 它以零依賴的 C 語言編寫,設計易於建構和使用。
本筆記本展示如何使用 SQLiteVec
向量資料庫。
設定
您需要安裝 langchain-community
,使用 pip install -qU langchain-community
才能使用此整合
# You need to install sqlite-vec as a dependency.
%pip install --upgrade --quiet sqlite-vec
憑證
SQLiteVec 不需要任何憑證即可使用,因為向量儲存庫只是一個簡單的 SQLite 檔案。
初始化
from langchain_community.embeddings.sentence_transformer import (
SentenceTransformerEmbeddings,
)
from langchain_community.vectorstores import SQLiteVec
embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
vector_store = SQLiteVec(
table="state_union", db_file="/tmp/vec.db", embedding=embedding_function
)
API 參考:SentenceTransformerEmbeddings | SQLiteVec
管理向量儲存庫
將項目新增至向量儲存庫
vector_store.add_texts(texts=["Ketanji Brown Jackson is awesome", "foo", "bar"])
更新向量儲存庫中的項目
尚未支援
從向量儲存庫中刪除項目
尚未支援
查詢向量儲存庫
直接查詢
data = vector_store.similarity_search("Ketanji Brown Jackson", k=4)
透過轉換為檢索器進行查詢
尚未支援
用於檢索增強生成的用法
有關如何將其用於檢索增強生成的更多信息,請參閱 sqlite-vec 上的文檔:https://alexgarcia.xyz/sqlite-vec/。
API 參考
如需所有 SQLiteVec 功能和配置的詳細文檔,請前往 API 參考:https://langchain-python.dev.org.tw/api_reference/community/vectorstores/langchain_community.vectorstores.sqlitevec.SQLiteVec.html
其他範例
from langchain_community.document_loaders import TextLoader
from langchain_community.embeddings.sentence_transformer import (
SentenceTransformerEmbeddings,
)
from langchain_community.vectorstores import SQLiteVec
from langchain_text_splitters import CharacterTextSplitter
# load the document and split it into chunks
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
# split it into chunks
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
texts = [doc.page_content for doc in docs]
# create the open-source embedding function
embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
# load it in sqlite-vss in a table named state_union.
# the db_file parameter is the name of the file you want
# as your sqlite database.
db = SQLiteVec.from_texts(
texts=texts,
embedding=embedding_function,
table="state_union",
db_file="/tmp/vec.db",
)
# query it
query = "What did the president say about Ketanji Brown Jackson"
data = db.similarity_search(query)
# print results
data[0].page_content
'Tonight. I call on the Senate to: Pass the Freedom to Vote Act. Pass the John Lewis Voting Rights Act. And while you’re at it, pass the Disclose Act so Americans can know who is funding our elections. \n\nTonight, I’d like to honor someone who has dedicated his life to serve this country: Justice Stephen Breyer—an Army veteran, Constitutional scholar, and retiring Justice of the United States Supreme Court. Justice Breyer, thank you for your service. \n\nOne of the most serious constitutional responsibilities a President has is nominating someone to serve on the United States Supreme Court. \n\nAnd I did that 4 days ago, when I nominated Circuit Court of Appeals Judge Ketanji Brown Jackson. One of our nation’s top legal minds, who will continue Justice Breyer’s legacy of excellence.'
使用現有 SQLite 連線的範例
from langchain_community.document_loaders import TextLoader
from langchain_community.embeddings.sentence_transformer import (
SentenceTransformerEmbeddings,
)
from langchain_community.vectorstores import SQLiteVec
from langchain_text_splitters import CharacterTextSplitter
# load the document and split it into chunks
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
# split it into chunks
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
texts = [doc.page_content for doc in docs]
# create the open-source embedding function
embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
connection = SQLiteVec.create_connection(db_file="/tmp/vec.db")
db1 = SQLiteVec(
table="state_union", embedding=embedding_function, connection=connection
)
db1.add_texts(["Ketanji Brown Jackson is awesome"])
# query it again
query = "What did the president say about Ketanji Brown Jackson"
data = db1.similarity_search(query)
# print results
data[0].page_content
'Ketanji Brown Jackson is awesome'