DEV Community

Cover image for OpenViking là gì?
Sebastian Petrus
Sebastian Petrus

Posted on • Originally published at apidog.com

OpenViking là gì?

Tóm tắt

OpenViking là cơ sở dữ liệu ngữ cảnh mã nguồn mở dành cho các tác nhân AI, thay thế lưu trữ vector phẳng bằng mô hình hệ thống tệp. Nó tổ chức ngữ cảnh (ký ức, tài nguyên, kỹ năng) dưới các URI viking:// với ba lớp: L0 (~100 token), L1 (~2k token), L2 (nội dung đầy đủ). Thực nghiệm cho thấy giảm 91% chi phí token và tăng hiệu quả hoàn thành tác vụ 43% so với RAG truyền thống.

Dùng thử Apidog ngay hôm nay

Giới thiệu

Tác nhân AI thường quên thông tin quan trọng: hỏi lại cùng một endpoint, bỏ qua tùy chọn môi trường, không nhớ bài kiểm tra đã qua. Hầu hết các nhóm đang vá víu RAG, cơ sở dữ liệu vector và hệ thống bộ nhớ rời rạc, dẫn đến ngữ cảnh bị phân mảnh, chi phí token tăng vọt và thất bại truy xuất.

Dữ liệu thực nghiệm (LoCoMo10) cho thấy các hệ thống RAG truyền thống chỉ đạt tỷ lệ hoàn thành tác vụ 35-44% với 24-51 triệu token đầu vào.

OpenViking do ByteDance phát triển, tiếp cận theo cách mới: thay thế lưu trữ vector phẳng bằng hệ thống tệp, tổ chức toàn bộ ngữ cảnh dưới URI viking:// với khả năng tải L0/L1/L2 phân cấp. Kết quả: hoàn thành tác vụ 52% với số token giảm 91%.

💡 Người dùng Apidog xây dựng các tác nhân kiểm thử API có thể tích hợp OpenViking để duy trì ngữ cảnh hội thoại qua các lần chạy kiểm thử, ghi nhớ tùy chọn môi trường của người dùng và lưu trữ tài liệu API để truy xuất ngữ nghĩa.

Hướng dẫn này sẽ giúp bạn hiểu cách OpenViking giải quyết phân mảnh ngữ cảnh, mô hình L0/L1/L2 hoạt động ra sao, và cách triển khai máy chủ đầu tiên trong 15 phút.

Vấn đề ngữ cảnh của tác nhân

Tác nhân AI phải xử lý nhiều loại ngữ cảnh phức tạp:

  • Tùy chọn người dùng (ví dụ: “môi trường thử nghiệm”, “curl hơn Python”)
  • Ngữ cảnh dự án (endpoint, phương thức xác thực, lịch sử kiểm thử)
  • Công cụ và kỹ năng (endpoint thường lỗi, lỗi schema phổ biến)
  • Lịch sử tác vụ (đã kiểm thử gì, lỗi nào từng gặp)

RAG truyền thống lưu trữ dữ liệu này thành các khối phẳng trong cơ sở dữ liệu vector, trả về các đoạn Top-K không có cấu trúc, không phân cấp, thiếu kiểm soát truy xuất.

Năm thách thức cốt lõi

Thách thức RAG truyền thống Giải pháp của OpenViking
Ngữ cảnh bị phân mảnh Ký ức, tài nguyên, kỹ năng lưu trữ riêng biệt Thống nhất dưới hệ thống tệp viking://
Nhu cầu tăng vọt Tác vụ dài tạo ngữ cảnh lớn, chi phí token cao Tải phân cấp L0/L1/L2 giảm 91% token
Truy xuất kém hiệu quả Tìm kiếm vector phẳng, thiếu tổng thể Truy xuất đệ quy thư mục, phân tích ý định
Không thể quan sát Chuỗi truy xuất hộp đen Đường dẫn tìm kiếm được trực quan hóa
Lặp lại hạn chế Chỉ lịch sử tương tác người dùng Quản lý phiên tự động với 6 danh mục bộ nhớ

OpenViking chuyển từ “lưu trữ mọi thứ, truy xuất mơ hồ” sang “cấu trúc mọi thứ, truy xuất chính xác”.

OpenViking là gì?

OpenViking là cơ sở dữ liệu ngữ cảnh mã nguồn mở cho tác nhân AI, theo giấy phép Apache 2.0.

Tổng quan kiến trúc OpenViking

OpenViking hợp nhất ngữ cảnh thành hệ thống tệp ảo. Mỗi loại ngữ cảnh là một thư mục dưới viking:// với URI duy nhất.

viking://
├── resources/
│   ├── my_project/
│   │   ├── docs/
│   │   └── src/
│   └── ...
├── user/
│   └── memories/
│       ├── preferences/
│       └── ...
└── agent/
    ├── skills/
    ├── memories/
    └── instructions/
Enter fullscreen mode Exit fullscreen mode

Các thao tác chính:

  • ls viking://resources/my_project/docs/ — Liệt kê thư mục
  • find "phương thức xác thực" — Tìm kiếm ngữ nghĩa
  • read viking://resources/docs/auth.md — Đọc nội dung đầy đủ
  • abstract viking://resources/docs/ — Tóm tắt nhanh

Hệ thống này tương tự như quản lý tệp trên ổ cứng, nhưng dành cho ngữ cảnh tác nhân AI.

Tính năng cốt lõi 1: Mô hình hệ thống tệp hợp nhất

OpenViking gom tất cả loại ngữ cảnh vào một mô hình duy nhất, phân loại rõ ràng:

Loại Mục đích Vòng đời Sáng kiến
Tài nguyên Tài liệu, mã, FAQ Dài hạn, tĩnh Người dùng thêm
Ký ức Tùy chọn, kinh nghiệm Dài hạn, động Tác nhân trích xuất
Kỹ năng Công cụ, MCP Dài hạn, tĩnh Tác nhân gọi

Các thư mục tiêu chuẩn:

  • viking://resources/ — Tài liệu, mã nguồn, hướng dẫn
  • viking://user/memories/ — Tùy chọn, sự kiện, thực thể người dùng
  • viking://agent/skills/ — Định nghĩa công cụ, MCP
  • viking://agent/memories/ — Mẫu đã học, trường hợp thực tế

API giống Unix

Bạn có thể thao tác qua Python SDK hoặc HTTP API:

from openviking import OpenViking

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

results = client.find("xác thực người dùng")
contents = client.ls("viking://resources/")
doc = client.read("viking://resources/docs/auth.md")
abstract = client.abstract("viking://resources/docs/")
overview = client.overview("viking://resources/docs/")
Enter fullscreen mode Exit fullscreen mode

Tính năng cốt lõi 2: Tải ngữ cảnh phân cấp L0/L1/L2

OpenViking chia nhỏ ngữ cảnh thành 3 lớp:

Lớp Tên Tệp Giới hạn Token Mục đích
L0 Tóm tắt .abstract.md ~100 Tìm kiếm nhanh
L1 Tổng quan .overview.md ~2k Xếp hạng, điều hướng
L2 Chi tiết Tệp gốc Không giới hạn Nội dung đầy đủ

Khi thêm tài nguyên (PDF, Markdown), OpenViking tự động:

  1. Phân tích tài liệu thành text
  2. Tạo cây thư mục trong AGFS
  3. Xử lý ngữ nghĩa không đồng bộ
  4. Sinh tóm tắt L0 và tổng quan L1

Ví dụ cấu trúc:

viking://resources/my_project/
├── .abstract.md
├── .overview.md
├── docs/
│   ├── .abstract.md
│   ├── .overview.md
│   ├── auth.md
│   └── endpoints.md
└── src/
    └── ...
Enter fullscreen mode Exit fullscreen mode

Tiết kiệm Token

# RAG: Tải toàn bộ nội dung
full_docs = retrieve_all("authentication")  # 50k token

# OpenViking: Chỉ tải L1/L2 khi cần
overview = client.overview("viking://resources/docs/auth/")  # 2k token
if needs_more_detail(overview):
    content = client.read("viking://resources/docs/auth/oauth.md")
Enter fullscreen mode Exit fullscreen mode

Thực nghiệm: Giảm 91% token đầu vào, tăng 43% hiệu quả hoàn thành tác vụ.

Tính năng cốt lõi 3: Truy xuất đệ quy thư mục

OpenViking thực hiện truy xuất đệ quy theo 5 bước:

1. Phân tích ý định
2. Định vị thư mục liên quan
3. Khám phá tinh chỉnh trong thư mục
4. Leo xuống đệ quy thư mục con
5. Tổng hợp kết quả
Enter fullscreen mode Exit fullscreen mode

Ví dụ:

  • Truy vấn “làm thế nào để xác thực người dùng?” → Phân tích ý định
  • Định vị các thư mục liên quan: resources/docs/auth/ (điểm 0.92)
  • Tìm kiếm file cụ thể: auth/oauth.md, auth/jwt.md
  • Đệ quy vào thư mục con nếu có
  • Tổng hợp kết quả và trả về

Quy trình này giúp tăng độ chính xác, giảm bỏ sót thông tin quan trọng.

Tính năng cốt lõi 4: Dấu vết truy xuất trực quan hóa

Truy xuất truyền thống là hộp đen, khó gỡ lỗi. OpenViking ghi lại dấu vết truy xuất:

Dấu vết cho truy vấn: "làm mới token OAuth"

├── viking://resources/docs/
│   ├── [ĐIỂM: 0.45] .abstract.md: bỏ qua
│   └── [ĐIỂM: 0.89] auth/: được chọn
│       ├── [ĐIỂM: 0.92] oauth.md: TRẢ VỀ
│       └── [ĐIỂM: 0.85] google.md: TRẢ VỀ
Enter fullscreen mode Exit fullscreen mode

Bạn có thể kiểm tra lý do chọn/bỏ qua file, đường dẫn đã đi qua, từ đó tối ưu và gỡ lỗi nhanh chóng.

Tính năng cốt lõi 5: Quản lý phiên tự động

OpenViking tự động trích xuất ký ức và cập nhật kiến thức tác nhân cuối mỗi phiên.

Sáu danh mục bộ nhớ

Danh mục Chủ sở hữu Vị trí Mô tả Cập nhật
hồ sơ người dùng user/memories/.overview.md Thông tin cơ bản Có thể nối thêm
tùy chọn người dùng user/memories/preferences/ Tùy chọn Có thể nối thêm
thực thể người dùng user/memories/entities/ Project, tổ chức Có thể nối thêm
sự kiện người dùng user/memories/events/ Quyết định, milestone Không cập nhật
trường hợp tác nhân agent/memories/cases/ Case đã học Không cập nhật
mẫu tác nhân agent/memories/patterns/ Pattern đã học Không cập nhật

Quản lý phiên:

session = client.session()
await session.add_message("user", [{"type": "text", "text": "Tôi thích chế độ tối"}])
await session.add_message("assistant", [{"type": "text", "text": "Đã hiểu. Sẽ sử dụng chế độ tối."}])
await session.add_usage({"tool": "screenshot", "parameters": {"theme": "dark"}, "result": "success"})
await session.commit()
Enter fullscreen mode Exit fullscreen mode

Khi commit, OpenViking nén phiên, trích xuất ký ức bằng LLM, cập nhật bộ nhớ và sinh L0/L1 cho nội dung mới.

Tổng quan kiến trúc

Biểu đồ kiến trúc hệ thống OpenViking

Lưu trữ hai lớp

Lớp Công nghệ Lưu trữ
AGFS Hệ thống tệp Nội dung L0/L1/L2, media, quan hệ
Vector Index Cơ sở dữ liệu vector URI, nhúng, metadata (không lưu nội dung)

Tách chỉ mục khỏi nội dung giúp tối ưu truy xuất và tiết kiệm tài nguyên.

Bắt đầu nhanh: Triển khai máy chủ OpenViking

Điều kiện tiên quyết

  • Python 3.10+
  • Go 1.22+ (cho AGFS)
  • GCC 9+ hoặc Clang 11+
  • Linux/macOS/Windows

Bước 1: Cài đặt OpenViking

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

Cài CLI Rust (tùy chọn):

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

Bước 2: Cấu hình mô hình

Tạo ~/.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
  }
}
Enter fullscreen mode Exit fullscreen mode

Nhà cung cấp hỗ trợ

Provider Embedding VLM
volcengine doubao-embedding-vision doubao-seed-2.0-pro
openai text-embedding-3-large gpt-4o, gpt-4-vision
litellm proxy LiteLLM Claude, Gemini, Ollama...

Bước 3: Khởi động máy chủ

openviking-server
# hoặc chạy nền
nohup openviking-server > /data/log/openviking.log 2>&1 &
Enter fullscreen mode Exit fullscreen mode

Bước 4: Thêm tài nguyên

# Bằng Rust CLI
ov add-resource https://docs.example.com/api-guide.pdf

# Hoặc 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

Bước 5: Tìm kiếm và truy xuất

ov find "phương thức xác thực"
ov ls viking://resources/
ov tree viking://resources/docs -L 2
ov grep "OAuth" --uri viking://resources/docs/
Enter fullscreen mode Exit fullscreen mode

Bước 6: Kích hoạt VikingBot (tuỳ chọn)

pip install "openviking[bot]"
openviking-server --with-bot
# Terminal khác:
ov chat
Enter fullscreen mode Exit fullscreen mode

Điểm chuẩn hiệu suất

Thử nghiệm trên tập LoCoMo10 (1.540 đối thoại dài hạn):

Hệ thống Tỷ lệ hoàn thành Token đầu vào
OpenClaw (bộ nhớ gốc) 35.65% 24.6M
OpenClaw + LanceDB 44.55% 51.6M
OpenClaw + OpenViking 52.08% 4.3M
  • Cải thiện 43% so với bộ nhớ gốc, giảm 91% token
  • Cải thiện 17% so với LanceDB, giảm 92% token

Tích hợp OpenViking với Apidog

Người dùng Apidog có thể tận dụng OpenViking để lưu trữ ngữ cảnh hội thoại, tài liệu API, và tùy chọn người dùng xuyên suốt các phiên.

Tích hợp OpenViking với Apidog

Bước 1: Thiết lập máy chủ OpenViking

Làm theo hướng dẫn ở trên để triển khai máy chủ.

Bước 2: Nhập tài liệu API Apidog

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

Nhập tài liệu vào viking://resources/ với xử lý L0/L1/L2 tự động.

Bước 3: Lưu trữ tùy chọn người dùng

from openviking import OpenViking

client = OpenViking(path="./apidog-agent-data")
session = client.session()
await session.add_message("user", [{
    "type": "text",
    "text": "Luôn sử dụng môi trường thử nghiệm cho các bài kiểm tra API"
}])
await session.commit()
Enter fullscreen mode Exit fullscreen mode

Bước 4: Truy vấn ngữ cảnh khi kiểm thử

results = client.find("điểm cuối xác thực")
for ctx in results.resources:
    print(f"Tìm thấy: {ctx.uri}")

prefs = client.find("tùy chọn môi trường thử nghiệm", target_uri="viking://user/memories/")
Enter fullscreen mode Exit fullscreen mode

Bước 5: Kết nối với framework

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

# Hoặc HTTP API
import httpx
response = httpx.post(
    "http://localhost:1933/api/v1/search/find",
    json={"query": "điểm cuối xác thực"},
    headers={"X-API-Key": "your-api-key"}
)
Enter fullscreen mode Exit fullscreen mode

Kỹ thuật nâng cao & Thực tiễn tốt nhất

Mẹo chuyên nghiệp

  1. Làm nóng trước ngữ cảnh thường xuyên truy cập

    ov add-resource https://docs.example.com --wait
    
  2. Triển khai dọn dẹp dữ liệu cũ

    await session.archive(max_age_days=7)
    
  3. Giám sát chỉ mục vector

    ov debug stats
    

Lỗi phổ biến cần tránh

  1. Tải nội dung L2 quá sớm — luôn ưu tiên L0/L1
  2. Bỏ qua commit phiên — ký ức chỉ được trích xuất khi commit
  3. Đưa quá nhiều tài nguyên vào một thư mục — nên chia nhỏ
  4. Không xem dấu vết truy xuất — cần dùng để gỡ lỗi

Tối ưu hiệu suất

Kịch bản Khuyến nghị
Truy vấn cao Chạy HTTP Server với connection pooling
Tài liệu lớn Chia nhỏ theo chủ đề trước khi nhập
Độ trễ thấp Sinh trước L0/L1 cho nội dung thường xuyên truy cập
Multi-tenant Dùng workspace riêng cho mỗi tenant

Bảo mật

  • Lưu trữ khóa API trong biến môi trường/trình quản lý bí mật
  • Bật HTTPS cho HTTP server
  • Triển khai giới hạn tốc độ API
  • Dùng API key riêng cho dev/production

Các trường hợp sử dụng thực tế

1. Trợ lý mã hóa AI

  • Điều hướng viking://resources/my_project/src/
  • Ghi nhớ tùy chọn code style, test framework
  • Truy xuất tài liệu API liên quan khi tạo mã

Kết quả: Giảm 67% lỗi “quên”, tiết kiệm 43% token.

2. Tác nhân hỗ trợ khách hàng

  • Lưu tài liệu sản phẩm ở viking://resources/product/
  • Lưu lịch sử hội thoại ở user/memories/past_issues/
  • Sách hướng dẫn dưới dạng kỹ năng

Kết quả: Tăng tỷ lệ giải quyết lần đầu từ 52% lên 71%.

3. Trợ lý nghiên cứu

  • Bài báo phân loại theo chủ đề (resources/papers/nlp/)
  • Lưu phương pháp nghiên cứu dưới dạng kỹ năng
  • Tự động trích xuất phát hiện chính vào bộ nhớ

Kết quả: Tìm bài báo liên quan nhanh hơn 3 lần.

Các lựa chọn thay thế & So sánh

So sánh với vector DB truyền thống

Khía cạnh RAG truyền thống OpenViking
Mô hình lưu trữ Vector phẳng Hệ thống tệp phân cấp
Truy xuất Độ tương tự Top-K Đệ quy thư mục + phân tích ý định
Quan sát Hộp đen Dấu vết truy xuất trực quan hóa
Hiệu quả token Tải toàn bộ/cắt bớt Tải phân cấp L0/L1/L2
Lặp lại bộ nhớ Thủ công/không có Tự động qua phiên
Loại ngữ cảnh Chỉ tài liệu Tài liệu, ký ức, kỹ năng hợp nhất
Gỡ lỗi Đoán mò Nhật ký duyệt thư mục

So sánh với bộ nhớ LangChain

Khía cạnh Bộ nhớ LangChain OpenViking
Tính bền vững Đệm hội thoại Hệ thống tệp L0/L1/L2
Mở rộng Bị giới hạn Tải phân cấp, không giới hạn cứng
Truy xuất Tuyến tính Đệ quy thư mục + ngữ nghĩa
Loại bộ nhớ Một loại 6 danh mục (hồ sơ, tùy chọn, ...)

Khi nào nên dùng từng giải pháp

  • Vector DB truyền thống: yêu cầu độ trễ dưới 100ms, chỉ tìm kiếm cơ bản, hệ thống RAG sẵn có, không cần ngữ cảnh phức tạp.
  • OpenViking: hội thoại dài hạn, ngữ cảnh đa loại, tối ưu token, cần truy xuất có thể quan sát/gỡ lỗi.

So sánh với RAG truyền thống

Khía cạnh RAG truyền thống OpenViking
Mô hình lưu trữ Vector phẳng Hệ thống tệp phân cấp
Truy xuất Độ tương tự Top-K Đệ quy thư mục + phân tích ý định
Quan sát Hộp đen Dấu vết tìm kiếm trực quan hóa
Hiệu quả token Tải toàn bộ/cắt Tải phân cấp L0/L1/L2
Lặp lại bộ nhớ Thủ công Quản lý phiên tự động
Loại ngữ cảnh Chỉ tài liệu Tài liệu, ký ức, kỹ năng hợp nhất
Gỡ lỗi Đoán mò Nhật ký duyệt thư mục

Triển khai sản phẩm

Chạy OpenViking như dịch vụ HTTP độc lập với các lưu ý sau:

Hạ tầng đề xuất:

  • Cloud: Volcengine ECS hoặc tương đương
  • OS: veLinux/Ubuntu 22.04+
  • Ổ SSD cho AGFS
  • Mạng thấp độ trễ tới API model

Bảo mật:

  • Lưu khóa API an toàn
  • Bật xác thực & HTTPS cho HTTP server
  • Giới hạn tốc độ endpoint

Giám sát:

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

Theo dõi: độ sâu hàng đợi xử lý ngữ nghĩa, độ trễ truy xuất, thao tác AGFS, tỷ lệ trích xuất bộ nhớ thành công.

Hạn chế và cân nhắc

Hạn chế hiện tại

  • Chủ yếu SDK Python, ngôn ngữ khác dùng HTTP
  • Yêu cầu model embedding/VLM bên ngoài
  • Mô hình hệ thống tệp lạ với người quen vector DB
  • API có thể thay đổi do dự án phát triển nhanh

Khi nào nên sử dụng OpenViking

Nên dùng khi:

  • Xây dựng tác nhân hội thoại dài hạn cần bộ nhớ
  • Ngữ cảnh đa loại, tối ưu chi phí token
  • Cần truy xuất có thể quan sát, debug

Không phù hợp khi:

  • Ứng dụng Q&A đơn giản, chỉ cần tìm kiếm
  • Đang có pipeline RAG ổn định, không gặp vấn đề
  • Cần độ trễ <100ms (OpenViking có thêm xử lý)

Chặng đường phía trước

OpenViking đang phát triển nhanh (0.1.x đầu 2025):

  • Hỗ trợ đa tenant (nhiều workspace)
  • Dashboard quản lý bộ nhớ, chỉ số chất lượng truy xuất
  • Hệ sinh thái plugin cho các framework tác nhân
  • Triển khai edge/lightweight
  • Tích hợp MCP nâng cao

Dự án mã nguồn mở theo Apache 2.0. Xem thêm tài liệu tại openviking.ai/docs.

Kết luận

OpenViking thay đổi cách tác nhân AI quản lý ngữ cảnh, tổ chức thông tin dưới dạng hệ thống tệp phân cấp, giải quyết triệt để phân mảnh, lãng phí token và truy xuất hộp đen của RAG truyền thống.

Những điểm chính

  • Mô hình hệ thống tệp hợp nhất ngữ cảnh: Tất cả ký ức, tài nguyên, kỹ năng dưới URI viking://
  • Tải L0/L1/L2 tiết kiệm token: Chỉ tải chi tiết khi cần
  • Truy xuất đệ quy tăng độ chính xác: Khóa thư mục liên quan, khám phá nội dung
  • Dấu vết trực quan hóa dễ debug: Xem đường dẫn truy xuất từng bước
  • Quản lý phiên tự động giúp tác nhân học hỏi: Trích xuất ký ức sau mỗi hội thoại

Top comments (0)