Qu'est-ce qu'OpenViking ?

Ashley Innocent

Ashley Innocent

19 March 2026

Qu'est-ce qu'OpenViking ?

En bref

OpenViking est une base de données de contexte open-source pour les agents IA qui remplace le stockage vectoriel plat par un paradigme de système de fichiers. Il organise le contexte (mémoires, ressources, compétences) sous des URI viking:// avec trois couches : L0 (~100 tokens), L1 (~2k tokens), L2 (contenu complet). Les benchmarks montrent une réduction de 91 % du coût des tokens et une amélioration de 43 % de l'achèvement des tâches par rapport au RAG traditionnel.

Introduction

Votre agent IA oublie constamment des choses. Il a demandé le même point de terminaison API deux fois. Il a ignoré votre préférence d'environnement de staging. Il a perdu la trace des tests réussis hier.

C'est la réalité de la construction d'agents aujourd'hui. La plupart des équipes bricolent des pipelines RAG, des bases de données vectorielles et des systèmes de mémoire personnalisés. Le résultat : un contexte fragmenté, des coûts de tokens qui explosent et une récupération qui échoue silencieusement.

Les données le confirment. Lors de tests de référence utilisant le jeu de données LoCoMo10, les systèmes RAG traditionnels n'ont atteint que des taux d'achèvement des tâches de 35 à 44 % tout en consommant 24 à 51 millions de tokens d'entrée.

OpenViking adopte une approche différente. Créé par l'équipe OpenViking de ByteDance, il remplace le stockage vectoriel plat par un paradigme de système de fichiers. Tout le contexte réside sous des URI viking:// avec un chargement hiérarchique L0/L1/L2. Le résultat : un achèvement des tâches de 52 % avec 91 % de tokens en moins.

💡
Les utilisateurs d'Apidog qui développent des agents de test d'API peuvent intégrer OpenViking pour maintenir le contexte de conversation entre les exécutions de tests, mémoriser les préférences d'environnement de l'utilisateur et stocker la documentation API pour une récupération sémantique.
bouton

Dans ce guide, vous apprendrez comment OpenViking résout la fragmentation du contexte, verrez le modèle L0/L1/L2 en action et déploierez votre premier serveur en 15 minutes.

Le problème du contexte des agents

Les agents IA sont confrontés à des défis de contexte que les applications traditionnelles n'ont jamais rencontrés.

Considérez un agent aidant les développeurs à tester des API. Sur une semaine, il doit suivre :

Le RAG traditionnel stocke cela sous forme de fragments plats dans une base de données vectorielle. Interrogez-le, et vous obtenez les K fragments les plus similaires sans structure, sans hiérarchie et sans visibilité sur ce qui a été manqué.

Cinq défis fondamentaux

OpenViking identifie cinq problèmes fondamentaux dans la gestion du contexte des agents :

Défi RAG traditionnel Solution OpenViking
Contexte fragmenté Mémoires, ressources, compétences stockées séparément Paradigma de système de fichiers unifié sous viking://
Demande croissante Les tâches longues génèrent un contexte massif Le chargement hiérarchique L0/L1/L2 réduit les tokens de 91 %
Mauvaise récupération La recherche vectorielle plate manque de vue globale Récupération récursive de répertoire avec analyse d'intention
Inobservable Chaînes de récupération boîte noire Trajectoires de recherche visualisées pour le débogage
Itération limitée Seul l'historique d'interaction de l'utilisateur Gestion automatique de session avec 6 catégories de mémoire

Cela représente un passage de « tout stocker, récupérer vaguement » à « tout structurer, récupérer précisément ».

Qu'est-ce qu'OpenViking ?

OpenViking est une base de données de contexte open-source pour les agents IA, créée par l'équipe OpenViking de ByteDance sous licence Apache 2.0.

Diagramme d'architecture OpenViking

Il unifie tout le contexte en un système de fichiers virtuel. Les mémoires, ressources et compétences sont mappées à des répertoires sous viking://, chacun avec un URI unique.

viking://
├── resources/              # Connaissances externes : docs, code, pages web
│   ├── my_project/
│   │   ├── docs/
│   │   │   ├── api/
│   │   │   └── tutorials/
│   │   └── src/
│   └── ...
├── user/                   # Spécifique à l'utilisateur : préférences, habitudes
│   └── memories/
│       ├── preferences/
│       │   ├── writing_style
│       │   └── coding_habits
│       └── ...
└── agent/                  # Capacités de l'agent : compétences, mémoires de tâches
    ├── skills/
    │   ├── search_code
    │   ├── analyze_data
    │   └── ...
    ├── memories/
    └── instructions/

Les agents acquièrent des capacités de manipulation directe du contexte :

Pensez-y comme la différence entre la recherche sur tout votre disque dur et le fait de savoir exactement quel répertoire contient le fichier.

Fonctionnalité clé 1 : Paradigme de gestion du système de fichiers

Le paradigme du système de fichiers résout la fragmentation du contexte en unifiant tous les types de contexte sous un modèle unique.

Trois types de contexte

Type Objectif Cycle de vie Initiative
Ressource Connaissances externes (docs, code, FAQ) Long terme, statique L'utilisateur ajoute
Mémoire Cognition de l'agent (préférences, expériences) Long terme, dynamique L'agent extrait
Compétence Capacités appelables (outils, MCP) Long terme, statique L'agent invoque

Chaque type réside dans son propre répertoire :

API de type Unix

OpenViking fournit des opérations de ligne de commande familières :

from openviking import OpenViking

client = OpenViking(path="./data")

# Recherche sémantique à travers tous les types de contexte
results = client.find("user authentication")

# Lister le contenu du répertoire
contents = client.ls("viking://resources/")

# Lire le contenu complet
doc = client.read("viking://resources/docs/auth.md")

# Obtenir un résumé rapide (couche L0)
abstract = client.abstract("viking://resources/docs/")

# Obtenir un aperçu détaillé (couche L1)
overview = client.overview("viking://resources/docs/")

L'API fonctionne via le SDK Python ou un serveur HTTP, compatible avec tout framework d'agent.

Fonctionnalité clé 2 : Chargement de contexte hiérarchique L0/L1/L2

Empiler un contexte massif dans les prompts est coûteux et sujet aux erreurs. OpenViking traite automatiquement tout le contexte en trois couches hiérarchiques :

Couche Nom Fichier Limite de tokens Objectif
L0 Résumé .abstract.md ~100 tokens Recherche vectorielle, filtrage rapide
L1 Aperçu .overview.md ~2k tokens Reclassement, navigation de contenu
L2 Détail Fichiers originaux Illimité Contenu complet, chargement à la demande

Comment ça marche

Lorsque vous ajoutez une ressource (comme un fichier de documentation PDF), OpenViking :

  1. Analyse le document en texte (pas encore d'appels LLM)
  2. Construit une structure arborescente de répertoires dans le stockage AGFS
  3. Met en file d'attente le traitement sémantique de manière asynchrone
  4. Génère des résumés L0 et des aperçus L1 de bas en haut

Le résultat est une structure hiérarchique :

viking://resources/my_project/
├── .abstract.md               # L0 : "Documentation API couvrant l'authentification, les points de terminaison, les limites de débit"
├── .overview.md               # L1 : Résumé détaillé avec navigation par section
├── docs/
│   ├── .abstract.md          # Chaque répertoire a L0/L1
│   ├── .overview.md
│   ├── auth.md               # L2 : Contenu complet
│   ├── endpoints.md
│   └── rate-limits.md
└── src/
    └── ...

Impact sur le budget de tokens

Cette hiérarchie permet des économies significatives :

# RAG traditionnel : Charger tout le contenu
full_docs = retrieve_all("authentication")  # 50k tokens

# OpenViking : Commencer avec L1, charger L2 uniquement si nécessaire
overview = client.overview("viking://resources/docs/auth/")  # 2k tokens

if needs_more_detail(overview):
    content = client.read("viking://resources/docs/auth/oauth.md")  # Charger un L2 spécifique

Lors des tests de référence, cette approche a réduit les coûts de tokens d'entrée de 91 % par rapport au RAG traditionnel tout en améliorant les taux d'achèvement des tâches de 43 %.

Fonctionnalité clé 3 : Récupération récursive de répertoire

La recherche vectorielle simple a du mal avec les requêtes complexes. OpenViking met en œuvre une stratégie de récupération récursive de répertoire :

Le processus en cinq étapes

1. Intent Analysis
   ↓
2. Initial Positioning (find high-score directories)
   ↓
3. Refined Exploration (search within directories)
   ↓
4. Recursive Descent (drill into subdirectories)
   ↓
5. Result Aggregation (return ranked contexts)

Étape 1 : Analyse de l'intention

La requête « comment authentifier les utilisateurs ? » est analysée pour identifier :

Étape 2 : Positionnement initial

La recherche vectorielle localise rapidement les répertoires à score élevé :

Étape 3 : Exploration raffinée

Dans le répertoire supérieur, une recherche secondaire trouve des fichiers spécifiques :

Étape 4 : Descente récursive

Si des sous-répertoires existent (comme auth/providers/), le processus se répète de manière récursive.

Étape 5 : Agrégation des résultats

Les résultats finaux sont agrégés et classés par pertinence, avec les traces de récupération conservées.

Cette stratégie « verrouiller le répertoire d'abord, puis explorer le contenu » améliore la précision de la récupération en comprenant le contexte complet de l'information, et non pas seulement des fragments isolés.

Fonctionnalité clé 4 : Traces de récupération visualisées

Le RAG traditionnel est une boîte noire. Lorsque la récupération échoue, vous ne pouvez pas savoir s'il s'agit d'un problème de similarité vectorielle, d'un problème de découpage ou de données manquantes.

La structure de système de fichiers d'OpenViking rend la récupération observable :

Trace de récupération pour la requête : "Actualisation du token OAuth"

├── viking://resources/docs/
│   ├── [SCORE: 0.45] .abstract.md : ignoré (faible pertinence)
│   └── [SCORE: 0.89] auth/ : sélectionné (haute pertinence)
│       ├── [SCORE: 0.92] oauth.md : RENVOYÉ
│       ├── [SCORE: 0.34] jwt.md : ignoré
│       └── [SCORE: 0.78] providers/
│           └── [SCORE: 0.85] google.md : RENVOYÉ

Cette trace montre :

Pour le débogage, c'est inestimable. Vous pouvez voir si l'agent a manqué de contexte parce qu'il était dans le mauvais répertoire, avait un résumé L0 insuffisant, ou est tombé en dessous du seuil de score.

Fonctionnalité clé 5 : Gestion automatique des sessions

OpenViking dispose d'une boucle d'auto-itération de la mémoire intégrée. À la fin de chaque session, le système peut extraire des mémoires et mettre à jour automatiquement les connaissances de l'agent.

Six catégories de mémoire

Catégorie Propriétaire Emplacement Description Stratégie de mise à jour
profil utilisateur user/memories/.overview.md Informations utilisateur de base Modifiable par ajout
préférences utilisateur user/memories/preferences/ Préférences par sujet Modifiable par ajout
entités utilisateur user/memories/entities/ Personnes, projets, organisations Modifiable par ajout
événements utilisateur user/memories/events/ Décisions, jalons Pas de mise à jour
cas agent agent/memories/cases/ Cas appris Pas de mise à jour
modèles agent agent/memories/patterns/ Modèles appris Pas de mise à jour

Comment fonctionne l'extraction de mémoire

# Démarrer une session
session = client.session()

# Ajouter des messages (tours de conversation)
await session.add_message("user", [{"type": "text", "text": "Je préfère le mode sombre dans l'interface utilisateur"}])
await session.add_message("assistant", [{"type": "text", "text": "Bien compris. J'utiliserai le mode sombre pour toutes les captures d'écran futures."}])

# Enregistrer l'utilisation de l'outil
await session.add_usage({
    "tool": "screenshot",
    "parameters": {"theme": "dark"},
    "result": "success"
})

# Valider la session : déclenche l'extraction de mémoire
await session.commit()

Une fois validé, OpenViking :

  1. Compresse la session (garde les N tours récents, archive les plus anciens)
  2. Extrait les mémoires en utilisant l'analyse LLM
  3. Met à jour les répertoires de mémoire appropriés
  4. Génère L0/L1 pour le nouveau contenu de mémoire

Cela rend les agents plus intelligents à l'usage : ils apprennent les préférences de l'utilisateur, accumulent de l'expérience de tâche et améliorent la prise de décision au fil du temps.

Vue d'ensemble de l'architecture

L'architecture système d'OpenViking sépare les préoccupations en plusieurs couches :

Diagramme d'architecture système OpenViking

Stockage double couche

OpenViking sépare le contenu de l'index :

Couche Technologie Stocke
AGFS Système de fichiers personnalisé Contenu L0/L1/L2, fichiers multimédias, relations
Index vectoriel Base de données vectorielle URI, embeddings, métadonnées (pas de contenu de fichier)

Cette séparation garantit :

Démarrage rapide : Déployez votre premier serveur OpenViking

Prérequis

Étape 1 : Installer OpenViking

pip install openviking --upgrade --force-reinstall

Installez optionnellement l'interface CLI Rust pour l'accès au terminal :

curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash

Étape 2 : Configurer les modèles

OpenViking requiert deux capacités de modèle :

Créez ~/.openviking/ov.conf :

{
  "storage": {
    "workspace": "/home/your-name/openviking_workspace"
  },
  "log": {
    "level": "INFO",
    "output": "stdout"
  },
  "embedding": {
    "dense": {
      "api_base": "https://api.openai.com/v1",
      "api_key": "your-openai-api-key",
      "provider": "openai",
      "dimension": 3072,
      "model": "text-embedding-3-large"
    },
    "max_concurrent": 10
  },
  "vlm": {
    "api_base": "https://api.openai.com/v1",
    "api_key": "your-openai-api-key",
    "provider": "openai",
    "model": "gpt-4o",
    "max_concurrent": 100
  }
}

Fournisseurs supportés :

Fournisseur Modèles d'embedding Modèles VLM
volcengine doubao-embedding-vision doubao-seed-2.0-pro
openai text-embedding-3-large gpt-4o, gpt-4-vision
litellm Via proxy LiteLLM Claude, Gemini, DeepSeek, Qwen, Ollama, vLLM

Le support LiteLLM signifie que vous pouvez utiliser des modèles Anthropic, Google, Ollama locaux, ou tout point de terminaison compatible OpenAI.

Étape 3 : Démarrer le serveur

openviking-server

Ou exécuter en arrière-plan :

nohup openviking-server > /data/log/openviking.log 2>&1 &

Étape 4 : Ajouter votre première ressource

# Utilisation de l'interface CLI Rust
ov add-resource https://docs.example.com/api-guide.pdf

# Ou en utilisant le SDK Python
from openviking import OpenViking

client = OpenViking(path="./data")
client.add_resource("https://docs.example.com/api-guide.pdf")

Étape 5 : Rechercher et récupérer

# Attendre le traitement sémantique, puis rechercher
ov find "authentication methods"

# Lister le contenu du répertoire
ov ls viking://resources/

# Afficher l'arborescence du répertoire
ov tree viking://resources/docs -L 2

# Rechercher du contenu spécifique
ov grep "OAuth" --uri viking://resources/docs/

Étape 6 : Activer VikingBot (facultatif)

VikingBot est un framework d'agent IA construit sur OpenViking :

pip install "openviking[bot]"

# Démarrer le serveur avec le bot activé
openviking-server --with-bot

# Dans un autre terminal, démarrer le chat interactif
ov chat

Benchmarks de performance

OpenViking a été évalué par rapport au RAG traditionnel (LanceDB) et aux systèmes de mémoire native en utilisant le jeu de données LoCoMo10 (1 540 cas de dialogue à longue portée).

Taux d'achèvement des tâches

Système Taux d'achèvement Tokens d'entrée
OpenClaw (mémoire native) 35.65% 24.6M
OpenClaw + LanceDB 44.55% 51.6M
OpenClaw + OpenViking 52.08% 4.3M

Principales conclusions

Ces résultats proviennent de l'intégration d'OpenViking comme plugin avec OpenClaw, un assistant de codage IA open-source. Le jeu de données de test était basé sur des dialogues à longue portée où la rétention de la mémoire est cruciale.

Intégrer OpenViking avec Apidog

Les utilisateurs d'Apidog qui développent des agents IA pour les tests d'API peuvent exploiter OpenViking pour maintenir le contexte de conversation, stocker la documentation API et mémoriser les préférences de l'utilisateur d'une session à l'autre.

Tableau de bord Apidog affichant la documentation API et les cas de test

Étape 1 : Configurer le serveur OpenViking

Suivez le démarrage rapide ci-dessus pour déployer OpenViking avec vos modèles VLM et d'embedding préférés.

Étape 2 : Importer la documentation API Apidog

# Ajouter la documentation de votre projet Apidog comme ressource
ov add-resource https://docs.apidog.com/overview
ov add-resource https://docs.apidog.com/api-testing

Ceci importe la documentation Apidog dans viking://resources/ avec un traitement L0/L1/L2 automatique.

Étape 3 : Stocker les préférences de l'utilisateur

from openviking import OpenViking

client = OpenViking(path="./apidog-agent-data")
session = client.session()

# Enregistrer la préférence d'environnement par défaut de l'utilisateur
await session.add_message("user", [{
    "type": "text",
    "text": "Toujours utiliser l'environnement de staging pour les tests API"
}])
await session.commit()  # Extrait automatiquement la mémoire de préférence

Étape 4 : Interroger le contexte pendant les tests

# Trouver les points de terminaison API pertinents avant d'exécuter les tests
results = client.find("points de terminaison d'authentification")
for ctx in results.resources:
    print(f"Found: {ctx.uri}")

# Récupérer la préférence d'environnement de l'utilisateur
prefs = client.find("préférence d'environnement de staging", target_uri="viking://user/memories/")

Étape 5 : Connecter à votre framework d'agent

OpenViking expose à la fois un SDK Python et une API HTTP :

# SDK Python
from openviking import OpenViking
client = OpenViking(path="./data")

# Ou API HTTP
import httpx
response = httpx.post(
    "http://localhost:1933/api/v1/search/find",
    json={"query": "points de terminaison d'authentification"},
    headers={"X-API-Key": "votre-clé-api"}
)

Techniques avancées et bonnes pratiques

Conseils de pro pour les déploiements en production

1. Pré-charger le contexte fréquemment accédé

Chargez la documentation critique dans L0/L1 pendant les heures creuses pour réduire la latence pendant les opérations de l'agent.

# Déclencher le traitement sémantique immédiatement
ov add-resource https://docs.example.com --wait

2. Mettre en œuvre l'expiration du contexte

Configurez le nettoyage automatique des données de session obsolètes :

# Archiver les sessions de plus de 7 jours
await session.archive(max_age_days=7)

3. Surveiller la santé de l'index vectoriel

Suivez la taille de l'index et la latence des requêtes :

ov debug stats

Erreurs courantes à éviter

  1. Charger le contenu L2 prématurément : Toujours commencer par L0/L1 pour économiser des tokens
  2. Omettre les validations de session : L'extraction de mémoire ne se produit qu'à la validation
  3. Surcharger des répertoires uniques : Divisez les grandes ressources en sous-répertoires basés sur des sujets
  4. Ignorer les traces de récupération : Utilisez les traces visualisées pour déboguer les résultats médiocres

Optimisation des performances

Scénario Recommandation
Volume de requêtes élevé Exécuter OpenViking comme serveur HTTP avec un pool de connexions
Documents volumineux Diviser en chunks basés sur des sujets avant l'importation
Besoins de faible latence Pré-générer L0/L1 pour le contenu fréquemment accédé
Configuration multi-locataire Utiliser des espaces de travail séparés par locataire

Bonnes pratiques de sécurité

Cas d'utilisation réels

1. Assistants de codage IA

Une équipe de développement a intégré OpenViking à son assistant de codage interne. L'agent maintenant :

Résultat : Réduction de 67 % des comportements d'agent « oublieux », économie de 43 % sur le coût des tokens.

2. Agents de support client

Une entreprise SaaS a déployé OpenViking pour son chatbot de support :

Résultat : La résolution au premier contact s'est améliorée, passant de 52 % à 71 %.

3. Assistants de recherche

Un laboratoire de recherche utilise OpenViking pour organiser des articles et des notes :

Résultat : Les chercheurs trouvent des articles pertinents 3 fois plus rapidement grâce à la recherche sémantique.

Alternatives et comparaisons

OpenViking n'est pas la seule solution de gestion de contexte. Voici comment il se compare aux alternatives :

OpenViking vs. Bases de données vectorielles traditionnelles

Aspect RAG traditionnel (Pinecone, LanceDB) OpenViking
Modèle de stockage Fragments vectoriels plats Système de fichiers hiérarchique
Récupération Similarité Top-K Récursif de répertoire + analyse d'intention
Observabilité Boîte noire Traces de recherche visualisées
Efficacité des tokens Charger tout ou tronquer Chargement progressif L0/L1/L2
Itération de la mémoire Manuelle ou aucune Gestion automatique des sessions
Types de contexte Documents uniquement Ressources, mémoires, compétences unifiées
Débogage Conjectures Journaux de parcours de répertoire

OpenViking vs. Mémoire LangChain

Aspect Mémoire LangChain OpenViking
Persistance Tampon de conversation uniquement Système de fichiers complet avec L0/L1/L2
Scalabilité Limitée par la fenêtre de contexte Chargement hiérarchique, pas de limite stricte
Récupération Recherche linéaire Récursif de répertoire + sémantique
Types de mémoire Tampon unique 6 catégories (profil, préférences, événements, etc.)

Quand considérer les alternatives

Utilisez les bases de données vectorielles traditionnelles si :

Utilisez OpenViking si :

Comparaison avec le RAG traditionnel

Aspect RAG traditionnel OpenViking
Modèle de stockage Fragments vectoriels plats Système de fichiers hiérarchique
Récupération Similarité Top-K Récursif de répertoire + analyse d'intention
Observabilité Boîte noire Traces de recherche visualisées
Efficacité des tokens Charger tout ou tronquer Chargement progressif L0/L1/L2
Itération de la mémoire Manuelle ou aucune Gestion automatique des sessions
Types de contexte Documents uniquement Ressources, mémoires, compétences unifiées
Débogage Conjectures Journaux de parcours de répertoire

Déploiement en production

Pour les environnements de production, exécutez OpenViking comme un service HTTP autonome :

Infrastructure recommandée

Considérations de sécurité

Surveillance

OpenViking prend en charge la journalisation et les métriques :

{
  "log": {
    "level": "INFO",
    "output": "file",
    "path": "/var/log/openviking/server.log"
  }
}

Surveiller :

Limitations et considérations

Limitations actuelles

Quand utiliser OpenViking

Bonne adéquation :

Considérez les alternatives :

La feuille de route

OpenViking est en début de développement (version 0.1.x au début de 2025). La feuille de route inclut :

L'équipe derrière OpenViking recherche activement des contributeurs de la communauté. Le projet est open source sous licence Apache 2.0, avec une documentation disponible.

Conclusion

OpenViking représente un changement dans la manière dont les agents IA gèrent le contexte. En organisant l'information comme un système de fichiers au lieu de fragments plats, il résout la fragmentation, le gaspillage de tokens et la récupération en boîte noire qui affligent les systèmes RAG traditionnels.

Points clés à retenir

bouton

Pratiquez le Design-first d'API dans Apidog

Découvrez une manière plus simple de créer et utiliser des API