openGauss VectorStore
本 Notebook 将介绍 openGauss VectorStore 的入门方法。openGauss 是一个高性能的关系型数据库,具备原生的向量存储和检索能力。此次集成使得 LangChain 应用程序内的向量操作符合 ACID 标准,将传统的 SQL 功能与现代的 AI 驱动的相似性搜索相结合。 vector store。
设置
启动 openGauss 容器
docker run --name opengauss \
-d \
-e GS_PASSWORD='MyStrongPass@123' \
-p 8888:5432 \
opengauss/opengauss-server:latest
安装 langchain-opengauss
pip install langchain-opengauss
系统要求:
- openGauss ≥ 7.0.0
- Python ≥ 3.8
- psycopg2-binary
凭据
使用你的 openGauss 凭据
初始化
Select embeddings model:
pip install -qU langchain-openai
import getpass
import os
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
from langchain_opengauss import OpenGauss, OpenGaussSettings
# Configure with schema validation
config = OpenGaussSettings(
table_name="test_langchain",
embedding_dimension=384,
index_type="HNSW",
distance_strategy="COSINE",
)
vector_store = OpenGauss(embedding=embeddings, config=config)
管理向量存储
向向量存储添加条目
from langchain_core.documents import Document
document_1 = Document(page_content="foo", metadata={"source": "https://example.com"})
document_2 = Document(page_content="bar", metadata={"source": "https://example.com"})
document_3 = Document(page_content="baz", metadata={"source": "https://example.com"})
documents = [document_1, document_2, document_3]
vector_store.add_documents(documents=documents, ids=["1", "2", "3"])
API Reference:Document
更新向量存储中的条目
updated_document = Document(
page_content="qux", metadata={"source": "https://another-example.com"}
)
# If the id is already exist, will update the document
vector_store.add_documents(document_id="1", document=updated_document)
从向量存储中删除项目
vector_store.delete(ids=["3"])
查询向量存储
创建向量存储并添加相关文档后,你最有可能希望在链或代理运行时查询它。
直接查询
执行简单的相似性搜索可以这样做:
- TODO: 编辑并运行代码单元以生成输出
results = vector_store.similarity_search(
query="thud", k=1, filter={"source": "https://another-example.com"}
)
for doc in results:
print(f"* {doc.page_content} [{doc.metadata}]")
如果你想执行相似性搜索并获得相应的得分,可以运行:
results = vector_store.similarity_search_with_score(
query="thud", k=1, filter={"source": "https://example.com"}
)
for doc, score in results:
print(f"* [SIM={score:3f}] {doc.page_content} [{doc.metadata}]")
通过转换向量存储为检索器
你也可以将向量存储转换为检索器,以便在你的链中使用。
- TODO: 编辑后运行代码单元以生成输出
retriever = vector_store.as_retriever(search_type="mmr", search_kwargs={"k": 1})
retriever.invoke("thud")