mirror of
https://github.com/getzep/graphiti.git
synced 2025-11-24 06:04:44 +00:00
* fix: remove global DEFAULT_DATABASE usage in favor of driver-specific config Fixes bugs introduced in PR #607. This removes reliance on the global DEFAULT_DATABASE environment variable. It specifies the database within each driver. PR #607 introduced a Neo4j compatability, as the database names are different when attempting to support FalkorDB. This refactor improves compatability across database types and ensures future reliance by isolating the configuraiton to the driver level. * fix: make falkordb support optional This ensures that the the optional dependency and subsequent import is compliant with the graphiti-core project dependencies. * chore: fmt code * chore: undo changes to uv.lock * fix: undo potentially breaking changes to drive interface * fix: ensure a default database of "None" is provided - falling back to internal default * chore: ensure default value exists for session and delete_all_indexes * chore: fix typos and grammar * chore: update package versions and dependencies in uv.lock and bulk_utils.py * docs: update database configuration instructions for Neo4j and FalkorDB Clarified default database names and how to override them in driver constructors. Updated testing requirements to include specific commands for running integration and unit tests. * fix: ensure params defaults to an empty dictionary in Neo4jDriver Updated the execute_query method to initialize params as an empty dictionary if not provided, ensuring compatibility with the database configuration. --------- Co-authored-by: Urmzd <urmzd@dal.ca>
Graphiti Quickstart Example
This example demonstrates the basic functionality of Graphiti, including:
- Connecting to a Neo4j or FalkorDB database
- Initializing Graphiti indices and constraints
- Adding episodes to the graph
- Searching the graph with semantic and keyword matching
- Exploring graph-based search with reranking using the top search result's source node UUID
- Performing node search using predefined search recipes
Prerequisites
- Python 3.9+
- OpenAI API key (set as
OPENAI_API_KEYenvironment variable) - For Neo4j:
- Neo4j Desktop installed and running
- A local DBMS created and started in Neo4j Desktop
- For FalkorDB:
- FalkorDB server running (see FalkorDB documentation for setup)
Setup Instructions
- Install the required dependencies:
pip install graphiti-core
- Set up environment variables:
# Required for LLM and embedding
export OPENAI_API_KEY=your_openai_api_key
# Optional Neo4j connection parameters (defaults shown)
export NEO4J_URI=bolt://localhost:7687
export NEO4J_USER=neo4j
export NEO4J_PASSWORD=password
# Optional FalkorDB connection parameters (defaults shown)
export FALKORDB_URI=falkor://localhost:6379
# To use a different database, modify the driver constructor in the script
- Run the example:
python quickstart_neo4j.py
# For FalkorDB
python quickstart_falkordb.py
What This Example Demonstrates
- Graph Initialization: Setting up the Graphiti indices and constraints in Neo4j or FalkorDB
- Adding Episodes: Adding text content that will be analyzed and converted into knowledge graph nodes and edges
- Edge Search Functionality: Performing hybrid searches that combine semantic similarity and BM25 retrieval to find relationships (edges)
- Graph-Aware Search: Using the source node UUID from the top search result to rerank additional search results based on graph distance
- Node Search Using Recipes: Using predefined search configurations like NODE_HYBRID_SEARCH_RRF to directly search for nodes rather than edges
- Result Processing: Understanding the structure of search results including facts, nodes, and temporal metadata
Next Steps
After running this example, you can:
- Modify the episode content to add your own information
- Try different search queries to explore the knowledge extraction
- Experiment with different center nodes for graph-distance-based reranking
- Try other predefined search recipes from
graphiti_core.search.search_config_recipes - Explore the more advanced examples in the other directories
Troubleshooting
"Graph not found: default_db" Error
If you encounter the error Neo.ClientError.Database.DatabaseNotFound: Graph not found: default_db, this occurs when the driver is trying to connect to a database that doesn't exist.
Solution:
The Neo4j driver defaults to using neo4j as the database name. If you need to use a different database, modify the driver constructor in the script:
# In quickstart_neo4j.py, change:
driver = Neo4jDriver(uri=neo4j_uri, user=neo4j_user, password=neo4j_password)
# To specify a different database:
driver = Neo4jDriver(uri=neo4j_uri, user=neo4j_user, password=neo4j_password, database="your_db_name")
Understanding the Output
Edge Search Results
The edge search results include EntityEdge objects with:
- UUID: Unique identifier for the edge
- Fact: The extracted fact from the episode
- Valid at/invalid at: Time period during which the fact was true (if available)
- Source/target node UUIDs: Connections between entities in the knowledge graph
Node Search Results
The node search results include EntityNode objects with:
- UUID: Unique identifier for the node
- Name: The name of the entity
- Content Summary: A summary of the node's content
- Node Labels: The types of the node (e.g., Person, Organization)
- Created At: When the node was created
- Attributes: Additional properties associated with the node