OpenViking: 專為 AI 代理設計的上下文資料庫,讓你的 AI 像個聰明的檔案管理員!
嘿,台灣的 AI 愛好者們! 隨著 AI 技術的蓬勃發展,我們身邊充滿了各種各樣的 AI 工具和代理。 但你是否也曾遇到過,給 AI 代理提供「高品質的上下文資訊」 總是個大難題? 資訊零碎、記憶混亂、檢索效果差… 這些都是 AI 代理開發者們經常遇到的挑戰。
今天要為大家介紹的,就是一個專門為了解決這些問題而生的 開源上下文資料庫 — OpenViking! 它可以讓你的 AI 代理擁有像專業檔案管理員一樣的能力,輕鬆管理和利用上下文資訊,變得更聰明、更有效率!
傳統 RAG 遇到的挑戰
在深入了解 OpenViking 之前,我們先來看看傳統的 RAG(Retrieval-Augmented Generation,檢索增強生成) 模式在上下文管理方面遇到的一些挑戰:
- 上下文資訊零碎: 程式碼裡的記憶、向量資料庫裡的資源、分散的技能… 這些資訊散落在各處,很難統一管理。
- 上下文需求激增: AI 代理在長時間運作時,每次執行都會產生新的上下文資訊, 簡單地截斷或壓縮會導致資訊遺失。
- 檢索效果不佳: 傳統的 RAG 使用扁平的儲存方式,缺乏全局視角,難以理解資訊的全貌。
- 上下文資訊不透明: 傳統 RAG 的檢索鏈條就像個黑盒子,發生錯誤時很難除錯。
- 記憶迭代有限: 目前的記憶只記錄使用者互動,缺乏與代理相關的任務記憶。
OpenViking 的創新解決方案
OpenViking 針對這些挑戰,提出了一系列創新的解決方案,核心思想是: 用檔案系統的方式管理 AI 代理的上下文! 這就像給你的 AI 代理裝上了一個聰明的檔案管理員,讓它能像你一樣輕鬆地管理文件和資料夾。
以下是 OpenViking 的核心特色:
- 檔案系統管理範式 → 解決資訊碎片化: 採用檔案系統範式,統一管理 AI 代理所需的記憶、資源和技能,再也不怕資訊散落在各處。
- 分層上下文載入 → 降低 Token 消耗: 採用 L0/L1/L2 三層結構,按需載入,大幅節省成本。
- 目錄遞迴檢索 → 提升檢索效果: 支援原生檔案系統檢索方式,結合目錄定位與語義檢索,實現遞迴且精準的上下文獲取。
- 檢索軌跡可視化 → 上下文資訊透明化: 支援目錄檢索軌跡的可視化,讓使用者清楚地觀察問題的根本原因,引導檢索邏輯優化。
- 自動化 Session 管理 → 上下文自我迭代: 自動壓縮對話中的內容、資源引用、工具呼叫等,提取長期記憶,讓代理在使用中變得更聰明。
快速開始: 讓你的 AI 代理動起來!
迫不及待想體驗 OpenViking 的威力了嗎? 讓我們一起來看看如何快速上手!
先決條件
在開始之前,請確保你的環境符合以下要求:
- Python 版本:3.10 或更高
- Go 版本:1.22 或更高 (用於構建 AGFS 組件)
- C++ 編譯器:GCC 9+ 或 Clang 11+ (用於構建核心擴展)
- 作業系統:Linux、macOS、Windows
- 網路連線: 穩定網路連線 (用於下載依賴項和存取模型服務)
1. 安裝 OpenViking
首先,透過 Python 的 pip 進行安裝:
pip install openviking --upgrade --force-reinstall
也可以選擇安裝 Rust CLI (可選):
curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash
或者從原始碼構建:
cargo install --git https://github.com/volcengine/OpenViking ov_cli
2. 模型準備: 打造 AI 代理的眼睛和耳朵
OpenViking 需要以下模型能力:
- VLM 模型: 用於圖像和內容理解
- Embedding 模型: 用於向量化和語義檢索
支援的 VLM 提供者
OpenViking 支援三種 VLM 提供者:
| 提供者 | 描述 | 取得 API Key |
|---|---|---|
volcengine |
來自火山引擎的 Doubao 模型 | 火山引擎控制台 |
openai |
OpenAI 官方 API | OpenAI 平台 |
litellm |
統一存取多種第三方模型 (Anthropic, DeepSeek, Gemini, vLLM, Ollama 等) | 參考 LiteLLM Providers |
提示:
litellm支援統一存取多種模型。model欄位必須遵循 LiteLLM 格式規範- 系統會自動偵測常用模型 (例如
claude-*,deepseek-*,gemini-*,hosted_vllm/*,ollama/*等)。 對於其他模型,請依照 LiteLLM 格式使用完整的字首。
提供者特定注意事項
火山引擎 (Doubao)
火山引擎支援模型名稱和端點 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 (可以在 火山引擎 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 提供者文件。
3. 環境設定: 讓 OpenViking 知道你的模型在哪裡
伺服器配置範本
建立設定檔 ~/.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 // semantic 處理的最大並發 LLM 呼叫 (預設值: 100)
}
}
注意: 對於 embedding 模型,目前支援
volcengine(Doubao),openai和jina提供者。 對於 VLM 模型,我們支援三個提供者:volcengine,openai, 和litellm。litellm提供者支援各種模型,包括 Anthropic (Claude), DeepSeek, Gemini, Moonshot, Zhipu, DashScope, MiniMax, vLLM, Ollama 等。
伺服器配置範例
展開以查看您的模型服務的配置範例:
範例 1: 使用火山引擎 (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/Client 配置範例
展開以查看您的 CLI/Client 的配置範例:
範例:用於存取本機伺服器的 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"
4. 運行你的第一個範例: 體驗 OpenViking 的核心魅力
📝 先決條件: 確保您已在先前的步驟中完成配置 (ov.conf 和 ovcli.conf)。
現在,讓我們執行一個完整的範例,來體驗 OpenViking 的核心功能。
啟動伺服器
openviking-server
或者您可以在背景執行
nohup openviking-server > /data/log/openviking.log 2>&1 &
運行 CLI
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 快速開始
VikingBot 是一個基於 OpenViking 建置的 AI 代理框架。 這裡是如何開始使用:
# 選項 1: 從 PyPI 安裝 VikingBot (建議給大多數使用者)
pip install "openviking[bot]"
# 選項 2: 從原始碼安裝 VikingBot (用於開發)
uv pip install -e ".[bot]"
# 啟動 OpenViking 伺服器,啟用 Bot
openviking-server --with-bot
# 在另一個終端中,啟動互動式聊天
ov chat
深入了解: OpenViking 的核心概念
在執行了第一個範例之後,讓我們深入了解 OpenViking 的設計理念。 這五個核心概念與前面提到的解決方案一一對應,共同構建了一個完整的上下文管理系統:
1. 檔案系統管理範式 → 解決資訊碎片化
我們不再將上下文視為扁平的文本片段,而是將它們統一到抽象的虛擬檔案系統中。 無論是記憶、資源還是能力,它們都映射到 viking:// 協議下的虛擬目錄,每個目錄都有唯一的 URI。
這種範式賦予了 AI 代理前所未有的上下文操作能力,使其能夠像開發人員一樣,通過 ls 和 find 等標準命令精確且確定地定位、瀏覽和操作資訊。 這將上下文管理從模糊的語義匹配轉變為直觀、可追蹤的「檔案操作」。 了解更多: Viking URI | 上下文類型
viking://
├── resources/ # 資源:專案文件、倉庫、網頁等
│ ├── my_project/
│ │ ├── docs/
│ │ │ ├── api/
│ │ │ └── tutorials/
│ │ └── src/
│ └── ...
├── user/ # 使用者:個人偏好、習慣等
│ └── memories/
│ ├── preferences/
│ │ ├── writing_style
│ │ └── coding_habits
│ └── ...
└── agent/ # 代理:技能、指令、任務記憶等
├── skills/
│ ├── search_code
│ ├── analyze_data
│ └── ...
├── memories/
└── instructions/
2. 分層上下文載入 → 降低 Token 消耗
一次性將大量的上下文資訊塞進 Prompt 不僅昂貴,還容易超出模型窗口,引入雜訊。 OpenViking 會在寫入時自動將上下文處理成三個層級:
- L0 (Abstract,摘要): 一句話的摘要,用於快速檢索和識別。
- L1 (Overview,概述): 包含核心資訊和使用場景,供代理在規劃階段進行決策。
- L2 (Details,細節): 完整的原始資料,供代理在絕對必要時進行深度閱讀。
了解更多: 上下文層級
viking://resources/my_project/
├── .abstract # L0 層:摘要 (~100 tokens) - 快速相關性檢查
├── .overview # L1 層:概述 (~2k tokens) - 了解結構和關鍵點
├── docs/
│ ├── .abstract # 每個目錄都有相對應的 L0/L1 層
│ ├── .overview
│ ├── api/
│ │ ├── .abstract
│ │ ├── .overview
│ │ ├── auth.md # L2 層:完整內容 - 按需載入
│ │ └── endpoints.md
│ └── ...
└── src/
└── ...
3. 目錄遞迴檢索 → 提升檢索效果
單一的向量檢索難以應付複雜的查詢意圖。 OpenViking 設計了創新的 目錄遞迴檢索策略,深度整合多種檢索方法:
- 意圖分析: 通過意圖分析生成多個檢索條件。
- 初步定位: 使用向量檢索,快速定位初始切片所在的高分目錄。
- 精細探索: 在該目錄中執行二次檢索,並將高分結果更新到候選集。
- 遞迴鑽取: 如果存在子目錄,則逐層遞迴重複二次檢索步驟。
- 結果聚合: 最後,獲取最相關的上下文資訊並返回。
這種「先鎖定高分目錄,再精細探索內容」的策略,不僅能找到語義上最匹配的片段,也能理解資訊所在的全域上下文,從而提高檢索的全局性和準確性。 了解更多: 檢索機制
4. 檢索軌跡可視化 → 上下文資訊透明化
OpenViking 的組織使用分層虛擬檔案系統結構。 所有上下文資訊都以統一的格式整合在一起,每個條目都對應一個唯一的 URI(例如 viking:// 路徑),打破了傳統扁平黑盒管理模式,具有清晰易懂的層次結構。
檢索過程採用目錄遞迴策略。 每次檢索的目錄瀏覽和檔案定位的軌跡都會被完整保留,使使用者能夠清楚地觀察問題的根本原因,引導檢索邏輯的優化。 了解更多: 檢索機制
5. 自動化 Session 管理 → 上下文自我迭代
OpenViking 內建記憶自我迭代迴圈。 在每次 Session 結束時,開發者可以主動觸發記憶提取機制。 系統將非同步分析任務執行結果和使用者回饋,並自動將其更新到使用者和代理記憶目錄。
- 使用者記憶更新: 更新與使用者偏好相關的記憶,使代理的回應更好地符合使用者需求。
- 代理經驗累積: 從任務執行經驗中提取核心內容,例如操作提示和工具使用經驗,幫助後續任務高效決策。
這使得代理能夠通過與世界的互動,實現「在使用中變得更聰明」,實現自我演進。 了解更多: Session 管理
進階閱讀
文件
如需更多詳細資訊,請訪問我們的 完整文件。
社群與團隊
如需更多詳細資訊,請參閱: 關於我們
加入社群
OpenViking 仍處於早期階段,還有許多需要改進和探索的地方。 我們誠摯地邀請每一位對 AI 代理技術充滿熱情的開發者:
- 為我們點亮一顆寶貴的 Star,給我們前進的動力。
- 訪問我們的 網站 以了解我們傳達的理念,並通過 文件 在您的專案中使用它。 感受它帶來的變化,並向我們提供您最真實的體驗回饋。
- 加入我們的社群,分享您的見解,幫助回答他人的問題,共同創建一個開放且互助的技術氛圍:
- 📱 Lark 群組:掃描 QR 碼加入 → 查看 QR 碼
- 💬 微信群組:掃描 QR 碼添加助手 → 查看 QR 碼
- 🎮 Discord:加入 Discord 伺服器
- 🐦 X (Twitter):關注我們
- 成為 貢獻者,無論是提交錯誤修復還是貢獻新功能,您程式碼的每一行都將成為 OpenViking 成長的重要基石。
讓我們共同努力,定義並構建 AI 代理上下文管理的未來。 旅程已經開始,期待您的參與!
Star 趨勢
授權
本專案已獲得 Apache License 2.0 授權 – 有關詳細資訊,請參閱 LICENSE 檔案。

參考閱讀
https://github.com/volcengine/OpenViking