OceanbaseVectorStore
本笔记本介绍了如何开始使用 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作为示例。部署时Oceanbase使用上述 Docker 镜像,只需按照下面的脚本将host,port,user,password和database name.对于其他部署方式,请根据实际情况设置这些参数。
%pip 安装 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,
)
API 参考:DashScopeEmbeddings
管理矢量存储
将项目添加到向量存储
- 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"])
API 参考:文档
['1', '2', '3']
更新 vector store 中的项
updated_document = Document(
page_content="qux", metadata={"source": "https://another-example.com"}
)
vector_store.add_documents(documents=[updated_document], ids=["1"])
['1']
从 vector store 中删除项目
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 转换为检索器,以便在您的链中更轻松地使用。
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 参考:https://python.langchain.com/docs/integrations/vectorstores/oceanbase