AI時代において、データは豊富ですが、高品質なコンテキストは得がたいものです。AIエージェントを構築する際、開発者はしばしば以下の課題に直面します:
- 断片化されたコンテキスト: メモリはコードに、リソースはベクトルデータベースに、スキルは散在しており、統一的な管理が困難です。
- 急増するコンテキスト需要: エージェントの長時間タスクは実行のたびにコンテキストを生成します。単純な切り詰めや圧縮は情報の損失につながります。
- 検索効果の低さ: 従来のRAGはフラットなストレージを使用し、グローバルな視点が欠けているため、情報の全体的なコンテキストを理解することが困難です。
- 観察不能なコンテキスト: 従来のRAGの暗黙的な検索チェーンはブラックボックスのようで、エラー発生時のデバッグが困難です。
- 限定的なメモリの反復: 現在のメモリはユーザーとのやり取りの記録に過ぎず、エージェント関連のタスクメモリが不足しています。
OpenVikingは、AIエージェント専用に設計されたオープンソースのコンテキストデータベースです。
私たちは、エージェントのためのミニマリストなコンテキストインタラクションパラダイムを定義し、開発者がコンテキスト管理の煩雑さから完全に解放されることを目指しています。OpenVikingは従来のRAGの断片化されたベクトルストレージモデルを捨て、革新的に**「ファイルシステムパラダイム」**を採用して、エージェントに必要なメモリ、リソース、スキルの構造化された組織を統一します。
OpenVikingを使えば、開発者はローカルファイルを管理するようにエージェントの頭脳を構築できます:
- ファイルシステム管理パラダイム → 断片化を解決: ファイルシステムパラダイムに基づく、メモリ、リソース、スキルの統一的なコンテキスト管理。
- 階層型コンテキストローディング → トークン消費を削減: L0/L1/L2の3層構造、オンデマンドでロードし、コストを大幅に削減。
- ディレクトリ再帰検索 → 検索効果を向上: ネイティブのファイルシステム検索手法をサポートし、ディレクトリ位置決めとセマンティック検索を組み合わせて、再帰的で精密なコンテキスト取得を実現。
- 可視化された検索軌跡 → 観察可能なコンテキスト: ディレクトリ検索軌跡の可視化をサポートし、ユーザーが問題の根本原因を明確に観察し、検索ロジックの最適化を導くことを可能に。
- 自動セッション管理 → コンテキストの自己反復: 会話中のコンテンツ、リソース参照、ツール呼び出しなどを自動的に圧縮し、長期メモリを抽出して、使うほどエージェントを賢く。
OpenVikingを始める前に、環境が以下の要件を満たしていることを確認してください:
- Pythonバージョン: 3.10以上
- Goバージョン: 1.22以上(AGFSコンポーネントのビルドに必要)
- C++コンパイラ: GCC 9以上 または Clang 11以上(コア拡張のビルドに必要)
- オペレーティングシステム: Linux、macOS、Windows
- ネットワーク接続: 安定したネットワーク接続が必要(依存関係のダウンロードとモデルサービスへのアクセスのため)
pip install openviking --upgrade --force-reinstallcurl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bashまたはソースからビルド:
cargo install --git https://github.com/volcengine/OpenViking ov_cliOpenVikingには以下のモデル機能が必要です:
- VLMモデル: 画像とコンテンツの理解用
- Embeddingモデル: ベクトル化とセマンティック検索用
OpenVikingは3つのVLMプロバイダーをサポートしています:
| プロバイダー | 説明 | APIキーの取得 |
|---|---|---|
volcengine |
Volcengine Doubaoモデル | Volcengineコンソール |
openai |
OpenAI公式API | OpenAIプラットフォーム |
litellm |
様々なサードパーティモデルへの統合アクセス(Anthropic、DeepSeek、Gemini、vLLM、Ollamaなど) | LiteLLMプロバイダーを参照 |
💡 ヒント:
litellmは様々なモデルへの統合アクセスをサポートしています。modelフィールドはLiteLLMフォーマット仕様に従う必要があります- システムは一般的なモデル(例:
claude-*、deepseek-*、gemini-*、hosted_vllm/*、ollama/*など)を自動検出します。その他のモデルについては、LiteLLMフォーマットに従ったフルプレフィックスを使用してください
Volcengine(Doubao)
Volcengineはモデル名とエンドポイントIDの両方をサポートしています。簡便さのためモデル名の使用を推奨します:
{
"vlm": {
"provider": "volcengine",
"model": "doubao-seed-2-0-pro-260215",
"api_key": "your-api-key",
"api_base": "https://ark.cn-beijing.volces.com/api/v3"
}
}エンドポイントIDも使用できます(Volcengine ARKコンソールで確認):
{
"vlm": {
"provider": "volcengine",
"model": "ep-20241220174930-xxxxx",
"api_key": "your-api-key",
"api_base": "https://ark.cn-beijing.volces.com/api/v3"
}
}OpenAI
OpenAIの公式APIを使用:
{
"vlm": {
"provider": "openai",
"model": "gpt-4o",
"api_key": "your-api-key",
"api_base": "https://api.openai.com/v1"
}
}カスタムのOpenAI互換エンドポイントも使用できます:
{
"vlm": {
"provider": "openai",
"model": "gpt-4o",
"api_key": "your-api-key",
"api_base": "https://your-custom-endpoint.com/v1"
}
}LiteLLM(Anthropic、DeepSeek、Gemini、Qwen、vLLM、Ollamaなど)
LiteLLMは様々なモデルへの統合アクセスを提供します。modelフィールドはLiteLLMの命名規則に従う必要があります。ここではClaudeとQwenを例に説明します:
Anthropic:
{
"vlm": {
"provider": "litellm",
"model": "claude-3-5-sonnet-20240620",
"api_key": "your-anthropic-api-key"
}
}Qwen(DashScope):
{
"vlm": {
"provider": "litellm",
"model": "dashscope/qwen-turbo", // 詳細は https://docs.litellm.ai/docs/providers/dashscope を参照
"api_key": "your-dashscope-api-key",
"api_base": "https://dashscope.aliyuncs.com/compatible-mode/v1"
}
}💡 Qwenのヒント:
- 中国/北京リージョンの場合、
api_baseはhttps://dashscope.aliyuncs.com/compatible-mode/v1を使用- 国際リージョンの場合、
api_baseはhttps://dashscope-intl.aliyuncs.com/compatible-mode/v1を使用
一般的なモデルフォーマット:
| プロバイダー | モデル例 | 備考 |
|---|---|---|
| Anthropic | claude-3-5-sonnet-20240620 |
自動検出、ANTHROPIC_API_KEYを使用 |
| DeepSeek | deepseek-chat |
自動検出、DEEPSEEK_API_KEYを使用 |
| Gemini | gemini-pro |
自動検出、GEMINI_API_KEYを使用 |
| Qwen | dashscope/qwen-turbo |
リージョンに基づいてapi_baseを設定(上記参照) |
| OpenRouter | openrouter/openai/gpt-4o |
フルプレフィックスが必要 |
| vLLM | hosted_vllm/llama-3.1-8b |
api_baseをvLLMサーバーに設定 |
| Ollama | ollama/llama3.1 |
api_baseをOllamaサーバーに設定 |
ローカルモデル(vLLM / Ollama):
# Ollamaの起動
ollama serve// Ollama
{
"vlm": {
"provider": "litellm",
"model": "ollama/llama3.1",
"api_base": "http://localhost:11434"
}
}完全なモデルサポートについては、LiteLLMプロバイダードキュメントを参照してください。
設定ファイル ~/.openviking/ov.conf を作成します。コピー前にコメントを削除してください:
{
"storage": {
"workspace": "/home/your-name/openviking_workspace"
},
"log": {
"level": "INFO",
"output": "stdout" // ログ出力: "stdout" または "file"
},
"embedding": {
"dense": {
"api_base" : "<api-endpoint>", // APIエンドポイントアドレス
"api_key" : "<your-api-key>", // モデルサービスAPIキー
"provider" : "<provider-type>", // プロバイダータイプ: "volcengine" または "openai"(現在サポート済み)
"dimension": 1024, // ベクトル次元
"model" : "<model-name>" // Embeddingモデル名(例:doubao-embedding-vision-250615 または text-embedding-3-large)
},
"max_concurrent": 10 // 最大同時Embeddingリクエスト数(デフォルト: 10)
},
"vlm": {
"api_base" : "<api-endpoint>", // APIエンドポイントアドレス
"api_key" : "<your-api-key>", // モデルサービスAPIキー
"provider" : "<provider-type>", // プロバイダータイプ(volcengine、openai、deepseek、anthropicなど)
"model" : "<model-name>", // VLMモデル名(例:doubao-seed-2-0-pro-260215 または gpt-4-vision-preview)
"max_concurrent": 100 // セマンティック処理の最大同時LLM呼び出し数(デフォルト: 100)
}
}注意: Embeddingモデルについては、現在
volcengine(Doubao)、openai、jinaプロバイダーがサポートされています。VLMモデルについては、volcengine、openai、litellmの3つのプロバイダーをサポートしています。litellmプロバイダーは、Anthropic(Claude)、DeepSeek、Gemini、Moonshot、Zhipu、DashScope、MiniMax、vLLM、Ollamaなど様々なモデルをサポートしています。
👇 お使いのモデルサービスの設定例を展開して確認:
例1: Volcengine(Doubaoモデル)を使用
{
"storage": {
"workspace": "/home/your-name/openviking_workspace"
},
"log": {
"level": "INFO",
"output": "stdout" // ログ出力: "stdout" または "file"
},
"embedding": {
"dense": {
"api_base" : "https://ark.cn-beijing.volces.com/api/v3",
"api_key" : "your-volcengine-api-key",
"provider" : "volcengine",
"dimension": 1024,
"model" : "doubao-embedding-vision-250615"
},
"max_concurrent": 10
},
"vlm": {
"api_base" : "https://ark.cn-beijing.volces.com/api/v3",
"api_key" : "your-volcengine-api-key",
"provider" : "volcengine",
"model" : "doubao-seed-2-0-pro-260215",
"max_concurrent": 100
}
}例2: OpenAIモデルを使用
{
"storage": {
"workspace": "/home/your-name/openviking_workspace"
},
"log": {
"level": "INFO",
"output": "stdout" // ログ出力: "stdout" または "file"
},
"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-4-vision-preview",
"max_concurrent": 100
}
}設定ファイルを作成後、環境変数を設定してファイルを指定します(Linux/macOS):
export OPENVIKING_CONFIG_FILE=~/.openviking/ov.conf # デフォルトWindowsの場合、以下のいずれかを使用:
PowerShell:
$env:OPENVIKING_CONFIG_FILE = "$HOME/.openviking/ov.conf"コマンドプロンプト(cmd.exe):
set "OPENVIKING_CONFIG_FILE=%USERPROFILE%\.openviking\ov.conf"💡 ヒント: 設定ファイルは他の場所に配置することもできます。環境変数で正しいパスを指定するだけです。
👇 CLI/クライアントの設定例を展開して確認:
例:localhostサーバー接続用のovcli.conf
{
"url": "http://localhost:1933",
"timeout": 60.0,
"output": "table"
}設定ファイルを作成後、環境変数を設定してファイルを指定します(Linux/macOS):
export OPENVIKING_CLI_CONFIG_FILE=~/.openviking/ovcli.conf # デフォルトWindowsの場合、以下のいずれかを使用:
PowerShell:
$env:OPENVIKING_CLI_CONFIG_FILE = "$HOME/.openviking/ovcli.conf"コマンドプロンプト(cmd.exe):
set "OPENVIKING_CLI_CONFIG_FILE=%USERPROFILE%\.openviking\ovcli.conf"📝 前提条件: 前のステップで設定(ov.confとovcli.conf)が完了していることを確認してください。
それでは、完全な例を実行してOpenVikingのコア機能を体験しましょう。
openviking-serverまたはバックグラウンドで実行:
nohup openviking-server > /data/log/openviking.log 2>&1 &ov status
ov add-resource https://github.com/volcengine/OpenViking # --wait
ov ls viking://resources/
ov tree viking://resources/volcengine -L 2
# --waitを指定しない場合、セマンティック処理の完了を待つ
ov find "what is openviking"
ov grep "openviking" --uri viking://resources/volcengine/OpenViking/docs/zhおめでとうございます!OpenVikingの実行に成功しました 🎉
VikingBotは、OpenViking上に構築されたAIエージェントフレームワークです。始め方は以下の通りです:
# オプション1: PyPIからVikingBotをインストール(ほとんどのユーザーに推奨)
pip install "openviking[bot]"
# オプション2: ソースからVikingBotをインストール(開発用)
uv pip install -e ".[bot]"
# Bot有効でOpenVikingサーバーを起動
openviking-server --with-bot
# 別のターミナルでインタラクティブチャットを開始
ov chat本番環境では、AIエージェントに永続的で高性能なコンテキストサポートを提供するため、OpenVikingをスタンドアロンHTTPサービスとして実行することを推奨します。
🚀 クラウドにOpenVikingをデプロイ: 最適なストレージパフォーマンスとデータセキュリティを確保するため、veLinuxオペレーティングシステムを使用した**Volcengine Elastic Compute Service(ECS)**へのデプロイを推奨します。迅速に開始するための詳細なステップバイステップガイドを用意しています。
- テストデータセット: LoCoMo10(https://github.com/snap-research/locomo)の長距離対話に基づく効果テスト(ground truthのないcategory5を除いた合計1,540ケース)
- 実験グループ: ユーザーがOpenVikingを使用する際にOpenClawのネイティブメモリを無効にしない可能性があるため、ネイティブメモリの有効/無効の実験グループを追加
- OpenVikingバージョン: 0.1.18
- モデル: seed-2.0-code
- 評価スクリプト: https://github.com/ZaynJarvis/openclaw-eval/tree/main
| 実験グループ | タスク完了率 | コスト: 入力トークン数(合計) |
|---|---|---|
| OpenClaw(memory-core) | 35.65% | 24,611,530 |
| OpenClaw + LanceDB (-memory-core) | 44.55% | 51,574,530 |
| OpenClaw + OpenViking Plugin (-memory-core) | 52.08% | 4,264,396 |
| OpenClaw + OpenViking Plugin (+memory-core) | 51.23% | 2,099,622 |
- 実験結果: OpenViking統合後:
- ネイティブメモリ有効時: オリジナルOpenClawと比較して43%改善、入力トークンコスト91%削減。LanceDBと比較して15%改善、入力トークンコスト96%削減。
- ネイティブメモリ無効時: オリジナルOpenClawと比較して49%改善、入力トークンコスト83%削減。LanceDBと比較して17%改善、入力トークンコスト92%削減。
--
最初の例を実行した後、OpenVikingの設計思想を掘り下げましょう。これら5つのコアコンセプトは、先に述べたソリューションと1対1で対応し、完全なコンテキスト管理システムを構築します:
コンテキストをフラットなテキストスライスとして見るのではなく、抽象的な仮想ファイルシステムに統一します。メモリ、リソース、機能のいずれも、viking://プロトコル下の仮想ディレクトリにマッピングされ、それぞれにユニークなURIが付与されます。
このパラダイムにより、エージェントはこれまでにないコンテキスト操作能力を獲得し、開発者のようにlsやfindなどの標準コマンドを通じて、情報を正確かつ決定論的に位置特定、閲覧、操作できます。これにより、コンテキスト管理は曖昧なセマンティックマッチングから、直感的でトレース可能な「ファイル操作」に変わります。詳細: Viking URI | コンテキストタイプ
viking://
├── resources/ # リソース: プロジェクトドキュメント、リポジトリ、Webページなど
│ ├── my_project/
│ │ ├── docs/
│ │ │ ├── api/
│ │ │ └── tutorials/
│ │ └── src/
│ └── ...
├── user/ # ユーザー: 個人の好み、習慣など
│ └── memories/
│ ├── preferences/
│ │ ├── writing_style
│ │ └── coding_habits
│ └── ...
└── agent/ # エージェント: スキル、インストラクション、タスクメモリなど
├── skills/
│ ├── search_code
│ ├── analyze_data
│ └── ...
├── memories/
└── instructions/
大量のコンテキストをプロンプトに一度に詰め込むことは、コストが高いだけでなく、モデルウィンドウの超過やノイズの混入を招きやすいです。OpenVikingは書き込み時にコンテキストを自動的に3つのレベルに処理します:
- L0(Abstract): 迅速な検索と識別のための一文の要約。
- L1(Overview): 計画フェーズでのエージェントの意思決定のための、コア情報と使用シナリオを含む。
- L2(Details): エージェントが絶対に必要な場合の深い読み込みのための、完全なオリジナルデータ。
詳細: コンテキストレイヤー
viking://resources/my_project/
├── .abstract # L0レイヤー: 要約(〜100トークン)- 迅速な関連性チェック
├── .overview # L1レイヤー: 概要(〜2kトークン)- 構造とキーポイントの理解
├── docs/
│ ├── .abstract # 各ディレクトリに対応するL0/L1レイヤーあり
│ ├── .overview
│ ├── api/
│ │ ├── .abstract
│ │ ├── .overview
│ │ ├── auth.md # L2レイヤー: 完全なコンテンツ - オンデマンドでロード
│ │ └── endpoints.md
│ └── ...
└── src/
└── ...
単一のベクトル検索では、複雑なクエリインテントへの対応が困難です。OpenVikingは、複数の検索手法を深く統合する革新的なディレクトリ再帰検索戦略を設計しました:
- インテント分析: インテント分析により複数の検索条件を生成。
- 初期位置特定: ベクトル検索を使用して、初期スライスが位置する高スコアディレクトリを素早く特定。
- 詳細な探索: そのディレクトリ内で二次検索を実行し、高スコア結果を候補セットに更新。
- 再帰的掘り下げ: サブディレクトリが存在する場合、二次検索ステップを層ごとに再帰的に繰り返し。
- 結果集約: 最終的に、最も関連性の高いコンテキストを取得して返却。
この「まず高スコアディレクトリを特定し、次にコンテンツ探索を精緻化する」戦略は、セマンティック的に最もマッチするフラグメントを見つけるだけでなく、情報が存在するコンテキスト全体を理解し、検索のグローバル性と精度を向上させます。詳細: 検索メカニズム
OpenVikingの組織は階層的な仮想ファイルシステム構造を使用しています。すべてのコンテキストは統一されたフォーマットで統合され、各エントリはユニークなURI(viking://パスのようなもの)に対応し、従来のフラットなブラックボックス管理モードを、理解しやすい明確な階層で打ち破ります。
検索プロセスはディレクトリ再帰戦略を採用しています。各検索のディレクトリブラウジングとファイル位置特定の軌跡が完全に保存され、ユーザーが問題の根本原因を明確に観察し、検索ロジックの最適化を導くことを可能にします。詳細: 検索メカニズム
OpenVikingにはメモリ自己反復ループが組み込まれています。各セッションの終了時に、開発者はメモリ抽出メカニズムを能動的にトリガーできます。システムはタスク実行結果とユーザーフィードバックを非同期的に分析し、ユーザーとエージェントのメモリディレクトリに自動的に更新します。
- ユーザーメモリの更新: ユーザーの好みに関するメモリを更新し、エージェントの応答がユーザーのニーズにより適合するように。
- エージェントの経験蓄積: タスク実行経験から操作のヒントやツールの使用経験などのコアコンテンツを抽出し、後続タスクでの効率的な意思決定を支援。
これにより、エージェントは世界とのインタラクションを通じて「使うほど賢く」なり、自己進化を実現します。詳細: セッション管理
詳細については、完全なドキュメントをご覧ください。
詳細については、**私たちについて**をご覧ください。
OpenVikingはまだ初期段階にあり、改善と探索の余地が多くあります。AIエージェント技術に情熱を持つすべての開発者を心から招待します:
- 前進の原動力となる貴重なStarをお願いします。
- 私たちのWebサイトを訪れて、伝えたい思想を理解し、ドキュメントを通じてプロジェクトで使用してください。変化を感じ、最も率直な体験をフィードバックしてください。
- コミュニティに参加して、洞察を共有し、他の人の質問に答え、オープンで互助的な技術の雰囲気を共に作りましょう:
- 📱 Larkグループ: QRコードをスキャンして参加 → QRコードを表示
- 💬 WeChatグループ: QRコードをスキャンしてアシスタントを追加 → QRコードを表示
- 🎮 Discord: Discordサーバーに参加
- 🐦 X(Twitter): フォローする
- コントリビューターになってください。バグ修正の提出でも新機能のコントリビューションでも、あなたのコードの一行一行がOpenVikingの成長の重要な礎石となります。
AIエージェントのコンテキスト管理の未来を共に定義し、構築しましょう。旅は始まりました。あなたの参加をお待ちしています!
このプロジェクトはApache License 2.0の下でライセンスされています。詳細はLICENSEファイルを参照してください。