Structured Index Implementation Guide¶
Overview¶
This project implements two advanced document indexing approaches for handling large technical documentation:
- RAPTOR (Recursive Abstractive Processing for Tree-Organized Retrieval)
- GraphRAG (Graph-based Retrieval Augmented Generation)
Both approaches are designed to handle complex technical documentation like the Intel® 64 and IA-32 Architectures Software Developer's Manual (5000+ pages).
Architecture¶
RAPTOR Tree-Based Index¶
RAPTOR creates a hierarchical tree structure through recursive summarization:
Document
↓
[Chunks] → [Embeddings] → [Clusters]
↓ ↓ ↓
Level 0: Leaf nodes (original chunks with summaries)
↓
Level 1: Parent nodes (cluster summaries)
↓
Level 2: Higher-level summaries
↓
Root: Top-level abstraction
Key Features: - Multi-level abstraction hierarchy - Gaussian Mixture Model clustering - Recursive summarization at each level - Cross-level search capability
GraphRAG Knowledge Graph¶
GraphRAG builds a knowledge graph with entities and relationships:
Document
↓
[Chunks] → [Entity Extraction] → [Relationship Discovery]
↓ ↓ ↓
Entities ←→ Relationships → Knowledge Graph
↓
[Community Detection]
↓
Community Summaries
↓
Hierarchical Communities
Key Features: - LLM-based entity and relationship extraction - Community detection (Leiden/Louvain algorithms) - Hierarchical community summarization - Graph-based search across entities and communities
Implementation Details¶
Core Components¶
- Document Processor (
document_processor.py) - Handles multiple file formats (PDF, TXT, MD, HTML)
- Optimized for technical documentation
- Special handling for Intel manual format
-
Table extraction and formatting
-
RAPTOR Indexer (
raptor_indexer.py) - Text chunking with configurable overlap
- Embedding generation using sentence transformers
- GMM clustering for node grouping
- Recursive summarization using LLMs
-
Tree persistence and loading
-
GraphRAG Indexer (
graphrag_indexer.py) - Entity extraction focused on technical concepts
- Relationship discovery between entities
- NetworkX graph construction
- Community detection and summarization
-
Graph persistence and querying
-
API Service (
api_service.py) - RESTful API using FastAPI
- Asynchronous processing for large documents
- Support for file uploads
- Unified interface for both indexing approaches
- Real-time status and statistics
Processing Pipeline¶
Building Indexes¶
-
Document Processing
-
RAPTOR Indexing
-
GraphRAG Indexing
Querying¶
- RAPTOR Search
- Creates query embedding
- Searches across all tree levels
- Returns nodes with different abstraction levels
-
Includes level-specific summaries
-
GraphRAG Search
- Supports entity, community, or hybrid search
- Returns entities with relationships
- Includes community summaries
- Provides graph context
API Endpoints¶
| Endpoint | Method | Purpose |
|---|---|---|
/build |
POST | Build index from text/file |
/upload |
POST | Upload and index document |
/query |
POST | Query indexes |
/status |
GET | Check index status |
/statistics |
GET | Get index statistics |
/indexes |
DELETE | Clear indexes |
Integration with Agentic RAG¶
The structured indexes integrate seamlessly with the Agentic RAG system:
-
Configuration (
agentic-rag/config.py) -
Tool Integration (
agentic-rag/tools.py) _search_raptor(): Queries RAPTOR API_search_graphrag(): Queries GraphRAG API-
Unified search interface for agents
-
Agent Usage
Usage Examples¶
Command Line Interface¶
# Build both indexes
python main.py build intel_manual.pdf --type both
# Query RAPTOR
python main.py query "MOV instruction syntax" --type raptor
# Query GraphRAG
python main.py query "CPU register relationships" --type graphrag
# Start API server
python main.py serve
Python API¶
from config import get_raptor_config, get_graphrag_config
from raptor_indexer import RaptorIndexer
from graphrag_indexer import GraphRAGIndexer
# RAPTOR Example
raptor_config = get_raptor_config()
raptor = RaptorIndexer(raptor_config)
raptor.build_index(document_text)
results = raptor.search("SSE instructions", top_k=5)
# GraphRAG Example
graphrag_config = get_graphrag_config()
graphrag = GraphRAGIndexer(graphrag_config)
graphrag.build_knowledge_graph(document_text)
results = graphrag.search("instruction relationships", top_k=5)
HTTP API¶
# Build index
curl -X POST http://localhost:4242/build \
-H "Content-Type: application/json" \
-d '{"file_path": "intel_manual.pdf", "index_type": "both"}'
# Query
curl -X POST http://localhost:4242/query \
-H "Content-Type: application/json" \
-d '{"query": "vector instructions", "index_type": "hybrid"}'
Performance Considerations¶
RAPTOR¶
- Indexing Time: O(n log n) for clustering
- Memory: Stores embeddings for all nodes
- Query Time: Fast similarity search
- Best For: Hierarchical information, long documents
GraphRAG¶
- Indexing Time: O(n²) for relationship extraction
- Memory: Graph structure can be large
- Query Time: Graph traversal overhead
- Best For: Complex relationships, entity-centric queries
Configuration Options¶
RAPTOR Settings¶
chunk_size: 1000 # Words per chunk
chunk_overlap: 200 # Overlap between chunks
tree_depth: 3 # Maximum tree levels
summarization_length: 200 # Summary word count
GraphRAG Settings¶
chunk_size: 1200 # Words per chunk
max_knowledge_triples: 10 # Triples per chunk
community_detection: "leiden" # Algorithm choice
summarization_model: "gpt-5.6-luna"
Extending the System¶
Adding New Document Types¶
- Extend
DocumentProcessorwith new format handlers - Add format-specific extraction logic
- Update supported_formats dictionary
Custom Entity Extraction¶
- Modify prompt in
extract_entities_relationships() - Add domain-specific entity types
- Customize relationship types
Alternative Clustering¶
- Replace GMM in RAPTOR with other algorithms
- Implement custom similarity metrics
- Add dimensionality reduction options
Graph Algorithms¶
- Add new community detection algorithms
- Implement graph embedding techniques
- Add path-finding for relationship queries
Troubleshooting¶
Common Issues¶
- Out of Memory
- Reduce chunk_size
- Process documents in sections
-
Use smaller embedding models
-
Slow Indexing
- Use faster/smaller LLMs
- Reduce tree_depth or max_triples
-
Enable caching
-
Poor Search Results
- Adjust chunk_size and overlap
- Fine-tune clustering parameters
-
Improve entity extraction prompts
-
API Errors
- Check API keys in .env
- Monitor rate limits
- Verify index exists before querying
Future Enhancements¶
- Hybrid Indexing: Combine RAPTOR and GraphRAG
- Incremental Updates: Add documents without rebuilding
- Multi-modal Support: Handle images and tables
- Cross-lingual: Support multiple languages
- Active Learning: Improve extraction with feedback
- Distributed Processing: Scale to larger documents
- Query Optimization: Cache frequent queries
- Visualization: Interactive graph/tree exploration