DEV Community

Cover image for OpenViking คืออะไร
Thanawat Wongchai
Thanawat Wongchai

Posted on • Originally published at apidog.com

OpenViking คืออะไร

สรุปสาระสำคัญ (TL;DR)

OpenViking คือฐานข้อมูลบริบทแบบโอเพนซอร์สสำหรับเอเจนต์ AI ที่มาแทนที่การจัดเก็บเวกเตอร์แบบเรียบด้วยระบบไฟล์ โดยจัดระเบียบบริบท (ความทรงจำ, ทรัพยากร, ทักษะ) ภายใต้ URI viking:// พร้อมเลเยอร์ L0 (100 โทเค็น), L1 (2k โทเค็น), L2 (เนื้อหาเต็ม) ทดสอบพบว่าลดต้นทุนโทเค็นได้ 91% และทำงานสำเร็จดีขึ้น 43% เมื่อเทียบกับ RAG แบบดั้งเดิม

ทดลองใช้ Apidog วันนี้

บทนำ

เอเจนต์ AI มักมีปัญหาการหลงลืม เช่น เรียก API เดิมซ้ำ เพิกเฉยสภาพแวดล้อม หรือจำไม่ได้ว่าทดสอบอะไรไปแล้ว ทีมพัฒนามักรวม RAG pipelines, vector DB และระบบ memory เอง ส่งผลให้บริบทกระจัดกระจาย ค่าโทเค็นสูง และดึงข้อมูลล้มเหลว

การทดสอบด้วย LoCoMo10 พบ RAG แบบดั้งเดิมสำเร็จเพียง 35-44% ใช้โทเค็น 24-51 ล้าน ขณะที่ OpenViking ใช้ระบบไฟล์แทน vector DB บริบทอยู่ใน URI viking:// โหลดแบบ L0/L1/L2 ผลคือสำเร็จ 52% ใช้โทเค็นน้อยลง 91%

💡 ผู้ใช้ Apidog ที่สร้างเอเจนต์ทดสอบ API สามารถรวม OpenViking เพื่อรักษาบริบทข้ามการทดสอบ, จดจำการตั้งค่าสภาพแวดล้อม และจัดเก็บเอกสาร API สำหรับดึงข้อมูลเชิงความหมาย

ในคู่มือนี้ คุณจะเห็นวิธีจัดการบริบทด้วย OpenViking, การใช้งานโมเดล L0/L1/L2 และขั้นตอนปรับใช้เซิร์ฟเวอร์แรกอย่างรวดเร็ว

ปัญหาบริบทของเอเจนต์

เอเจนต์ AI ต้องติดตามบริบทที่ซับซ้อน เช่น การตั้งค่าผู้ใช้, โปรเจกต์, เครื่องมือ, และประวัติงาน RAG แบบเดิมเก็บเป็นเวกเตอร์เรียบ ไม่มีโครงสร้างหรือลำดับชั้น ทำให้เรียกคืนข้อมูลไม่ครบถ้วน

ความท้าทายหลักห้าประการ

ความท้าทาย RAG แบบดั้งเดิม โซลูชันของ OpenViking
บริบทที่กระจัดกระจาย ความทรงจำ, ทรัพยากร, ทักษะแยกกัน ระบบไฟล์รวมใน viking://
ความต้องการที่เพิ่มขึ้นเร็ว งานมาก, บริบทเยอะ โหลดลำดับชั้น L0/L1/L2 ลดโทเค็น 91%
การเรียกคืนข้อมูลไม่ดี Vector search ขาดองค์รวม เรียกคืนแบบ Directory recursive + วิเคราะห์เจตนา
ไม่สามารถสังเกตได้ กล่องดำ แสดงภาพเส้นทางค้นหา
การทำซ้ำที่จำกัด เฉพาะประวัติโต้ตอบผู้ใช้ เซสชันอัตโนมัติ, memory 6 ประเภท

OpenViking คืออะไร?

OpenViking คือฐานข้อมูลบริบทโอเพนซอร์สสำหรับเอเจนต์ AI จัดบริบททุกอย่างในระบบไฟล์เสมือน (viking://)

ภาพแสดงโครงสร้าง OpenViking: L0/L1/L2, AGFS, Vector DB, Agent

โครงสร้างไดเรกทอรี

viking://
├── resources/      # เอกสาร, โค้ด, เว็บ
├── user/           # การตั้งค่า, ความทรงจำผู้ใช้
├── agent/          # ทักษะ, memory, 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: ระบบไฟล์แบบลำดับชั้น

บริบทสามประเภท

ประเภท วัตถุประสงค์ วงจรชีวิต ความคิดริเริ่ม
ทรัพยากร เอกสาร, โค้ด ระยะยาว, คงที่ ผู้ใช้เพิ่ม
ความทรงจำ การตั้งค่า, ประสบการณ์ ระยะยาว, เปลี่ยน เอเจนต์ดึงข้อมูล
ทักษะ เครื่องมือ, MCP ระยะยาว, คงที่ เอเจนต์เรียกใช้

ไดเรกทอรีตัวอย่าง:

  • viking://resources/
  • viking://user/memories/
  • viking://agent/skills/

API แบบ Unix

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")
abstract = client.abstract("viking://resources/docs/")
overview = client.overview("viking://resources/docs/")
Enter fullscreen mode Exit fullscreen mode

คุณสมบัติหลัก 2: การโหลดบริบทแบบ L0/L1/L2

OpenViking สร้างเลเยอร์อัตโนมัติ:

  • L0: บทคัดย่อ (~100 โทเค็น, .abstract.md)
  • L1: ภาพรวม (~2k โทเค็น, .overview.md)
  • L2: เนื้อหาเต็ม (ไม่จำกัด, ไฟล์จริง)

วิธีการทำงาน

  1. แยกข้อความจากไฟล์
  2. สร้างโครงสร้างไดเรกทอรี AGFS
  3. คิวประมวลผล semantic async
  4. สร้าง L0/L1 จากล่างขึ้นบน
# RAG เดิม: โหลดเนื้อหาทั้งหมด (50k tokens)
full_docs = retrieve_all("authentication")

# OpenViking: โหลด L1 ก่อน (2k tokens)
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: การเรียกคืนแบบ Directory Recursive

OpenViking ใช้ขั้นตอน:

  1. วิเคราะห์เจตนา
  2. หาตำแหน่งไดเรกทอรีเริ่มต้น
  3. ค้นหาในไดเรกทอรีเป้าหมาย
  4. ลงลึกซ้ำในไดเรกทอรีย่อย
  5. รวมผล

ตัวอย่างเส้นทางการค้นหา:

เส้นทางการเรียกคืนข้อมูลสำหรับ "OAuth token refresh"

├── viking://resources/docs/
│   └── auth/
│       ├── oauth.md (score: 0.92)
│       └── providers/
│           └── google.md (score: 0.85)
Enter fullscreen mode Exit fullscreen mode

คุณสมบัติหลัก 4: การแสดงภาพเส้นทางค้นหา

เส้นทางการค้นหานี้ช่วยดีบักและวิเคราะห์จุดที่เอเจนต์พลาดบริบท เช่น L0 ไม่ดี, ไดเรกทอรีผิด หรือคะแนนไม่ถึงเกณฑ์

คุณสมบัติหลัก 5: การจัดการเซสชันอัตโนมัติ

OpenViking มี memory 6 ประเภท เช่น โปรไฟล์, การตั้งค่า, เอนทิตี, เหตุการณ์, กรณีศึกษา, รูปแบบ

# เริ่มเซสชัน
session = client.session()
await session.add_message("user", [{"type": "text", "text": "I prefer dark mode in the UI"}])
await session.commit()
Enter fullscreen mode Exit fullscreen mode

เมื่อคอมมิต ระบบจะบีบอัดเซสชัน, ดึง memory, อัปเดตหน่วยความจำ และสร้าง L0/L1 ใหม่

ภาพรวมสถาปัตยกรรม

แผนภาพภาพรวมสถาปัตยกรรม OpenViking

แยก storage เป็น AGFS (เนื้อหา, memory) และ vector index (URI, embedding)

เริ่มต้นอย่างรวดเร็ว: ปรับใช้ OpenViking Server

ข้อกำหนดเบื้องต้น

  • Python 3.10+
  • Go 1.22+ (AGFS)
  • GCC 9+ หรือ Clang 11+
  • Linux, macOS, Windows

ติดตั้ง

pip install openviking --upgrade --force-reinstall

# Rust CLI (เลือก)
curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash
Enter fullscreen mode Exit fullscreen mode

กำหนดค่าโมเดล

สร้างไฟล์ ~/.openviking/ov.conf (ดูตัวอย่างในบทความ) รองรับ OpenAI, volcengine, LiteLLM ฯลฯ

เริ่มเซิร์ฟเวอร์

openviking-server
# หรือ background
nohup openviking-server > /data/log/openviking.log 2>&1 &
Enter fullscreen mode Exit fullscreen mode

เพิ่ม resource

# Rust CLI
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

ค้นหาและดึงข้อมูล

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

เปิดใช้งาน VikingBot (ไม่บังคับ)

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

เกณฑ์มาตรฐานประสิทธิภาพ

ระบบ อัตราความสำเร็จ โทเค็นอินพุต
OpenClaw (พื้นฐาน) 35.65% 24.6M
OpenClaw + LanceDB 44.55% 51.6M
OpenClaw + OpenViking 52.08% 4.3M
  • สำเร็จเพิ่มขึ้น 43% ลดโทเค็น 91%
  • เหมาะกับ use case ที่ต้องการ memory ต่อเนื่อง

การผสาน OpenViking กับ Apidog

ผู้ใช้ Apidog ที่สร้างเอเจนต์ AI สำหรับทดสอบ API สามารถใช้ OpenViking เพื่อจัดการบริบท, เอกสาร API และการตั้งค่าผู้ใช้

แผนภาพการผสานรวม Apidog กับ OpenViking

ขั้นตอน

1. ตั้งค่า OpenViking Server

ทำตามขั้นตอน quickstart ด้านบน

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. เชื่อมต่อกับ Agent Framework

# Python SDK
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

เทคนิคขั้นสูงและแนวปฏิบัติที่ดีที่สุด

เคล็ดลับสำหรับการใช้งานจริง

  1. อุ่น L0/L1 ล่วงหน้า ใช้ ov add-resource https://docs.example.com --wait เพื่อลด latency
  2. ล้าง session เก่าอัตโนมัติ
   await session.archive(max_age_days=7)
Enter fullscreen mode Exit fullscreen mode
  1. ตรวจสอบดัชนีเวกเตอร์
   ov debug stats
Enter fullscreen mode Exit fullscreen mode

ข้อผิดพลาดที่ควรหลีกเลี่ยง

  1. โหลด L2 ก่อนเวลา – ใช้ L0/L1 ก่อนเสมอ
  2. ข้าม commit session – memory จะไม่ถูกดึงหากไม่ commit
  3. โหลดไดเรกทอรีเดียวมากเกินไป – ควรแบ่ง resource เป็นไดเรกทอรีย่อย
  4. ไม่ดูเส้นทางการเรียกคืนข้อมูล – ใช้เส้นทาง debug ผลลัพธ์

การเพิ่มประสิทธิภาพ

สถานการณ์ คำแนะนำ
Query สูง รัน OpenViking แบบ HTTP server + pooling
เอกสารใหญ่ แบ่งเป็นไดเรกทอรีย่อยก่อนนำเข้า
ต้องการ latency ต่ำ สร้าง L0/L1 ล่วงหน้าสำหรับเนื้อหาหลัก
Multi-tenant แยก workspace สำหรับแต่ละ tenant

ความปลอดภัย

  • เก็บ API keys ใน environment variable เท่านั้น
  • เปิด HTTPS สำหรับ HTTP server
  • กำหนด rate limiting
  • ใช้ API key แยก dev/prod

กรณีใช้งานจริง

1. ผู้ช่วยเขียนโค้ด AI

  • นำทางโครงสร้างด้วย viking://resources/my_project/src/
  • จำการตั้งค่าผู้ใช้ เช่น coding style
  • ดึงเอกสาร API อัตโนมัติ
  • ผลลัพธ์: ลด agent ขี้ลืม 67%, ประหยัดโทเค็น 43%

2. เอเจนต์ฝ่ายสนับสนุนลูกค้า

  • เอกสารใน viking://resources/product/
  • ประวัติใน viking://user/memories/past_issues/
  • ทักษะใน viking://agent/skills/
  • ผลลัพธ์: แก้ไขปัญหาครั้งแรก 71% (จากเดิม 52%)

3. ผู้ช่วยงานวิจัย

  • เอกสารจัดหมวด viking://resources/papers/nlp/
  • ระเบียบวิธีเป็น skill
  • ผลการค้นพบถูกดึงเข้าหน่วยความจำ
  • ผลลัพธ์: ค้นหาเอกสารเร็วขึ้น 3 เท่า

ทางเลือกและการเปรียบเทียบ

OpenViking vs Vector DB แบบดั้งเดิม

ประเด็น RAG เดิม (Pinecone, LanceDB) OpenViking
โมเดลการจัดเก็บ เวกเตอร์เรียบ ระบบไฟล์ลำดับชั้น
การเรียกคืน Top-K similarity Directory recursive + Intent
การสังเกตผล กล่องดำ แสดงภาพเส้นทางค้นหา
ประสิทธิภาพโทเค็น โหลดทั้งหมด/ตัดทอน โหลดก้าวหน้า L0/L1/L2
memory repeat manual/ไม่มี จัดการเซสชันอัตโนมัติ
ประเภทบริบท เฉพาะเอกสาร ทรัพยากร, ความทรงจำ, ทักษะรวม
การดีบัก คาดเดา บันทึกเส้นทางการค้นหา

Top comments (0)