الملخص
OpenViking هو قاعدة بيانات سياق مفتوحة المصدر لوكلاء الذكاء الاصطناعي، تحل محل تخزين المتجهات المسطح بنموذج نظام الملفات. يقوم بتنظيم السياق (الذكريات، الموارد، المهارات) تحت معرفات الموارد الموحدة (URIs) viking:// بثلاث طبقات: L0 (حوالي 100 رمز)، L1 (حوالي 2 ألف رمز)، L2 (المحتوى الكامل). تظهر الاختبارات المعيارية انخفاضًا بنسبة 91% في تكلفة الرموز وتحسنًا بنسبة 43% في إكمال المهام مقارنة بأنظمة RAG التقليدية.
مقدمة
وكيل الذكاء الاصطناعي الخاص بك غالبًا ما ينسى التفاصيل. قد يكرر نفس طلب API مرتين، يتجاهل تفضيلاتك لبيئة الاختبار (staging)، أو يفقد سجل نجاحات الاختبارات السابقة.
هذا هو التحدي الحالي في بناء الوكلاء. تعتمد معظم الفرق على حلول RAG وقواعد بيانات المتجهات وأنظمة ذاكرة مخصصة. النتيجة: سياق مجزأ، وتكاليف رموز مرتفعة، وفشل استرجاع صامت.
البيانات تدعم ذلك. في اختبارات معيارية باستخدام LoCoMo10، أنظمة RAG التقليدية أكملت 35-44% فقط من المهام، واستنزفت 24-51 مليون رمز إدخال.
OpenViking يقدم حلاً مختلفًا. تم تطويره من فريق ByteDance، يعتمد نموذج نظام الملفات ويجمع كل السياق تحت URIs viking:// مع تحميل هرمي L0/L1/L2. النتيجة: 52% إكمال للمهام مع 91% رموز أقل.
💡 لمطوري Apidog: يمكن دمج OpenViking لوكلاء اختبار API لحفظ سياق المحادثة عبر الجلسات، وتذكر تفضيلات بيئة المستخدم، وتخزين وثائق API لاسترجاع دلالي فعال.
في هذا الدليل، ستتعلم عمليًا كيفية معالجة OpenViking لتجزئة السياق، سترى نموذج L0/L1/L2 قيد التنفيذ، وتطلق أول خادم لك في دقائق.
مشكلة سياق الوكيل
وكلاء الذكاء الاصطناعي يواجهون تحديات سياقية غير موجودة في التطبيقات التقليدية.
تخيل وكيلًا يساعد المطورين باختبار APIs. على مدار أسبوع يحتاج لتتبع:
- تفضيلات المستخدم (مثل "بيئة اختبار"، "curl بدل بايثون")
- سياق المشروع (نقاط النهاية، طرق المصادقة، نتائج الاختبار)
- أنماط الأدوات (نقاط الفشل، أخطاء المخطط الشائعة)
- سجل المهام (ما الذي تم اختباره، ما هي الأخطاء)
أنظمة RAG التقليدية تخزن هذا كسجلات متجهات مسطحة. الاسترجاع يعيد أفضل K شريحة بلا بنية، بلا تسلسل هرمي، ولا رؤية شاملة.
خمسة تحديات أساسية
OpenViking يحدد التحديات التالية في إدارة سياق الوكلاء:
| التحدي | RAG التقليدي | حل OpenViking |
|---|---|---|
| سياق مجزأ | الذكريات/المهارات/الموارد منفصلة | نموذج نظام ملفات موحد viking://
|
| طلب متزايد | سياق ضخم عند المهام الطويلة | تحميل هرمي L0/L1/L2 يقلل الرموز 91% |
| استرجاع ضعيف | بحث متجهات مسطح بلا رؤية | استرجاع تكراري للمجلدات وتحليل النية |
| غير قابل للمراقبة | استرجاع صندوق أسود | مسارات بحث مرئية لتصحيح الأخطاء |
| تكرار محدود | سجل تفاعل المستخدم فقط | إدارة جلسات تلقائية مع 6 فئات ذاكرة |
التحول هنا: من "تخزين كل شيء، استرجاع مبهم" إلى "هيكلة كل شيء، استرجاع دقيق".
ما هو OpenViking؟
OpenViking هو قاعدة بيانات سياق مفتوحة المصدر (Apache 2.0) للوكلاء، أنشأها فريق ByteDance.
يوحد جميع السياقات في نظام ملفات افتراضي. كل ذاكرة/مورد/مهارة تحت URI فريد:
viking://
├── resources/
│ ├── my_project/
│ │ ├── docs/
│ │ │ ├── api/
│ │ │ └── tutorials/
│ │ └── src/
│ └── ...
├── user/
│ └── memories/
│ ├── preferences/
│ │ ├── writing_style
│ │ └── coding_habits
│ └── ...
└── agent/
├── skills/
│ ├── search_code
│ ├── analyze_data
├── memories/
└── instructions/
يمكن للوكلاء الآن:
- تصفح المجلدات (
ls viking://resources/my_project/docs/) - بحث دلالي (
find "authentication methods") - قراءة المحتوى (
read viking://resources/docs/auth.md) - ملخص سريع (
abstract viking://resources/docs/)
فكر فيها كبحث منظم بدل عن بحث عشوائي في كتل نصية.
الميزة الأساسية 1: نموذج إدارة نظام الملفات
نموذج نظام الملفات يوحد كل أنواع السياق.
ثلاثة أنواع من السياق
| النوع | الغرض | دورة الحياة | المبادرة |
|---|---|---|---|
| مورد | معرفة خارجية (وثائق، كود) | ثابت وطويل الأمد | يضيفه المستخدم |
| ذاكرة | ملاحظة الوكيل (تفضيلات ...) | ديناميكي وطويل | يستخرجه الوكيل |
| مهارة | قدرات قابلة للاستدعاء | ثابت وطويل | يستدعيه الوكيل |
أمثلة مسارات:
-
viking://resources/: مستندات، مستودعات كود -
viking://user/memories/: تفضيلات، كيانات، أحداث -
viking://agent/skills/: أدوات، إعدادات -
viking://agent/memories/: أنماط ودراسات حالة
واجهة برمجة تطبيقات شبيهة بيونكس
عمليات مألوفة عبر الـ SDK أو الخادم:
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/")
تعمل عبر SDK بايثون أو خادم HTTP (متوافق مع أي إطار عمل للوكلاء).
الميزة الأساسية 2: تحميل السياق الهرمي L0/L1/L2
حشو كامل السياق مكلف. OpenViking يعالج كل مورد إلى ثلاث طبقات:
| الطبقة | الاسم | الملف | حد الرمز | الغرض |
|---|---|---|---|---|
| L0 | ملخص | .abstract.md |
~100 | بحث متجهات، تصفية سريع |
| L1 | نظرة عامة | .overview.md |
~2K | تنقل/إعادة ترتيب |
| L2 | التفاصيل | الملف الأصلي | غير محدود | محتوى كامل عند الطلب |
كيف يعمل عمليًا
عند إضافة مورد (مثلاً PDF):
- تحليل المستند إلى نص.
- بناء شجرة مجلدات AGFS.
- إدراج مهمة المعالجة الدلالية.
- توليد ملخصات L0/L1 تلقائيًا.
هيكل النتيجة:
viking://resources/my_project/
├── .abstract.md
├── .overview.md
├── docs/
│ ├── .abstract.md
│ ├── .overview.md
│ ├── auth.md
│ ├── endpoints.md
│ └── rate-limits.md
└── src/
تقليل تكلفة الرموز
# RAG التقليدي: تحميل كل شيء
full_docs = retrieve_all("authentication") # 50k tokens
# OpenViking: ابدأ بـ L1 فقط
overview = client.overview("viking://resources/docs/auth/") # 2k tokens
if needs_more_detail(overview):
content = client.read("viking://resources/docs/auth/oauth.md")
في الاختبارات: وفر 91% من الرموز، وزاد إكمال المهام بـ43%.
الميزة الأساسية 3: الاسترجاع التكراري للمجلدات
البحث المتجهي الفردي محدود مع الاستعلامات المعقدة. OpenViking يستخدم استراتيجية تكرارية:
خمس خطوات عملية:
1. تحليل النية
2. تحديد المواقع الأولية (العثور على مجلدات ذات صلة)
3. استكشاف محسن (بحث داخل المجلدات)
4. هبوط تكراري (التعمق في المجلدات الفرعية)
5. تجميع النتائج
مثال عملي لاستعلام "كيف أقوم بمصادقة المستخدمين؟":
- تحليل النية → كيانات: "مصادقة"، "مستخدمين"
- بحث متجهات يحدد مجلدات:
viking://resources/docs/auth/, ... - بحث ثانوي يحدد:
viking://resources/docs/auth/oauth.md - تكرار إذا وجدت مجلدات فرعية
- النتائج مصنفة مع مسار واضح
هذه الاستراتيجية تعطي نتائج غنية وسياقًا دقيقًا.
الميزة الأساسية 4: آثار الاسترجاع المرئية
RAG التقليدي صندوق أسود. OpenViking يوفر تتبعًا مرئيًا لكل خطوة استرجاع:
تتبع الاسترجاع لاستعلام: "تحديث رمز OAuth"
├── viking://resources/docs/
│ ├── [0.45] .abstract.md: تم تخطيه
│ └── [0.89] auth/: تم اختياره
│ ├── [0.92] oauth.md: تم إرجاعه
│ ├── [0.34] jwt.md: تم تخطيه
│ └── [0.78] providers/
│ └── [0.85] google.md: تم إرجاعه
يمكنك تصحيح الأخطاء بدقة: معرفة لماذا تم تخطي ملف أو اختيار آخر.
الميزة الأساسية 5: إدارة الجلسات التلقائية
OpenViking يدير حلقة تكرار ذاكرة تلقائية في نهاية كل جلسة.
ست فئات للذاكرة
| الفئة | المالك | الموقع | الوصف | تحديث |
|---|---|---|---|---|
| ملف شخصي | المستخدم | user/memories/.overview.md | معلومات أساسية | إلحاق |
| تفضيلات | المستخدم | user/memories/preferences/ | حسب الموضوع | إلحاق |
| كيانات | المستخدم | user/memories/entities/ | أشخاص/مشاريع | إلحاق |
| أحداث | المستخدم | user/memories/events/ | قرارات/معالم | لا تحديث |
| حالات | الوكيل | agent/memories/cases/ | حالات مستفادة | لا تحديث |
| أنماط | الوكيل | agent/memories/patterns/ | أنماط مستفادة | لا تحديث |
كيف يعمل استخراج الذاكرة
session = client.session()
await session.add_message("user", [{"type": "text", "text": "I prefer dark mode in the UI"}])
await session.add_message("assistant", [{"type": "text", "text": "Got it. I'll use dark mode for all future screenshots."}])
await session.add_usage({
"tool": "screenshot",
"parameters": {"theme": "dark"},
"result": "success"
})
await session.commit() # استخراج وتحديث الذاكرة تلقائيًا
عند الالتزام: يتم ضغط الجلسة، استخراج الذكريات، تحديث ملفات الذاكرة، وتوليد ملخصات L0/L1 تلقائيًا.
نظرة عامة على البنية
OpenViking يفصل بين المحتوى والفهرس:
| الطبقة | التقنية | يخزن |
|---|---|---|
| AGFS | نظام ملفات مخصص | محتوى L0/L1/L2، وسائط، علاقات |
| فهرس المتجهات | قاعدة بيانات متجهات | URIs، تضمينات، بيانات وصفية |
الاستعلامات تقرأ من AGFS، الفهرس خفيف الوزن فقط.
بدء سريع: نشر أول خادم OpenViking الخاص بك
المتطلبات الأساسية
- Python 3.10+
- Go 1.22+ (لـ AGFS)
- C++ Compiler: GCC 9+ أو Clang 11+
- نظام التشغيل: Linux أو macOS أو Windows
الخطوة 1: تثبيت OpenViking
pip install openviking --upgrade --force-reinstall
اختياريًا: واجهة CLI Rust
curl -fsSL https://raw.githubusercontent.com/volcengine/OpenViking/main/crates/ov_cli/install.sh | bash
الخطوة 2: تهيئة النماذج
OpenViking يحتاج:
- نموذج VLM (فهم الصور/المحتوى)
- نموذج تضمين (البحث الدلالي)
أنشئ ~/.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
}
}
المزودون المدعمون
| المزود | نماذج التضمين | نماذج VLM |
|---|---|---|
| volcengine | doubao-embedding-vision | doubao-seed-2.0-pro |
| openai | text-embedding-3-large | gpt-4o, gpt-4-vision |
| litellm | عبر LiteLLM Proxy | Claude, Gemini, DeepSeek ... |
الخطوة 3: بدء تشغيل الخادم
openviking-server
أو في الخلفية:
nohup openviking-server > /data/log/openviking.log 2>&1 &
الخطوة 4: إضافة أول مورد
# 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")
الخطوة 5: البحث والاسترجاع
ov find "authentication methods"
ov ls viking://resources/
ov tree viking://resources/docs -L 2
ov grep "OAuth" --uri viking://resources/docs/
الخطوة 6: تمكين VikingBot (اختياري)
pip install "openviking[bot]"
openviking-server --with-bot
# نافذة أخرى:
ov chat
اختبارات الأداء المعيارية
تم اختبار OpenViking مع LoCoMo10 مقابل RAG (LanceDB) وأنظمة الذاكرة الأصلية.
معدلات إكمال المهام
| النظام | معدل الإنجاز | رموز الإدخال |
|---|---|---|
| OpenClaw (ذاكرة أصلية) | 35.65% | 24.6 مليون |
| OpenClaw + LanceDB | 44.55% | 51.6 مليون |
| OpenClaw + OpenViking | 52.08% | 4.3 مليون |
النتيجة: 43% تحسن بـ 91% رموز أقل.
دمج OpenViking مع Apidog
يمكن لمستخدمي Apidog دمج OpenViking لحفظ السياق وتذكر تفضيلات المستخدم وتخزين الوثائق.
الخطوة 1: إعداد خادم OpenViking
اتبع خطوات البدء السريع ونماذجك المفضلة.
الخطوة 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
سيتم استيراد الوثائق ومعالجتها تلقائيًا عبر L0/L1/L2.
الخطوة 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: الاتصال بإطار عمل الوكيل
# 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"}
)
تقنيات متقدمة وأفضل الممارسات
نصائح احترافية للإنتاج
1. التسخين المسبق للسياق
ov add-resource https://docs.example.com --wait
2. انتهاء صلاحية السياق
await session.archive(max_age_days=7)
3. مراقبة صحة الفهرس
ov debug stats
أخطاء شائعة يجب تجنبها
- تحميل L2 مبكرًا: ابدأ دومًا بـ L0/L1.
- نسيان الالتزام بالجلسة: استخراج الذاكرة يحدث عند الالتزام فقط.
- تحميل مجلدات ضخمة: قسم الموارد الضخمة لمجلدات فرعية.
- تجاهل آثار الاسترجاع: استخدمها لتصحيح النتائج الضعيفة.
تحسين الأداء
| السيناريو | التوصية |
|---|---|
| استعلام كثيف | شغّل كخادم HTTP مع تجميع الاتصالات |
| مستندات ضخمة | قسمها حسب الموضوع قبل الاستيراد |
| زمن استجابة منخفض | أنشئ L0/L1 مسبقًا للمحتوى المهم |
| متعدد المستأجرين | استخدم مساحات عمل منفصلة |
أفضل ممارسات الأمان
- خزن مفاتيح API بمتغيرات البيئة أو مدير الأسرار
- فعّل HTTPS لكل خوادم HTTP
- حدّد المعدل للنقاط العامة
- استخدم مفاتيح منفصلة للتطوير والإنتاج
حالات الاستخدام الواقعية
1. مساعدو البرمجة بالذكاء الاصطناعي
- تصفح المشروع عبر
viking://resources/my_project/src/ - يتذكر تفضيلات البرمجة
- يسترجع وثائق API ذات الصلة
النتيجة: انخفاض النسيان 67%، وتوفير 43% رموز.
2. وكلاء دعم العملاء
- وثائق المنتج تحت
viking://resources/product/ - سجل المحادثات في
viking://user/memories/past_issues/ - كتيبات الدعم كمهارات
النتيجة: حل مشكلات من أول اتصال ارتفع من 52% إلى 71%.
3. مساعدو البحث
- تصنيف الأوراق حسب الموضوع في
viking://resources/papers/nlp/ - منهجيات البحث كمهارات
- استخراج تلقائي للنتائج الرئيسية
النتيجة: البحث عن الأوراق 3x أسرع.
البدائل والمقارنات
OpenViking مقابل قواعد بيانات المتجهات التقليدية
| الجانب | RAG التقليدي | OpenViking |
|---|---|---|
| التخزين | قطع متجهات مسطحة | نظام ملفات هرمي |
| الاسترجاع | التشابه أعلى K | استرجاع تكراري وتحليل نية |
| المراقبة | صندوق أسود | آثار بحث مرئية |
| الرموز | تحميل الكل أو الاقتطاع | تحميل تدريجي L0/L1/L2 |
| تكرار الذاكرة | يدوي أو غير مدعوم | إدارة جلسات تلقائية |
| أنواع السياق | مستندات فقط | موارد/ذكريات/مهارات موحدة |
| تصحيح الأخطاء | تخمين | سجلات اجتياز مجلدات |
OpenViking مقابل ذاكرة LangChain
| الجانب | ذاكرة LangChain | OpenViking |
|---|---|---|
| الاستمرارية | مخزن مؤقت للمحادثة فقط | نظام ملفات كامل L0/L1/L2 |
| التوسع | محدود بنافذة السياق | تحميل هرمي بلا حد صارم |
| الاسترجاع | بحث خطي | استرجاع تكراري ودلالي |
| أنواع الذاكرة | مخزن مؤقت واحد | 6 فئات (ملف شخصي/تفضيلات/أحداث...) |
متى تستخدم أي حل
- قواعد بيانات المتجهات: زمن استجابة < 100ms، بحث بسيط، لا مشاكل حالية
- OpenViking: محادثات طويلة، سياق متعدد الأنواع، توفير رموز، تصحيح ومراقبة
مقارنة مع RAG التقليدي
| الجانب | RAG التقليدي | OpenViking |
|---|---|---|
| التخزين | متجهات مسطحة | نظام ملفات هرمي |
| الاسترجاع | أعلى التشابه K | تكراري + تحليل نية |
| المراقبة | صندوق أسود | آثار بحث مرئية |
| كفاءة الرموز | تحميل الكل/اقتطاع | تحميل تدريجي L0/L1/L2 |
| تكرار الذاكرة | يدوي | تلقائي |
| أنواع السياق | مستندات فقط | موارد/ذكريات/مهارات موحدة |
| تصحيح الأخطاء | تخمين | سجلات اجتياز المجلدات |
النشر في بيئة الإنتاج
شغّل OpenViking كخدمة HTTP مستقلة.
البنية التحتية الموصى بها
- السحابة: Volcengine ECS أو ما يعادله
- نظام التشغيل: veLinux أو Ubuntu 22.04+
- التخزين: SSD لـ AGFS
- الشبكة: زمن استجابة منخفض مع واجهات برمجة النماذج
الأمان
- خزن مفاتيح API بمتغيرات البيئة أو مدير الأسرار
- فعّل المصادقة لكل نقاط النهاية HTTP
- استخدم HTTPS
- حدّد المعدل لمنع إساءة الاستخدام
المراقبة
يدعم OpenViking التسجيل والمقاييس:
{
"log": {
"level": "INFO",
"output": "file",
"path": "/var/log/openviking/server.log"
}
}
راقب: قائمة الانتظار، زمن الاستجابة، عمليات AGFS، نجاح استخراج الذاكرة.
القيود والاعتبارات
القيود الحالية
- يركز على Python: SDK رئيسي بايثون فقط، اللغات الأخرى عبر HTTP
- نماذج خارجية: يتطلب VLM و Embedding خارجيين
- منحنى تعلم: نموذج الملفات مختلف عن قواعد المتجهات
- تطوير نشط: APIs قد تتغير
متى تستخدم OpenViking
مناسب:
- محادثات طويلة الأمد تتطلب ذاكرة
- سياق متعدد الأنواع (وثائق/تفضيلات/أدوات)
- الحاجة لمراقبة وتصحيح الاسترجاع
- تحسين تكلفة الرموز
فكر ببدائل إذا:
- تطبيقات أسئلة/أجوبة بسيطة (مرة واحدة)
- لديك مسار RAG فعال بالفعل
- تحتاج زمن استجابة < 100ms
الطريق إلى الأمام
OpenViking في مرحلة مبكرة (0.1.x، 2025). خارطة الطريق تشمل:
- دعم متعدد المستأجرين
- تحليلات متقدمة
- نظام مكونات إضافية
- نشر خفيف الوزن محليًا
- دعم MCP متقدم
المشروع مفتوح المصدر (Apache 2.0)، الوثائق هنا.
الخلاصة
OpenViking يوفر نقلة نوعية لإدارة سياق وكلاء الذكاء الاصطناعي. النموذج القائم على الملفات ينهي التجزئة وهدر الرموز والاسترجاع الصندوق الأسود.
النقاط الرئيسية
-
نموذج ملفات يوحد السياق: كل الذكريات/المهارات/الموارد تحت URIs
viking:// - تحميل L0/L1/L2 يوفر الرموز: تدريجي بدل حشو الموجهات
- استرجاع تكراري للمجلدات: دقة أفضل في النتائج
- آثار مرئية للاسترجاع: تصحيح فعّال وسهل
- إدارة جلسات تلقائية: وكلاء يتعلمون مع كل تفاعل



Top comments (0)