Configure embedding models for semantic search with OpenAI, Azure OpenAI, Google Gemini, or Voyage AI
Embeddings power semantic search in Graphiti by converting text into vector representations. Configure your preferred embedding provider to enable similarity-based retrieval.
By default, Graphiti uses OpenAI’s text-embedding-3-small:
from graphiti_core import Graphitiimport os# Set your API keyos.environ["OPENAI_API_KEY"] = "sk-..."# Uses OpenAI embeddings by defaultgraphiti = Graphiti( uri="bolt://localhost:7687", user="neo4j", password="password")
# Add episode - embeddings generated automaticallyresult = await graphiti.add_episode( name="Example", episode_body="Alice is a software engineer at Google.", source=EpisodeType.text, source_description="Bio", reference_time=datetime.now(timezone.utc))# Nodes have name embeddingsfor node in result.nodes: if node.name_embedding: print(f"Embedding dims: {len(node.name_embedding)}")# Edges have fact embeddingsfor edge in result.edges: if edge.fact_embedding: print(f"Embedding dims: {len(edge.fact_embedding)}")
# Use smaller dimensions for faster searchembedder_config = OpenAIEmbedderConfig( embedding_model="text-embedding-3-small", embedding_dim=512 # Faster than 1536)# Batch embeddings for efficiencyawait graphiti.add_episode_bulk(episodes) # Better than individual adds# Monitor embedding generationresult = await graphiti.add_episode(...)print(f"Nodes embedded: {len([n for n in result.nodes if n.name_embedding])}")print(f"Edges embedded: {len([e for e in result.edges if e.fact_embedding])}")
Changing embedding models requires re-embedding all existing content. Embeddings from different models are not comparable.
If you need to switch models:
Export your graph structure and content
Create a new database
Configure the new embedding model
Re-ingest all episodes with the new embedder
# Export current dataepisodes = await graphiti.retrieve_episodes(...)# Create new database with new embeddernew_embedder = VoyageAIEmbedder(config=VoyageAIEmbedderConfig( embedding_model="voyage-3"))new_graphiti = Graphiti( uri="bolt://localhost:7687", user="neo4j", password="password", embedder=new_embedder)# Re-ingest with new embeddingsfor episode in episodes: await new_graphiti.add_episode(...)