สรุปสาระสำคัญ (TL;DR)
OpenViking คือฐานข้อมูลบริบทแบบโอเพนซอร์สสำหรับเอเจนต์ AI ที่มาแทนที่การจัดเก็บเวกเตอร์แบบเรียบด้วยระบบไฟล์ โดยจัดระเบียบบริบท (ความทรงจำ, ทรัพยากร, ทักษะ) ภายใต้ URI viking:// พร้อมเลเยอร์ L0 (100 โทเค็น), L1 (2k โทเค็น), L2 (เนื้อหาเต็ม) ทดสอบพบว่าลดต้นทุนโทเค็นได้ 91% และทำงานสำเร็จดีขึ้น 43% เมื่อเทียบกับ RAG แบบดั้งเดิม
บทนำ
เอเจนต์ 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://)
โครงสร้างไดเรกทอรี
viking://
├── resources/ # เอกสาร, โค้ด, เว็บ
├── user/ # การตั้งค่า, ความทรงจำผู้ใช้
├── agent/ # ทักษะ, memory, instructions
ตัวอย่างคำสั่ง
- นำทางไดเรกทอรี:
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/")
คุณสมบัติหลัก 2: การโหลดบริบทแบบ L0/L1/L2
OpenViking สร้างเลเยอร์อัตโนมัติ:
-
L0: บทคัดย่อ (~100 โทเค็น,
.abstract.md) -
L1: ภาพรวม (~2k โทเค็น,
.overview.md) - L2: เนื้อหาเต็ม (ไม่จำกัด, ไฟล์จริง)
วิธีการทำงาน
- แยกข้อความจากไฟล์
- สร้างโครงสร้างไดเรกทอรี AGFS
- คิวประมวลผล semantic async
- สร้าง 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")
ผลคือ ประหยัดโทเค็นอินพุต 91% และสำเร็จสูงขึ้น 43%
คุณสมบัติหลัก 3: การเรียกคืนแบบ Directory Recursive
OpenViking ใช้ขั้นตอน:
- วิเคราะห์เจตนา
- หาตำแหน่งไดเรกทอรีเริ่มต้น
- ค้นหาในไดเรกทอรีเป้าหมาย
- ลงลึกซ้ำในไดเรกทอรีย่อย
- รวมผล
ตัวอย่างเส้นทางการค้นหา:
เส้นทางการเรียกคืนข้อมูลสำหรับ "OAuth token refresh"
├── viking://resources/docs/
│ └── auth/
│ ├── oauth.md (score: 0.92)
│ └── providers/
│ └── google.md (score: 0.85)
คุณสมบัติหลัก 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()
เมื่อคอมมิต ระบบจะบีบอัดเซสชัน, ดึง memory, อัปเดตหน่วยความจำ และสร้าง L0/L1 ใหม่
ภาพรวมสถาปัตยกรรม
แยก 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
กำหนดค่าโมเดล
สร้างไฟล์ ~/.openviking/ov.conf (ดูตัวอย่างในบทความ) รองรับ OpenAI, volcengine, LiteLLM ฯลฯ
เริ่มเซิร์ฟเวอร์
openviking-server
# หรือ background
nohup openviking-server > /data/log/openviking.log 2>&1 &
เพิ่ม 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")
ค้นหาและดึงข้อมูล
ov find "authentication methods"
ov ls viking://resources/
ov tree viking://resources/docs -L 2
ov grep "OAuth" --uri viking://resources/docs/
เปิดใช้งาน VikingBot (ไม่บังคับ)
pip install "openviking[bot]"
openviking-server --with-bot
ov chat
เกณฑ์มาตรฐานประสิทธิภาพ
| ระบบ | อัตราความสำเร็จ | โทเค็นอินพุต |
|---|---|---|
| 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 และการตั้งค่าผู้ใช้
ขั้นตอน
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
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. เชื่อมต่อกับ 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"}
)
เทคนิคขั้นสูงและแนวปฏิบัติที่ดีที่สุด
เคล็ดลับสำหรับการใช้งานจริง
-
อุ่น L0/L1 ล่วงหน้า
ใช้
ov add-resource https://docs.example.com --waitเพื่อลด latency - ล้าง session เก่าอัตโนมัติ
await session.archive(max_age_days=7)
- ตรวจสอบดัชนีเวกเตอร์
ov debug stats
ข้อผิดพลาดที่ควรหลีกเลี่ยง
- โหลด L2 ก่อนเวลา – ใช้ L0/L1 ก่อนเสมอ
- ข้าม commit session – memory จะไม่ถูกดึงหากไม่ commit
- โหลดไดเรกทอรีเดียวมากเกินไป – ควรแบ่ง resource เป็นไดเรกทอรีย่อย
- ไม่ดูเส้นทางการเรียกคืนข้อมูล – ใช้เส้นทาง 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)