docs/en/concepts/01-architecture.md
OpenViking is a context database designed for AI Agents, unifying all context types (Memory, Resource, Skill) into a directory structure with semantic retrieval and progressive content loading.
┌────────────────────────────────────────────────────────────────────────────┐
│ OpenViking System Architecture │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ Client │ │
│ │ (OpenViking)│ │
│ └──────┬──────┘ │
│ │ delegates │
│ ┌──────▼──────┐ │
│ │ Service │ │
│ │ Layer │ │
│ └──────┬──────┘ │
│ │ │
│ ┌─────────────────────────┼─────────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Retrieve │ │ Session │ │ Parse │ │
│ │ (Context │ │ (Session │ │ (Context │ │
│ │ Retrieval) │ │ Management)│ │ Extraction)│ │
│ │ search/find │ │ add/used │ │ Doc parsing │ │
│ │ Intent │ │ commit │ │ L0/L1/L2 │ │
│ │ Rerank │ │ commit │ │ Tree build │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ │ │ Memory extraction │ │
│ │ ▼ │ │
│ │ ┌─────────────┐ │ │
│ │ │ Compressor │ │ │
│ │ │ Compress/ │ │ │
│ │ │ Deduplicate │ │ │
│ │ └──────┬──────┘ │ │
│ │ │ │ │
│ └────────────────────────┼────────────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Storage Layer │ │
│ │ AGFS (File Content) + Vector Index │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└────────────────────────────────────────────────────────────────────────────┘
| Module | Responsibility | Key Capabilities |
|---|---|---|
| Client | Unified entry | Provides all operation interfaces, delegates to Service layer |
| Service | Business logic | FSService, SearchService, SessionService, ResourceService, RelationService, PackService, DebugService |
| Retrieve | Context retrieval | Intent analysis (IntentAnalyzer), hierarchical retrieval (HierarchicalRetriever), Rerank |
| Session | Session management | Message recording, usage tracking, session compression, memory commit |
| Parse | Context extraction | Document parsing (PDF/MD/HTML), tree building (TreeBuilder), async semantic generation |
| Compressor | Memory compression | 8-category memory extraction, LLM deduplication decisions |
| Storage | Storage layer | VikingFS virtual filesystem, vector index, AGFS integration |
The Service layer decouples business logic from the transport layer, enabling reuse across HTTP Server and CLI:
| Service | Responsibility | Key Methods |
|---|---|---|
| FSService | File system operations | ls, mkdir, rm, mv, tree, stat, read, abstract, overview, grep, glob |
| SearchService | Semantic search | search, find |
| SessionService | Session management | session, sessions, commit, delete |
| ResourceService | Resource import | add_resource, add_skill, wait_processed |
| RelationService | Relation management | relations, link, unlink |
| PackService | Import/export | export_ovpack, import_ovpack |
| DebugService | Debug service | observer (ObserverService) |
OpenViking uses a dual-layer storage architecture separating content from index (see Storage Architecture):
| Layer | Responsibility | Content |
|---|---|---|
| AGFS | Content storage | L0/L1/L2 full content, multimedia files, relations |
| Vector Index | Index storage | URIs, vectors, metadata (no file content) |
Input → Parser → TreeBuilder → AGFS → SemanticQueue → Vector Index
Query → Intent Analysis → Hierarchical Retrieval → Rerank → Results
Messages → Compress → Archive → Memory Extraction → Storage
For local development and single-process applications:
client = OpenViking(path="./data")
For team sharing, production deployment, and cross-language integration:
# Python SDK connects to OpenViking Server
client = SyncHTTPClient(url="http://localhost:1933", api_key="xxx")
# Or use curl / any HTTP client
curl http://localhost:1933/api/v1/search/find \
-H "X-API-Key: xxx" \
-d '{"query": "how to use openviking"}'
openviking-server)| Principle | Description |
|---|---|
| Pure Storage Layer | Storage only handles AGFS operations and basic vector search; Rerank is in retrieval layer |
| Three-Layer Information | L0/L1/L2 enables progressive detail loading, saving token consumption |
| Two-Stage Retrieval | Vector search recalls candidates + Rerank improves accuracy |
| Single Data Source | All content read from AGFS; vector index only stores references |
/metrics usage and key metric explanations