You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
langchain/templates/neo4j-parent
Tomaz Bratanic 8e88ba16a8
Update neo4j template readmes (#12540)
8 months ago
..
neo4j_parent Update neo4j template readmes (#12540) 8 months ago
tests Templates (#12294) 8 months ago
README.md Update neo4j template readmes (#12540) 8 months ago
dune.txt Templates (#12294) 8 months ago
ingest.py various templates improvements (#12500) 8 months ago
main.py notebook fmt (#12498) 8 months ago
poetry.lock various templates improvements (#12500) 8 months ago
pyproject.toml various templates improvements (#12500) 8 months ago

README.md

Parent Document Retriever with Neo4j Vector Index

This template allows you to balance precise embeddings and context retention by splitting documents into smaller chunks and retrieving their original or larger text information. Using a Neo4j vector index, the template queries child nodes using vector similarity search and retrieves the corresponding parent's text by defining an appropriate retrieval_query parameter.

Neo4j database

There are a number of ways to set up a Neo4j database.

Neo4j Aura

Neo4j AuraDB is a fully managed cloud graph database service. Create a free instance on Neo4j Aura. When you initiate a free database instance, you'll receive credentials to access the database.

Environment variables

You need to define the following environment variables

OPENAI_API_KEY=<YOUR_OPENAI_API_KEY>
NEO4J_URI=<YOUR_NEO4J_URI>
NEO4J_USERNAME=<YOUR_NEO4J_USERNAME>
NEO4J_PASSWORD=<YOUR_NEO4J_PASSWORD>

Populating with data

If you want to populate the DB with some example data, you can run python ingest.py. The script process and stores sections of the text from the file dune.txt into a Neo4j graph database. First, the text is divided into larger chunks ("parents") and then further subdivided into smaller chunks ("children"), where both parent and child chunks overlap slightly to maintain context. After storing these chunks in the database, embeddings for the child nodes are computed using OpenAI's embeddings and stored back in the graph for future retrieval or analysis. Additionally, a vector index named retrieval is created for efficient querying of these embeddings.

Installation

# from inside your LangServe instance
poe add neo4j-parent