Skip to main content
本笔记本介绍如何开始使用 Oceanbase 向量存储。

配置

要访问 Oceanbase 向量存储,你需要部署一个独立的 OceanBase 服务器: %docker run —name=ob433 -e MODE=mini -e OB_SERVER_IP=127.0.0.1 -p 2881:2881 -d quay.io/oceanbase/oceanbase-ce:4.3.3.1-101000012024102216 然后安装 langchain-oceanbase 集成包。 pip install -qU “langchain-oceanbase” 检查与 OceanBase 的连接,并设置向量数据的内存使用比例:
from pyobvector import ObVecClient

tmp_client = ObVecClient()
tmp_client.perform_raw_text_sql("ALTER SYSTEM ob_vector_memory_limit_percentage = 30")
<sqlalchemy.engine.cursor.CursorResult at 0x12696f2a0>

初始化

配置嵌入模型的 API 密钥。这里以 DashScopeEmbeddings 为例。在按上述方式使用 Docker 镜像部署 Oceanbase 时,只需按照以下脚本设置 hostportuserpassworddatabase name。对于其他部署方式,请根据实际情况设置这些参数。 pip install dashscope
import os

from langchain_community.embeddings import DashScopeEmbeddings
from langchain_oceanbase.vectorstores import OceanbaseVectorStore

DASHSCOPE_API = os.environ.get("DASHSCOPE_API_KEY", "")
connection_args = {
    "host": "127.0.0.1",
    "port": "2881",
    "user": "root@test",
    "password": "",
    "db_name": "test",
}

embeddings = DashScopeEmbeddings(
    model="text-embedding-v1", dashscope_api_key=DASHSCOPE_API
)

vector_store = OceanbaseVectorStore(
    embedding_function=embeddings,
    table_name="langchain_vector",
    connection_args=connection_args,
    vidx_metric_type="l2",
    drop_old=True,
)

管理向量存储

向向量存储添加项目

  • TODO: 编辑后运行代码单元以生成输出
from langchain_core.documents import Document

document_1 = Document(page_content="foo", metadata={"source": "https://foo.com"})
document_2 = Document(page_content="bar", metadata={"source": "https://bar.com"})
document_3 = Document(page_content="baz", metadata={"source": "https://baz.com"})

documents = [document_1, document_2, document_3]

vector_store.add_documents(documents=documents, ids=["1", "2", "3"])
['1', '2', '3']

更新向量存储中的项目

updated_document = Document(
    page_content="qux", metadata={"source": "https://another-example.com"}
)

vector_store.add_documents(documents=[updated_document], ids=["1"])
['1']

从向量存储中删除项目

vector_store.delete(ids=["3"])

查询向量存储

创建向量存储并添加相关文档后,通常需要在运行链或代理时对其进行查询。

直接查询

执行简单的相似性搜索,方法如下:
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}]")
* bar [{'source': 'https://bar.com'}]
如果要执行相似性搜索并获取对应的分数,可以运行:
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}]")
* [SIM=133.452299] bar [{'source': 'https://bar.com'}]

转换为检索器后查询

你也可以将向量存储转换为检索器,以便在链中更便捷地使用。
retriever = vector_store.as_retriever(search_kwargs={"k": 1})
retriever.invoke("thud")
[Document(metadata={'source': 'https://bar.com'}, page_content='bar')]

用于检索增强生成

有关如何将此向量存储用于检索增强生成(RAG)的指南,请参阅以下章节:

API 参考

有关 OceanbaseVectorStore 所有功能和配置的详细文档,请参阅 API 参考:python.langchain.com/docs/integrations/vectorstores/oceanbase