DEV Community

Cover image for OpenVikingとは?
Akira
Akira

Posted on • Originally published at apidog.com

OpenVikingとは?

要約

OpenVikingはAIエージェント向けのオープンソース・コンテキストデータベースです。従来のフラットなベクター格納をファイルシステムパラダイムに置き換え、コンテキスト(記憶・リソース・スキル)をviking:// URI配下でL0(約100トークン)、L1(約2kトークン)、L2(フルコンテンツ)の3レイヤーで整理します。ベンチマークでは、従来RAGと比較して91%のトークンコスト削減、43%のタスク完了率向上を記録しています。

今すぐApidogを試す

はじめに

あなたのAIエージェントは、同じAPIエンドポイントを繰り返し尋ねたり、ステージング環境の好みを忘れたり、昨日どのテストが合格したか分からなくなったりしていませんか?

現状、多くのAIエージェント開発チームはRAGパイプライン、ベクターデータベース、カスタムメモリシステムを寄せ集めて使っています。その結果、コンテキストが断片化し、トークンコストが増大し、検索の失敗も目立ちます。

LoCoMo10データセットでのベンチマークでは、従来のRAGは2,400万〜5,100万トークン消費しながらもタスク完了率は35〜44%にとどまりました。

OpenVikingは異なる設計です。ByteDanceのチームが開発し、ベクター格納をファイルシステムパラダイム(L0/L1/L2階層、viking:// URI)に置き換え、トークン91%削減・完了率52%を達成します。

💡 ApidogユーザーはOpenVikingを統合することで、テスト実行全体で会話コンテキストを維持し、ユーザーの環境設定を記憶し、APIドキュメントもセマンティック検索できます。

このガイドでは、OpenVikingの断片化解消アプローチ、L0/L1/L2モデルの実装、15分でできるサーバーデプロイ手順を解説します。

エージェントのコンテキスト問題

AIエージェントは従来アプリにはなかった「コンテキスト管理問題」に直面します。

たとえばAPIテスト支援エージェントの場合、1週間で次の情報を一貫して追跡・利用する必要があります。

  • ユーザー設定(例:「ステージング環境」「Pythonよりcurl」)
  • プロジェクト情報(エンドポイント、認証、過去のテスト結果)
  • ツールパターン(失敗エンドポイント、一般的なスキーマエラー)
  • タスク履歴(テスト内容やバグ履歴)

従来のRAGではこれらをフラットなベクターデータベースに格納し、構造・階層なしの上位K類似フラグメントしか返せません。

主要な課題とOpenVikingの解決策

課題 従来のRAG OpenVikingのアプローチ
断片化されたコンテキスト 記憶・リソース・スキルが個別保存 viking://配下の統一ファイルシステム
急増する要求 長タスクで大量コンテキスト発生 L0/L1/L2階層ロードでトークン91%削減
劣悪な検索 フラットなベクター検索で全体像が欠如 意図分析+ディレクトリ再帰検索
観測不能 ブラックボックスな検索チェーン 検索トレースの可視化
限られた反復 ユーザー履歴のみ 6カテゴリの自動セッション管理

これにより「全てを保存し曖昧に検索」から「構造化して正確に検索」へ転換します。

OpenVikingとは?

OpenVikingは、ByteDance製のApache 2.0ライセンスなAIエージェント用オープンソース・コンテキストDBです。

OpenViking概要

全コンテキストを仮想ファイルシステムに統合し、記憶・リソース・スキルをviking://配下ディレクトリにマッピングします。

viking://
├── resources/              # 外部知識: ドキュメント、コード、Webページ
│   ├── my_project/
│   │   ├── docs/
│   │   │   ├── api/
│   │   │   └── tutorials/
│   │   └── src/
│   └── ...
├── user/                   # ユーザー固有: 設定、習慣
│   └── memories/
│       ├── preferences/
│       │   ├── writing_style
│       │   └── coding_habits
│       └── ...
└── agent/                  # エージェントの能力: スキル、タスク記憶
    ├── skills/
    │   ├── search_code
    │   ├── analyze_data
    │   └── ...
    ├── memories/
    └── instructions/
Enter fullscreen mode Exit fullscreen mode

代表的な操作例

  • ディレクトリナビゲーション: ls viking://resources/my_project/docs/
  • セマンティック検索: find "authentication methods"
  • 全文取得: read viking://resources/docs/auth.md
  • 要約取得: abstract viking://resources/docs/

主要機能1:ファイルシステム管理パラダイム

全てのコンテキストタイプを単一モデルに統合し、断片化を解決します。

3つのコンテキストタイプ

タイプ 目的 ライフサイクル 主導
リソース 外部知識(ドキュメント等) 長期・静的 ユーザー
記憶 エージェントの認知 長期・動的 エージェント
スキル 呼び出し可能な機能 長期・静的 エージェント
  • viking://resources/ … ドキュメントや製品マニュアル
  • viking://user/memories/ … ユーザー設定、イベント
  • viking://agent/skills/ … ツール定義やMCP

UnixライクAPI例

from openviking import OpenViking

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

# セマンティック検索
results = client.find("user authentication")

# ディレクトリ一覧
contents = client.ls("viking://resources/")

# 全文取得
doc = client.read("viking://resources/docs/auth.md")

# L0要約
abstract = client.abstract("viking://resources/docs/")

# L1概要
overview = client.overview("viking://resources/docs/")
Enter fullscreen mode Exit fullscreen mode

Python SDKまたはHTTPサーバー経由で、あらゆるエージェントフレームワークと連携可能です。

主要機能2:L0/L1/L2階層コンテキストロード

大量コンテキストをプロンプト投入せず、3階層(L0:要約, L1:概要, L2:全文)で段階的ロードを自動実装。

レイヤー 名称 ファイル名 トークン制限 目的
L0 要約 .abstract.md 約100 検索・フィルタ
L1 概要 .overview.md 約2,000 再ランキング・ナビゲーション
L2 詳細 オリジナル 無制限 全文オンデマンド

実装フロー

  1. ドキュメント追加時にテキスト解析
  2. AGFSストレージにディレクトリ構築
  3. セマンティック処理を非同期でキューイング
  4. L0/L1要約を下位から順次生成
viking://resources/my_project/
├── .abstract.md
├── .overview.md
├── docs/
│   ├── .abstract.md
│   ├── .overview.md
│   ├── auth.md
Enter fullscreen mode Exit fullscreen mode

トークン節約例

# RAG: 全文ロード → 5万トークン
full_docs = retrieve_all("authentication")

# OpenViking: L1から開始、必要に応じてL2
overview = client.overview("viking://resources/docs/auth/")
if needs_more_detail(overview):
    content = client.read("viking://resources/docs/auth/oauth.md")
Enter fullscreen mode Exit fullscreen mode

ベンチマークで91%トークン削減、43%タスク完了率向上を達成。

主要機能3:ディレクトリ再帰検索

複雑なクエリには「ディレクトリ再帰検索戦略」を採用。意図分析→高スコアディレクトリ特定→サブディレクトリ再帰→コンテンツ集約の5ステップ。

検索プロセス例

1. 意図分析
2. 初期配置(高スコアディレクトリ発見)
3. ディレクトリ内探索
4. サブディレクトリ再帰
5. 結果集約とトレース保持
Enter fullscreen mode Exit fullscreen mode

これによりチャンク単位でなく、文脈を持った情報取得が可能に。

主要機能4:可視化された検索トレース

検索のパスや選択理由がトレースとして可視化されます。

├── viking://resources/docs/
│   ├── [0.45] .abstract.md: スキップ
│   └── [0.89] auth/: 選択
│       ├── [0.92] oauth.md: 返却
│       ├── [0.34] jwt.md: スキップ
│       └── [0.78] providers/
│           └── [0.85] google.md: 返却
Enter fullscreen mode Exit fullscreen mode

どこで情報が取得・スキップされたか、なぜ失敗したかが一目瞭然です。

主要機能5:自動セッション管理

セッション終了時に記憶を自動抽出し、各カテゴリに保存。エージェントが継続的に賢くなります。

6メモリカテゴリ

カテゴリ 所有者 場所 説明 更新
プロフィール ユーザー user/memories/.overview.md 基本情報 追加可
設定 ユーザー user/memories/preferences/ 設定 追加可
エンティティ ユーザー user/memories/entities/ 人・組織等 追加可
イベント ユーザー user/memories/events/ 決定・履歴 追加不可
ケース エージェント agent/memories/cases/ 学習済みケース 追加不可
パターン エージェント agent/memories/patterns/ 学習済みパターン 追加不可

実装例

session = client.session()
await session.add_message("user", [{"type": "text", "text": "I prefer dark mode"}])
await session.commit()
Enter fullscreen mode Exit fullscreen mode

コミット時に自動で記憶抽出・ディレクトリ更新・L0/L1生成を実施。

アーキテクチャ概要

OpenVikingアーキテクチャ

  • AGFS(独自FS):L0/L1/L2など全コンテンツ格納
  • ベクターインデックス:URI・エンベディング・メタデータのみ → 冗長なテキスト重複を避け、すべてのロードはAGFSから一元化されます。

クイックスタート:OpenVikingサーバーデプロイ

前提条件

  • Python 3.10+
  • Go 1.22+(AGFS用)
  • C++コンパイラ(GCC 9+ or Clang 11+)
  • Linux/macOS/Windows

ステップ1:OpenVikingインストール

pip install openviking --upgrade --force-reinstall
Enter fullscreen mode Exit fullscreen mode

Rust CLIも必要なら:

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

ステップ2:モデル設定

~/.openviking/ov.confを作成。OpenAIやVolcengineなどサポート。

{
  "storage": {"workspace": "/home/your-name/openviking_workspace"},
  "embedding": {
    "dense": {
      "api_base": "https://api.openai.com/v1",
      "api_key": "your-openai-api-key",
      "provider": "openai",
      "dimension": 3072,
      "model": "text-embedding-3-large"
    }
  },
  "vlm": {
    "api_base": "https://api.openai.com/v1",
    "api_key": "your-openai-api-key",
    "provider": "openai",
    "model": "gpt-4o"
  }
}
Enter fullscreen mode Exit fullscreen mode

ステップ3:サーバー起動

openviking-server
# またはバックグラウンド
nohup openviking-server > /data/log/openviking.log 2>&1 &
Enter fullscreen mode Exit fullscreen mode

ステップ4:リソース追加

ov add-resource https://docs.example.com/api-guide.pdf

# Python SDKでも
from openviking import OpenViking
client = OpenViking(path="./data")
client.add_resource("https://docs.example.com/api-guide.pdf")
Enter fullscreen mode Exit fullscreen mode

ステップ5:検索・取得

ov find "authentication methods"
ov ls viking://resources/
ov tree viking://resources/docs -L 2
ov grep "OAuth" --uri viking://resources/docs/
Enter fullscreen mode Exit fullscreen mode

ステップ6:VikingBot(オプション)

pip install "openviking[bot]"
openviking-server --with-bot
ov chat
Enter fullscreen mode Exit fullscreen mode

パフォーマンスベンチマーク

LoCoMo10データセットを用いて、以下の比較結果を得ています。

システム 完了率 入力トークン
OpenClaw(ネイティブメモリ) 35.65% 24.6M
OpenClaw + LanceDB 44.55% 51.6M
OpenClaw + OpenViking 52.08% 4.3M

→ 43%改善・91%トークン削減。

OpenVikingとApidogの統合

ApidogユーザーはOpenVikingを組み合わせることで、API会話履歴・ドキュメント・ユーザー設定を一元管理できます。

Apidog連携

ステップ1:OpenVikingサーバーセットアップ

上記クイックスタートの手順通りVLM・エンベディングモデルを指定してデプロイ。

ステップ2:Apidog APIドキュメント追加

ov add-resource https://docs.apidog.com/overview?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation
ov add-resource https://docs.apidog.com/api-testing?utm_source=dev.to&utm_medium=wanda&utm_content=n8n-post-automation
Enter fullscreen mode Exit fullscreen mode

ステップ3:ユーザー設定保存

from openviking import OpenViking

client = OpenViking(path="./apidog-agent-data")
session = client.session()
await session.add_message("user", [{
    "type": "text",
    "text": "Always use the staging environment for API tests"
}])
await session.commit()
Enter fullscreen mode Exit fullscreen mode

ステップ4:テスト時にコンテキストクエリ

results = client.find("authentication endpoints")
for ctx in results.resources:
    print(f"Found: {ctx.uri}")

prefs = client.find("staging environment preference", target_uri="viking://user/memories/")
Enter fullscreen mode Exit fullscreen mode

ステップ5:エージェントフレームワーク連携

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

# HTTP API例
import httpx
response = httpx.post(
    "http://localhost:1933/api/v1/search/find",
    json={"query": "authentication endpoints"},
    headers={"X-API-Key": "your-api-key"}
)
Enter fullscreen mode Exit fullscreen mode

高度なテクニック・ベストプラクティス

実稼働Tips

  1. 頻繁にアクセスするコンテキストは事前ウォームアップ

    ov add-resource https://docs.example.com --wait
    
  2. 古いセッション自動クリーンアップ

    await session.archive(max_age_days=7)
    
  3. インデックス健全性監視

    ov debug stats
    

よくあるミス

  1. L2全文の無駄なロード → L0/L1でまず十分かを判断
  2. セッションコミット忘れ → 記憶抽出が実行されない
  3. 単一ディレクトリへの過剰集中 → トピック毎にサブディレクトリ化
  4. 検索トレース無視 → デバッグ時は必ずトレースを確認

パフォーマンス最適化

シナリオ 推奨事項
クエリ多発 HTTPサーバー+接続プール
大規模ドキュメント チャンク分割後にインポート
低レイテンシー 頻繁利用コンテンツのL0/L1事前生成
マルチテナント テナント毎に個別ワークスペース

セキュリティ

  • APIキーは環境変数/シークレットマネージャーで管理
  • HTTPサーバーは必ずHTTPS化
  • レート制限必須、開発・本番でAPIキー分離

実使用事例

1. AIコーディングアシスタント

  • プロジェクト構造ナビゲーション
  • ユーザーのコーディング設定記憶
  • APIドキュメント自動検索 → 忘却減少67%、トークンコスト43%削減

2. カスタマーサポートエージェント

  • 製品ドキュメント・顧客履歴・サポートプレイブック一元管理 → 初回解決率52%→71%向上

3. リサーチアシスタント

  • 論文・ノートをトピック別整理
  • 主要発見の自動メモリ化 → 関連論文を3倍速で検索可能に

代替案比較

OpenViking vs. 従来ベクターデータベース

側面 従来RAG(Pinecone等) OpenViking
ストレージモデル フラットベクターチャンク 階層型ファイルシステム
検索 Top-K類似性 ディレクトリ再帰+意図分析
観測性 ブラックボックス 検索トレースの可視化
トークン効率 全ロードまたは切り捨て L0/L1/L2プログレッシブロード
メモリ反復 手動またはなし 自動セッション管理
コンテキストタイプ ドキュメントのみ 記憶・リソース・スキルを統一
デバッグ 推測 ディレクトリトラバーサルログ

OpenViking vs. LangChainメモリ

側面 LangChainメモリ OpenViking
永続性 会話バッファのみ 完全なファイルシステム(L0/L1/L2)
スケーラビリティ ウィンドウ制限 階層ロードで制限なし
検索 線形検索 ディレクトリ再帰+セマンティック
メモリタイプ 単一バッファ 6カテゴリ(プロファイル等)

どちらを選ぶべきか

  • 従来ベクターDB: 100ms未満の高速検索や単純キーワード用途
  • OpenViking: 長期会話・複合コンテキスト・トークン最適化・観測/デバッグ重視

本番デプロイ

  • Standalone HTTPサービスとして稼働
  • 推奨: Volcengine ECS/Ubuntu 22.04+、AGFS用SSD、低遅延API接続

セキュリティと監視

  • APIキー管理は環境変数/シークレットで
  • 認証・HTTPS必須、レート制限も忘れずに
  • ロギングとメトリクスで各種監視(例:semantic queue深さ、ベクター検索レイテンシー)
{
  "log": {
    "level": "INFO",
    "output": "file",
    "path": "/var/log/openviking/server.log"
  }
}
Enter fullscreen mode Exit fullscreen mode

制限事項と考慮点

  • Python中心(他言語はHTTP統合)
  • 外部モデル必須(組み込み推論なし)
  • ファイルシステムパラダイムの独自性
  • 開発初期段階(API変更の可能性あり)

利用に適したケース

  • 長期会話エージェント
  • 複合コンテキスト(ドキュメント+設定+ツール)
  • トークン効率や観測性重視

従来RAG推奨ケース

  • 単発Q&Aや既存RAGパイプラインで足りる場合
  • 超高速検索要求がある場合

今後の展望

  • マルチテナント対応
  • 検索品質・メモリダッシュボード
  • 各種エージェントFW向けプラグイン
  • エッジ向け軽量モード
  • MCP(Model Context Protocol)強化
  • 公式ドキュメント

結論

OpenVikingは、AIコンテキスト管理の新しい標準を打ち立てます。ファイルシステム的に情報を整理し、断片化やトークン浪費、ブラックボックス検索を根本解決。エージェントの開発効率・性能・デバッグ性を飛躍的に向上させます。

主要ポイント

  • ファイルシステムパラダイムで全コンテキスト統一viking:// URI配下)
  • L0/L1/L2段階ロードで91%トークン削減
  • ディレクトリ再帰検索で高精度な情報取得
  • 検索トレース可視化でデバッグ容易
  • 自動セッション管理による継続的学習

Top comments (0)