from graphiti_core import Graphiti
from graphiti_core.nodes import EpisodeType
# Initialize Graphiti (connects to Neo4j)
graphiti = Graphiti("neo4j://localhost:7687", "neo4j", "password")
async def ingest_document(text: str, source: str):
"""Ingest into knowledge graph"""
# Graphiti automatically extracts entities and relationships
await graphiti.add_episode(
name=source,
episode_body=text,
source=EpisodeType.text,
source_description=f"Document: {source}"
)
async def search_knowledge_graph(query: str) -> str:
"""Hybrid search: semantic + keyword + graph"""
# Graphiti combines:
# - Semantic similarity (embeddings)
# - BM25 keyword search
# - Graph structure traversal
# - Temporal context
results = await graphiti.search(query=query, num_results=5)
# Format graph results
formatted = []
for result in results:
formatted.append(
f"Entity: {result.node.name}\n"
f"Type: {result.node.type}\n"
f"Relationships: {result.relationships}"
)
return "\n---\n".join(formatted)
No comments:
Post a Comment