Advanced Knowledge Graph Engine with semantic search and temporal tracking
Project description
Knowledge Graph Engine v2
Modern Neo4j-based knowledge graph engine with semantic search capabilities, intelligent relationship management, and performance optimizations.
๐ฏ Overview
A production-ready knowledge graph system built entirely on Neo4j for persistent graph storage and vector search. Combines graph database operations with semantic vector search to provide intelligent information storage, retrieval, and reasoning.
โจ Key Features
- ๐๏ธ Neo4j-Native Architecture: Complete Neo4j integration for both graph and vector operations
- ๐ Enhanced Semantic Search: Improved vector search with dynamic thresholds and contextual boosting
- ๐ค LLM Integration: OpenAI/Ollama support for entity extraction and query processing
- โ๏ธ Conflict Resolution: Intelligent handling of contradicting information with temporal tracking
- โฐ Temporal Tracking: Complete relationship history with date ranges and conflict resolution
- ๐ฏ Smart Query Understanding: Context-aware search with semantic category matching
- ๐ Optimized Performance: 50-74% faster queries with smart caching and lazy loading
- ๐ Production Ready: ACID compliance, comprehensive error handling, modern architecture
๐ New in v2.1.0
- โก Performance Optimizations: GraphQueryOptimizer and Neo4jOptimizer for 50-74% faster queries
- ๐พ Smart Caching: Query result caching with 5-minute TTL for near-instant repeated queries
- ๐ง Refactored GraphEdge: Lazy loading with safe accessors, 18% smaller codebase
- ๐ ๏ธ Dynamic Relationships: WORKS_AT, LIVES_IN instead of generic RELATES_TO
- ๐ Bug Fixes: Fixed "Relationship not populated" errors, enhanced source filtering
๐ Project Structure
src/ # Main source directory
โโโ kg_engine/ # Knowledge Graph Engine
โ โโโ core/ # Core engine
โ โ โโโ engine.py # Main KG Engine
โ โโโ models/ # Data models
โ โ โโโ models.py # Graph data structures
โ โโโ storage/ # Storage components
โ โ โโโ graph_db.py # Neo4j graph operations
โ โ โโโ neo4j_vector_store.py # Vector storage
โ โ โโโ vector_store.py # Vector store interface
โ โ โโโ ... # Other storage components
โ โโโ llm/ # LLM integration
โ โ โโโ llm_interface.py # OpenAI/Ollama interface
โ โโโ config/ # Configuration
โ โ โโโ neo4j_config.py # Neo4j settings
โ โ โโโ neo4j_schema.py # Schema management
โ โโโ utils/ # Utilities
โ โโโ date_parser.py # Date parsing
โ โโโ graph_query_optimizer.py # Query optimization
โ โโโ neo4j_optimizer.py # Neo4j optimizations
โ โโโ ... # Other utilities
โโโ examples/ # Usage examples
โ โโโ examples.py # Basic examples
โ โโโ bio_example.py # Biographical demo
โ โโโ simple_bio_demo.py # Simple demo
โโโ test_neo4j_integration.py # Test suite
docs/ # Comprehensive documentation
โโโ architecture/ # System design
โโโ user-guide/ # Getting started
โโโ api/ # API reference
โโโ development/ # Development guides
๐ Quick Start
Prerequisites
# Install Neo4j (required)
docker run --name neo4j -p7474:7474 -p7687:7687 -d \
-e NEO4J_AUTH=neo4j/password \
neo4j:latest
Installation
pip install -e .
Basic Usage
from src.kg_engine import KnowledgeGraphEngineV2, InputItem
from src.kg_engine.config import Neo4jConfig
# Initialize with Neo4j
engine = KnowledgeGraphEngineV2(
api_key="your-openai-key", # or "ollama" for local LLM
neo4j_config=Neo4jConfig()
)
# Add knowledge
result = engine.process_input([
InputItem(description="Alice works as a software engineer at Google"),
InputItem(description="Bob lives in San Francisco")
])
# Search with natural language
response = engine.search("Who works at Google?")
print(response.answer) # "Alice works as a software engineer at Google."
๐ค LLM Setup Options
Option 1: OpenAI (Recommended for Production)
export OPENAI_API_KEY="your-api-key"
engine = KnowledgeGraphEngineV2(
api_key="your-openai-key",
model="gpt-4.1-nano" # Fast and cost-effective
)
Option 2: Local Ollama (Privacy & Cost-Free)
# Install Ollama
curl -fsSL https://ollama.ai/install.sh | sh
# Start server
ollama serve
# Pull a model
ollama pull llama3.2:3b # Recommended: good balance of size/performance
engine = KnowledgeGraphEngineV2(
api_key="ollama",
base_url="http://localhost:11434/v1",
model="llama3.2:3b"
)
๐๏ธ Optimized Architecture
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ LLM Interface โ โ Graph Database โ โ Vector Store โ
โ โ โ โ โ โ
โ โข Entity Extractโ โ โข Neo4j Native โ โ โข Neo4j Vectors โ
โ โข Query Parse โ โ โข Query Cache โ โ โข Semantic โ
โ โข Answer Gen. โ โ โข Optimizations โ โ โข Search โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโ
โ KG Engine v2 โ
โ (Optimized) โ
โ โ
โ โข Process Input โ
โ โข Smart Updates โ
โ โข Hybrid Search โ
โ โข Query Caching โ
โ โข Safe Accessors โ
โโโโโโโโโโโโโโโโโโโโโโโ
๐ Advanced Features
Intelligent Conflict Resolution
# Initial information
engine.process_input([InputItem(description="Alice lives in Boston")])
# Update with conflicting information (automatically resolves)
engine.process_input([InputItem(description="Alice moved to Seattle in 2024")])
# System automatically:
# 1. Marks old relationship as obsolete
# 2. Adds new relationship as active
# 3. Maintains complete history
Optimized Search Performance
# Fast cached queries (< 1ms for repeated searches)
response = engine.search("Who works in technology?") # First call: ~100ms
response = engine.search("Who works in technology?") # Cached: < 1ms
# Enhanced semantic understanding with contextual boosting
response = engine.search("Who was born in Europe?")
# โ
Returns all European births: Berlin, Lyon, Barcelona, Paris
# Safe relationship access (no more "Relationship not populated" errors)
for result in response.results:
edge = result.triplet.edge
subject = edge.get_subject_safe() # Safe accessor
relationship = edge.get_relationship_safe() # Safe accessor
obj = edge.get_object_safe() # Safe accessor
Temporal Relationship Tracking
# Natural language dates
engine.process_input([
InputItem(description="Project started", from_date="2 months ago"),
InputItem(description="Alice joined", from_date="last week")
])
๐ Documentation
- ๐ Quick Start: Get running in 5 minutes
- ๐๏ธ Architecture: System design and components
- ๐ Workflows: Process flows with diagrams
- ๐ง API Reference: Complete API documentation
- ๐ฉโ๐ป Development: Development setup and guidelines
๐ฆ Running Examples
# Run basic examples
python src/examples/examples.py
# Run biographical knowledge graph demo
python src/examples/simple_bio_demo.py
# Verify project structure
python verify_structure.py
Expected output:
โ
Neo4j connection verified
๐ Knowledge Graph Engine v2 initialized
- Vector store: kg_v2 (neo4j)
- Graph database: Neo4j (persistent)
=== Example: Semantic Relationship Handling ===
1. Adding: John Smith teaches at MIT
Result: 1 new edge(s) created
...
๐ Search Capabilities
The Knowledge Graph Engine v2 features advanced semantic search with:
- Performance Optimizations: Query caching, lazy loading, and optimized Cypher queries
- Dynamic Similarity Thresholds: Base threshold of 0.3 with context-specific adjustments
- Semantic Category Matching: Understands relationships between concepts (e.g., "technology" โ "software engineer")
- Query-Specific Boosting: Different query types get tailored relevance scoring
- Geographic Intelligence: Recognizes European cities and other geographic relationships
- Safe Data Access: Robust error handling with safe accessor methods
Example Queries
# Technology and profession queries
"Who works in technology?" โ Finds software engineers, developers, tech professionals
"Tell me about engineers" โ Returns all engineering-related professions
# Geographic queries
"Who was born in Europe?" โ Finds Berlin, Lyon, Barcelona, Paris births
"Who lives in Paris?" โ Returns all Paris residents
# Activity and interest queries
"What do people do for hobbies?" โ Returns all "enjoys" relationships
"Tell me about photographers" โ Finds people who enjoy or specialize in photography
# Entity-specific queries
"Tell me about Emma Johnson" โ Returns all relationships for Emma
๐งช Testing
Run the comprehensive test suite:
# Core integration tests
python test_neo4j_integration.py
# Performance optimization tests
python test_optimizations.py
# Relationship fix validation
python test_relationship_fix.py
# Quick validation
python test_quick_relationship_fix.py
๐ Performance Benchmarks
| Operation | Before Optimization | After Optimization | Improvement |
|---|---|---|---|
| Entity Exploration | 20-50ms | 8-15ms | ~60% faster |
| Vector Search | 100-200ms | 40-80ms | ~50% faster |
| Conflict Detection | 150-300ms | 50-100ms | ~67% faster |
| Path Finding | 80-160ms | 25-50ms | ~70% faster |
| Cached Queries | N/A | < 1ms | Near-instant |
๐ง Development
For development setup and contributing guidelines, see docs/development/README.md.
Key Implementation Details
# Safe edge property access
edge = result.triplet.edge
if edge.has_graph_data():
subject, relationship, obj = edge.get_graph_data()
else:
subject = edge.get_subject_safe() or "Unknown"
relationship = edge.get_relationship_safe() or "Unknown"
obj = edge.get_object_safe() or "Unknown"
# Optimized queries with caching
cache_key = f"entity_exploration_{entity_name}"
if cached_result := self.graph_db._get_cache(cache_key):
return cached_result
result = self.graph_db.get_entity_relationships_optimized(entity_name)
self.graph_db._set_cache(cache_key, result)
License
MIT License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kg_engine_v2-2.2.2.tar.gz.
File metadata
- Download URL: kg_engine_v2-2.2.2.tar.gz
- Upload date:
- Size: 108.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f76539231ddd0a9a38862c3053dbd449a8388346720619acebbd16892577a32c
|
|
| MD5 |
cf96f11e962def4c7d8ebdbc72198838
|
|
| BLAKE2b-256 |
49ee931cdd0f84a0a9d646afbb47e6746299d8720f46f1bab7b67e7364866ecb
|
File details
Details for the file kg_engine_v2-2.2.2-py3-none-any.whl.
File metadata
- Download URL: kg_engine_v2-2.2.2-py3-none-any.whl
- Upload date:
- Size: 72.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33898782502a33d89f8d5d4443a061948dedc1590b48674f0300dff473dd4f61
|
|
| MD5 |
8fb697bd9a0cacef1cc7448d536aae6c
|
|
| BLAKE2b-256 |
66a89269b12d01324f31327e0bb6d09b26a0e9d9f584b0467e45667a70b99b4b
|