在构建现代AI应用时,高效存储和检索向量数据是不可或缺的一环。SingleStoreDB是一款高性能的分布式SQL数据库,不仅支持云端和本地部署,还具备向量存储能力及相关函数(如dot_product和euclidean_distance),能够很好地支持基于向量的应用场景,如文本相似度匹配。
本文将以SingleStoreDB为核心,结合LangChain生态系统,展示如何实现一个简单但功能强大的文档检索器。
1. 技术背景介绍
文本检索器(Retriever)是自然语言处理在AI领域中的重要应用之一。通过向量化的文本表示,可以快速计算文本间的相似度。例如,在用户查询时,通过计算查询向量与存储向量之间的距离,找到最相关的文档。
SingleStoreDB 不仅支持传统的关系型数据库功能,还额外提供了向量存储和计算功能。结合LangChain框架的向量存储接口,我们可以方便地将文档存储到数据库中,并基于相似度快速检索。
2. 核心原理解析
下面是实现的主要流程:
- 文档加载和预处理:
- 使用
TextLoader加载文档。 - 通过
CharacterTextSplitter对长文档进行分片。
- 使用
- 向量化处理:
- 使用
OpenAI提供的嵌入模型将每个文档分片转为向量。
- 使用
- 向量存储:
- 将向量存储到SingleStoreDB的表中。
- 搜索与检索:
- 编写检索器,从数据库中查找与查询相关的文档。
3. 代码实现演示
以下是完整的实现代码:
# 安装必要的依赖
# pip install --upgrade langchain-community singlestoredb langchain-openai
import getpass
import os
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import SingleStoreDB
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# Step 1: 加载文档
# 提示:确保在运行代码前准备好文本文件 `state_of_the_union.txt`
loader = TextLoader("state_of_the_union.txt")
documents = loader.load()
# 使用CharacterTextSplitter将文档切分为较小的部分
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# Step 2: 配置OpenAI Embeddings(向量化模型)
# 使用可靠的API服务
os.environ["OPENAI_API_KEY"] = getpass.getpass("请输入 OpenAI API Key:")
embeddings = OpenAIEmbeddings(base_url="https://yunwu.ai/v1", api_key=os.getenv("OPENAI_API_KEY"))
# Step 3: 设置SingleStoreDB连接
# 在环境变量中配置连接URL
os.environ["SINGLESTOREDB_URL"] = "root:password@localhost:3306/my_database" # 修改为你的实际配置
# 将文档存储到SingleStoreDB中
docsearch = SingleStoreDB.from_documents(
docs,
embeddings,
table_name="document_store", # 自定义存储表的名称
)
# 创建检索器
retriever = docsearch.as_retriever(search_kwargs={"k": 2}) # 检索最相关的2条记录
# Step 4: 搜索
# 使用检索器查询与问题最相关的文档
query = "What did the president say about Ketanji Brown Jackson?"
results = retriever.invoke(query)
# 输出结果
for i, res in enumerate(results, 1):
print(f"Result {i}:\n{res.page_content}\n")
4. 应用场景分析
SingleStoreDB的向量存储功能特别适合以下场景:
- 语义搜索:用于文档管理系统,通过自然语言语句快速查询相关文档。
- 推荐系统:根据用户行为生成向量,将向量存储到数据库中,高效匹配推荐内容。
- 聊天机器人:支持基于语义的问答系统,查询知识库中的相关答案。
5. 实践建议
- 文档切分粒度:
- 根据实际需要调整文档的切分粒度(
chunk_size)。较小的粒度有助于提高检索精度。
- 根据实际需要调整文档的切分粒度(
- 数据库性能优化:
- 在生产环境中,确保SingleStoreDB的表结构、索引等优化配置,以支持高并发和低延迟的检索需求。
- API关键配置:
- 确保OpenAI API和SingleStoreDB的配置稳定可靠,推荐使用允许国内访问的服务如
https://yunwu.ai。
- 确保OpenAI API和SingleStoreDB的配置稳定可靠,推荐使用允许国内访问的服务如

被折叠的 条评论
为什么被折叠?



