要約
OpenVikingはAIエージェント向けのオープンソース・コンテキストデータベースです。従来のフラットなベクター格納をファイルシステムパラダイムに置き換え、コンテキスト(記憶・リソース・スキル)をviking:// URI配下でL0(約100トークン)、L1(約2kトークン)、L2(フルコンテンツ)の3レイヤーで整理します。ベンチマークでは、従来RAGと比較して91%のトークンコスト削減、43%のタスク完了率向上を記録しています。
はじめに
あなたの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です。
全コンテキストを仮想ファイルシステムに統合し、記憶・リソース・スキルを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/
代表的な操作例
- ディレクトリナビゲーション:
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/")
Python SDKまたはHTTPサーバー経由で、あらゆるエージェントフレームワークと連携可能です。
主要機能2:L0/L1/L2階層コンテキストロード
大量コンテキストをプロンプト投入せず、3階層(L0:要約, L1:概要, L2:全文)で段階的ロードを自動実装。
| レイヤー | 名称 | ファイル名 | トークン制限 | 目的 |
|---|---|---|---|---|
| L0 | 要約 | .abstract.md |
約100 | 検索・フィルタ |
| L1 | 概要 | .overview.md |
約2,000 | 再ランキング・ナビゲーション |
| L2 | 詳細 | オリジナル | 無制限 | 全文オンデマンド |
実装フロー
- ドキュメント追加時にテキスト解析
- AGFSストレージにディレクトリ構築
- セマンティック処理を非同期でキューイング
- L0/L1要約を下位から順次生成
viking://resources/my_project/
├── .abstract.md
├── .overview.md
├── docs/
│ ├── .abstract.md
│ ├── .overview.md
│ ├── auth.md
トークン節約例
# 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")
ベンチマークで91%トークン削減、43%タスク完了率向上を達成。
主要機能3:ディレクトリ再帰検索
複雑なクエリには「ディレクトリ再帰検索戦略」を採用。意図分析→高スコアディレクトリ特定→サブディレクトリ再帰→コンテンツ集約の5ステップ。
検索プロセス例
1. 意図分析
2. 初期配置(高スコアディレクトリ発見)
3. ディレクトリ内探索
4. サブディレクトリ再帰
5. 結果集約とトレース保持
これによりチャンク単位でなく、文脈を持った情報取得が可能に。
主要機能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: 返却
どこで情報が取得・スキップされたか、なぜ失敗したかが一目瞭然です。
主要機能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()
コミット時に自動で記憶抽出・ディレクトリ更新・L0/L1生成を実施。
アーキテクチャ概要
- 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
Rust CLIも必要なら:
curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash
ステップ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"
}
}
ステップ3:サーバー起動
openviking-server
# またはバックグラウンド
nohup openviking-server > /data/log/openviking.log 2>&1 &
ステップ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")
ステップ5:検索・取得
ov find "authentication methods"
ov ls viking://resources/
ov tree viking://resources/docs -L 2
ov grep "OAuth" --uri viking://resources/docs/
ステップ6:VikingBot(オプション)
pip install "openviking[bot]"
openviking-server --with-bot
ov chat
パフォーマンスベンチマーク
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会話履歴・ドキュメント・ユーザー設定を一元管理できます。
ステップ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
ステップ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()
ステップ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/")
ステップ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"}
)
高度なテクニック・ベストプラクティス
実稼働Tips
-
頻繁にアクセスするコンテキストは事前ウォームアップ
ov add-resource https://docs.example.com --wait -
古いセッション自動クリーンアップ
await session.archive(max_age_days=7) -
インデックス健全性監視
ov debug stats
よくあるミス
- L2全文の無駄なロード → L0/L1でまず十分かを判断
- セッションコミット忘れ → 記憶抽出が実行されない
- 単一ディレクトリへの過剰集中 → トピック毎にサブディレクトリ化
- 検索トレース無視 → デバッグ時は必ずトレースを確認
パフォーマンス最適化
| シナリオ | 推奨事項 |
|---|---|
| クエリ多発 | 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"
}
}
制限事項と考慮点
- Python中心(他言語はHTTP統合)
- 外部モデル必須(組み込み推論なし)
- ファイルシステムパラダイムの独自性
- 開発初期段階(API変更の可能性あり)
利用に適したケース
- 長期会話エージェント
- 複合コンテキスト(ドキュメント+設定+ツール)
- トークン効率や観測性重視
従来RAG推奨ケース
- 単発Q&Aや既存RAGパイプラインで足りる場合
- 超高速検索要求がある場合
今後の展望
- マルチテナント対応
- 検索品質・メモリダッシュボード
- 各種エージェントFW向けプラグイン
- エッジ向け軽量モード
- MCP(Model Context Protocol)強化
- 公式ドキュメント
結論
OpenVikingは、AIコンテキスト管理の新しい標準を打ち立てます。ファイルシステム的に情報を整理し、断片化やトークン浪費、ブラックボックス検索を根本解決。エージェントの開発効率・性能・デバッグ性を飛躍的に向上させます。
主要ポイント
-
ファイルシステムパラダイムで全コンテキスト統一(
viking://URI配下) - L0/L1/L2段階ロードで91%トークン削減
- ディレクトリ再帰検索で高精度な情報取得
- 検索トレース可視化でデバッグ容易
- 自動セッション管理による継続的学習



Top comments (0)