> SurrealDB 是一个统一的、多模型的数据库,专为 AI 系统构建。它将结构化和非结构化数据(包括向量搜索、图遍历、关系查询、全文搜索、文档存储和时间序列数据)整合到单个 ACID 兼容的引擎中,可从 3 MB 的边缘二进制文件扩展到云中 PB 级集群。通过消除对多个专业存储的需求,SurrealDB 简化了架构、降低了延迟,并确保了 AI 工作负载的一致性。 > > **为什么 SurrealDB 对 GenAI 系统很重要** > > - **一个引擎搞定存储和内存:** 在一个系统中结合持久化存储和快速、代理友好的内存,提供代理所需的所有数据,无需同步多个系统。 > - **代理的单跳内存:** 在单个查询中运行向量搜索、图遍历、语义连接和事务写入,让 LLM 代理获得快速、一致的内存访问,无需将关系数据库、图数据库和向量数据库拼接在一起。 > - **原地推理和实时更新:** SurrealDB 使代理能够在数据旁边运行推理并接收毫秒级的新鲜更新,这对于实时推理和协作至关重要。 > - **版本化、持久的上下文:** SurrealDB 支持时间旅行查询和版本化记录,让代理能够审计或"重放"过去的状态,以获得一致且可解释的推理。 > - **即插即用的代理内存:** 将 AI 内存作为原生概念暴露出来,让将 SurrealDB 作为 AI 框架的即插即用后端变得简单。
本笔记本介绍如何开始使用 SurrealDB 向量存储。
设置
您可以在本地运行 SurrealDB 或开始使用 免费 SurrealDB 云账户.
对于本地部署,有两个选项:
- 安装 SurrealDB 和 运行 SurrealDB。使用以下命令在内存中运行:
surreal start -u root -p root
docker run --rm --pull always -p 8000:8000 surrealdb/surrealdb:latest start
安装依赖项
安装 langchain-surrealdb 和 surrealdb python 包。
# -- Using pip
pip install -U langchain-surrealdb surrealdb
# -- Using poetry
poetry add langchain-surrealdb surrealdb
# -- Using uv
uv add langchain-surrealdb surrealdb
要运行此笔记本,我们只需安装此示例所需的其他依赖项:
!poetry add --quiet --group docs langchain-ollama langchain-surrealdb
初始化
from langchain_ollama import OllamaEmbeddings
from langchain_surrealdb.vectorstores import SurrealDBVectorStore
from surrealdb import Surreal
conn = Surreal("ws://localhost:8000/rpc")
conn.signin({"username": "root", "password": "root"})
conn.use("langchain", "demo")
vector_store = SurrealDBVectorStore(OllamaEmbeddings(model="llama3.2"), conn)
管理向量存储
向向量存储添加项
from langchain_core.documents import Document
_url = "https://surrealdb.com"
d1 = Document(page_content="foo", metadata={"source": _url})
d2 = Document(page_content="SurrealDB", metadata={"source": _url})
d3 = Document(page_content="bar", metadata={"source": _url})
d4 = Document(page_content="this is surreal", metadata={"source": _url})
vector_store.add_documents(documents=[d1, d2, d3, d4], ids=["1", "2", "3", "4"])
['1', '2', '3', '4']
更新向量存储中的项
updated_document = Document(
page_content="zar", metadata={"source": "https://example.com"}
)
vector_store.add_documents(documents=[updated_document], ids=["3"])
['3']
从向量存储中删除项
vector_store.delete(ids=["3"])
查询向量存储
一旦您的向量存储创建完成并添加了相关文档,您很可能希望在运行链或代理时对其进行查询。
直接查询
执行简单的相似性搜索可以如下进行:
results = vector_store.similarity_search(
query="surreal", k=1, custom_filter={"source": "https://surrealdb.com"}
)
for doc in results:
print(f"{doc.page_content} [{doc.metadata}]")
this is surreal [{'source': 'https://surrealdb.com'}]
如果您想执行相似性搜索并接收相应的分数,可以运行:
results = vector_store.similarity_search_with_score(
query="thud", k=1, custom_filter={"source": "https://surrealdb.com"}
)
for doc, score in results:
print(f"[similarity={score:.0%}] {doc.page_content}")
[similarity=57%] this is surreal
通过转换为检索器进行查询
您还可以将向量存储转换为检索器,以便在链中更轻松地使用。
retriever = vector_store.as_retriever(
search_type="mmr", search_kwargs={"k": 1, "lambda_mult": 0.5}
)
retriever.invoke("surreal")
[Document(id='4', metadata={'source': 'https://surrealdb.com'}, page_content='this is surreal')]
用于检索增强生成的用法
有关如何使用此向量存储进行检索增强生成 (RAG) 的指南,请参阅以下部分:
API 参考
有关所有 SurrealDBVectorStore 功能和配置的详细文档,请前往 API 参考。
后续步骤
- - 查看 基础示例。使用 Dockerfile 来试用!
- - 查看 图表示例
- - 尝试 Jupyter notebook
- - Awesome SurrealDB,精选的 SurrealDB 资源、工具、实用程序和应用程序列表