Skip to content
LlamaIndex 文档版本 跟随上游 源快照 72315eee 更新于 2026-10-18

如果你在 Colab 中打开这个 Notebook,可能需要先安装 LlamaIndex 🦙。

%pip install llama-index-vector-stores-neo4jvector
!pip install llama-index
import os
import openai

os.environ["OPENAI_API_KEY"] = "OPENAI_API_KEY"
openai.api_key = os.environ["OPENAI_API_KEY"]

初始化 Neo4j 向量封装

from llama_index.vector_stores.neo4jvector import Neo4jVectorStore

username = "neo4j"
password = "pleaseletmein"
url = "bolt://localhost:7687"
embed_dim = 1536

neo4j_vector = Neo4jVectorStore(username, password, url, embed_dim)

加载文档,构建 VectorStoreIndex

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from IPython.display import Markdown, display

下载数据

!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'
--2023-12-14 18:44:00--  https://raw.githubusercontent.com/run-llama/llama_index/main/docs/examples/data/paul_graham/paul_graham_essay.txt
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.109.133, 185.199.110.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 75042 (73K) [text/plain]
Saving to: ‘data/paul_graham/paul_graham_essay.txt’

data/paul_graham/pa 100%[===================>]  73,28K  --.-KB/s    in 0,03s

2023-12-14 18:44:00 (2,16 MB/s) - ‘data/paul_graham/paul_graham_essay.txt’ saved [75042/75042]
# load documents
documents = SimpleDirectoryReader("./data/paul_graham").load_data()
from llama_index.core import StorageContext

storage_context = StorageContext.from_defaults(vector_store=neo4j_vector)
index = VectorStoreIndex.from_documents(
    documents, storage_context=storage_context
)
query_engine = index.as_query_engine()
response = query_engine.query("What happened at interleaf?")
display(Markdown(f"<b>{response}</b>"))

在 Interleaf,他们添加了一种受 Emacs 启发的脚本语言,并使其成为 Lisp 的一个方言。他们正在寻找一名 Lisp 黑客来用这种脚本语言编写内容。本文作者曾在 Interleaf 工作,并提到他们的 Lisp 只是巨大 C 蛋糕上最薄的一层糖霜。作者还提到他们不懂 C,也不想学,因此从未理解 Interleaf 的大部分软件。此外,作者承认自己是个糟糕的员工,大部分时间都在做一个名为 On Lisp 的独立项目。

混合搜索

混合搜索结合使用关键词搜索和向量搜索。要使用混合搜索,你需要将 hybrid_search 设置为 True

neo4j_vector_hybrid = Neo4jVectorStore(
    username, password, url, embed_dim, hybrid_search=True
)
storage_context = StorageContext.from_defaults(
    vector_store=neo4j_vector_hybrid
)
index = VectorStoreIndex.from_documents(
    documents, storage_context=storage_context
)
query_engine = index.as_query_engine()
response = query_engine.query("What happened at interleaf?")
display(Markdown(f"<b>{response}</b>"))

在 Interleaf,他们添加了一种受 Emacs 启发的脚本语言,并使其成为 Lisp 的一个方言。他们正在寻找一名 Lisp 黑客来用这种脚本语言编写内容。文章作者曾在 Interleaf 工作,但由于不懂 C 也不想学,因此不理解大部分软件。他还提到他们的 Lisp 只是巨大 C 蛋糕上最薄的一层糖霜。作者承认自己是个糟糕的员工,大部分时间都在做一份出版 On Lisp 的合同工作。

加载现有向量索引

要连接到现有向量索引,你需要定义 index_name 和 text_node_property 参数:

  • index_name:现有向量索引的名称(默认为 vector)
  • text_node_property:包含文本值的属性名称(默认为 text)
index_name = "existing_index"
text_node_property = "text"
existing_vector = Neo4jVectorStore(
    username,
    password,
    url,
    embed_dim,
    index_name=index_name,
    text_node_property=text_node_property,
)

loaded_index = VectorStoreIndex.from_vector_store(existing_vector)

自定义响应

你可以使用 retrieval_query 参数自定义从知识图谱中检索的信息。

检索查询必须返回以下四列:

  • text:str - 返回文档的文本
  • score:str - 相似度分数
  • id:str - 节点 ID
  • metadata: Dict - 包含额外元数据的字典(必须包含 _node_type 和 _node_content 键)
retrieval_query = (
    "RETURN 'Interleaf hired Tomaz' AS text, score, node.id AS id, "
    "{author: 'Tomaz', _node_type:node._node_type, _node_content:node._node_content} AS metadata"
)
neo4j_vector_retrieval = Neo4jVectorStore(
    username, password, url, embed_dim, retrieval_query=retrieval_query
)
loaded_index = VectorStoreIndex.from_vector_store(
    neo4j_vector_retrieval
).as_query_engine()
response = loaded_index.query("What happened at interleaf?")
display(Markdown(f"<b>{response}</b>"))

Interleaf 聘用了 Tomaz。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。