AI-powered graph search with Claude Agent using natural language queries
Intelligent Search uses Claude Agent with specialized graph tools to answer natural language questions about your knowledge graph. It combines semantic search, graph traversal, and reasoning to provide comprehensive answers with supporting evidence.
Intelligent Search is an AI-powered search feature that allows you to query your context graph using natural language. Unlike traditional keyword search, it:
Understands Intent: Interprets what you’re actually asking
Multi-Turn Reasoning: Can explore the graph across multiple steps
Tool Use: Leverages semantic search, graph queries, and traversal
Conversational: Supports follow-up questions in sessions
Evidence-Based: Returns both natural language answers and structured graph data
Intelligent Search is powered by Claude and uses an agentic approach with access to graph exploration tools. It’s ideal for complex queries that require reasoning across multiple nodes and relationships.
from kubiya import ControlPlaneClient# Initialize the clientclient = ControlPlaneClient(api_key="your-api-key")# Perform intelligent searchresult = client.graph.intelligent_search( keywords="Find all production databases with high availability")# Get natural language answerprint(result["answer"])# Output: "I found 3 production databases with high availability..."# Access structured resultsfor node in result["nodes"]: print(f"Database: {node['properties']['name']}")
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# Ask a questionresult = client.graph.intelligent_search( keywords="What EC2 instances are running in us-east-1?")print("Answer:", result["answer"])print(f"Found {len(result['nodes'])} nodes")print(f"Confidence: {result['confidence']}")
Example Response
Copy
Ask AI
{ "answer": "I found 5 EC2 instances running in the us-east-1 region...", "nodes": [ { "id": "i-1234567890abcdef0", "labels": ["EC2Instance", "AWS"], "properties": { "name": "prod-web-01", "region": "us-east-1", "instance_type": "t3.large", "state": "running" } } ], "relationships": [], "tool_calls": [ { "tool": "semantic_search", "query": "EC2 instances us-east-1", "results": 5 } ], "turns_used": 2, "confidence": "high", "suggestions": [ "Would you like to see the security groups for these instances?", "Should I check the CPU utilization?" ], "session_id": "session-abc123"}
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# Filter by integration and labelresult = client.graph.intelligent_search( keywords="Find all databases", integration="AWS", label_filter="RDS")print(f"Found {len(result['nodes'])} RDS databases in AWS")
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# Allow more turns for complex queriesresult = client.graph.intelligent_search( keywords="Trace the dependency chain from the frontend service to all databases", max_turns=10 # Allow deeper exploration)print(f"Agent used {result['turns_used']} turns to explore the graph")
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# Lower temperature for more focused answersresult = client.graph.intelligent_search( keywords="List all production services", temperature=0.3 # More deterministic (0.0-2.0))# Higher temperature for more creative explorationresult = client.graph.intelligent_search( keywords="What patterns do you see in our infrastructure?", temperature=1.2 # More creative)
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# Initial questionresult1 = client.graph.intelligent_search( keywords="What Kubernetes clusters do we have?")session_id = result1["session_id"]print("Initial answer:", result1["answer"])# Follow-up question (same session)result2 = client.graph.intelligent_search( keywords="How many pods are running in each cluster?", session_id=session_id)print("Follow-up answer:", result2["answer"])# Clean up session when doneclient.graph.delete_search_session(session_id)
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# List all active sessionssessions = client.graph.list_search_sessions()print(f"Active sessions: {len(sessions)}")# Get session detailssession_info = client.graph.get_search_session(session_id="session-abc123")print(f"Turns used: {session_info['turns_used']}/{session_info['max_turns']}")print(f"Status: {session_info['status']}")# Delete specific sessionclient.graph.delete_search_session(session_id="session-abc123")# List including expiredall_sessions = client.graph.list_search_sessions(include_expired=True)
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# Allow agent to use Cypher for complex queriesresult = client.graph.intelligent_search( keywords="Find all paths between the frontend and database services", enable_cypher_queries=True # Use with caution!)# Review what queries were executedfor tool_call in result["tool_calls"]: if tool_call["tool"] == "cypher_query": print(f"Executed: {tool_call['query']}")
Enabling Cypher queries gives the agent more power but should be used carefully in production environments. Consider performance and security implications.
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# Use only graph traversal (no vector search)result = client.graph.intelligent_search( keywords="Show me the organizational hierarchy", enable_semantic_search=False # Rely on graph structure only)
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")# Use specific LiteLLM modelresult = client.graph.intelligent_search( keywords="Analyze our infrastructure security posture", model="anthropic/claude-opus-4" # Use more powerful model)
from kubiya import ControlPlaneClientclient = ControlPlaneClient(api_key="your-api-key")session_id = Nonetry: result = client.graph.intelligent_search(keywords="query") session_id = result["session_id"] # Use session for follow-ups...finally: if session_id: client.graph.delete_search_session(session_id)
result = client.graph.intelligent_search(keywords="query")# Review what tools were usedprint(f"Tools used: {len(result['tool_calls'])}")for tool_call in result["tool_calls"]: print(f" - {tool_call['tool']}: {tool_call.get('results', 'N/A')} results")# Optimize based on tool usage