Skip to main content
LangChain 的 MariaDB 集成(langchain-mariadb)为 MariaDB 11.7.1 及以上版本提供向量功能,采用 MIT 许可证发布。用户可以直接使用所提供的实现,也可以根据特定需求进行自定义。 主要特性包括:
  • 内置向量相似度搜索
  • 支持余弦距离和欧式距离度量
  • 强大的元数据过滤选项
  • 通过连接池进行性能优化
  • 可配置的表和列设置

设置

使用以下命令启动 MariaDB Docker 容器:
!docker run --name mariadb-container -e MARIADB_ROOT_PASSWORD=langchain -e MARIADB_DATABASE=langchain -p 3306:3306 -d mariadb:11.7

安装软件包

该软件包使用 SQLAlchemy,但与 MariaDB 连接器配合效果最佳,后者需要 C/C++ 组件:
# Debian, Ubuntu
!sudo apt install libmariadb3 libmariadb-dev

# CentOS, RHEL, Rocky Linux
!sudo yum install MariaDB-shared MariaDB-devel

# Install Python connector
!pip install -U mariadb
然后安装 langchain-mariadb 软件包
pip install -U langchain-mariadb

VectorStore 需要与 LLM 模型配合使用,这里以 langchain-openai 为例。
pip install langchain-openai
export OPENAI_API_KEY=...

初始化

from langchain_core.documents import Document
from langchain_mariadb import MariaDBStore
from langchain_openai import OpenAIEmbeddings

# connection string
url = f"mariadb+mariadbconnector://myuser:mypassword@localhost/langchain"

# Initialize vector store
vectorstore = MariaDBStore(
    embeddings=OpenAIEmbeddings(),
    embedding_length=1536,
    datasource=url,
    collection_name="my_docs",
)

管理向量存储

添加数据

您可以以带元数据的文档形式添加数据:
docs = [
    Document(
        page_content="there are cats in the pond",
        metadata={"id": 1, "location": "pond", "topic": "animals"},
    ),
    Document(
        page_content="ducks are also found in the pond",
        metadata={"id": 2, "location": "pond", "topic": "animals"},
    ),
    # More documents...
]
vectorstore.add_documents(docs)
或以纯文本并附带可选元数据的形式添加:
texts = [
    "a sculpture exhibit is also at the museum",
    "a new coffee shop opened on Main Street",
]
metadatas = [
    {"id": 6, "location": "museum", "topic": "art"},
    {"id": 7, "location": "Main Street", "topic": "food"},
]

vectorstore.add_texts(texts=texts, metadatas=metadatas)

查询向量存储

# Basic similarity search
results = vectorstore.similarity_search("Hello", k=2)

# Search with metadata filtering
results = vectorstore.similarity_search("Hello", filter={"category": "greeting"})

过滤选项

系统支持对元数据进行多种过滤操作:
  • 等于:$eq
  • 不等于:$ne
  • 比较:ltlt、lte、gtgt、gte
  • 列表操作:inin、nin
  • 文本匹配:likelike、nlike
  • 逻辑操作:andand、or、$not
示例:
# Search with simple filter
results = vectorstore.similarity_search(
    "kitty", k=10, filter={"id": {"$in": [1, 5, 2, 9]}}
)

# Search with multiple conditions (AND)
results = vectorstore.similarity_search(
    "ducks",
    k=10,
    filter={"id": {"$in": [1, 5, 2, 9]}, "location": {"$in": ["pond", "market"]}},
)

API 参考

更多详情请参阅此仓库