التخزين المؤقت للموجّه
يعني التخزين المؤقت للموجّه أن مزوّد النموذج يمكنه إعادة استخدام بادئات الموجّه غير المتغيرة (عادةً تعليمات النظام/المطوّر والسياق المستقر الآخر) عبر الأدوار بدلًا من إعادة معالجتها في كل مرة. يقوم OpenClaw بتوحيد استخدام المزوّد إلىcacheRead وcacheWrite عندما تكشف واجهة API المصدر عن هذه العدادات مباشرةً.
يمكن لأسطح الحالة أيضًا استعادة عدادات التخزين المؤقت من أحدث سجل استخدام
للنص الحواري عندما تفتقد لقطة الجلسة الحية إليها، بحيث يمكن لأمر /status أن يستمر
في عرض سطر التخزين المؤقت بعد فقدان جزئي لبيانات تعريف الجلسة. ولا تزال قيم
التخزين المؤقت الحية الحالية غير الصفرية تحظى بالأولوية على قيم الاسترجاع من النص الحواري.
أهمية ذلك: تكلفة رموز أقل، واستجابات أسرع، وأداء أكثر قابلية للتنبؤ للجلسات طويلة التشغيل. بدون التخزين المؤقت، تدفع المطالبات المتكررة تكلفة الموجّه كاملة في كل دور حتى عندما لا يتغير معظم الإدخال.
تغطي هذه الصفحة جميع عناصر التحكم المتعلقة بالتخزين المؤقت التي تؤثر في إعادة استخدام الموجّه وتكلفة الرموز.
مراجع المزوّد:
- التخزين المؤقت للموجّه في Anthropic: https://platform.claude.com/docs/en/build-with-claude/prompt-caching
- التخزين المؤقت للموجّه في OpenAI: https://developers.openai.com/api/docs/guides/prompt-caching
- رؤوس OpenAI API ومعرّفات الطلبات: https://developers.openai.com/api/reference/overview
- معرّفات طلبات Anthropic والأخطاء: https://platform.claude.com/docs/en/api/errors
عناصر التحكم الأساسية
cacheRetention (الافتراضي العام، والنموذج، ولكل وكيل)
عيّن الاحتفاظ بالتخزين المؤقت كافتراضي عام لجميع النماذج:
agents.defaults.params(الافتراضي العام — ينطبق على جميع النماذج)agents.defaults.models["provider/model"].params(تجاوز لكل نموذج)agents.list[].params(معرّف الوكيل المطابق؛ يتجاوز حسب المفتاح)
contextPruning.mode: "cache-ttl"
يُشذّب سياق نتائج الأدوات القديمة بعد نوافذ TTL الخاصة بالتخزين المؤقت حتى لا تعيد الطلبات بعد فترات الخمول تخزين سجل كبير الحجم مؤقتًا مرة أخرى.
نبضات الإبقاء على السخونة
يمكن لنبضات الإبقاء على السخونة الحفاظ على دفء نوافذ التخزين المؤقت وتقليل عمليات كتابة التخزين المؤقت المتكررة بعد فجوات الخمول.agents.list[].heartbeat.
سلوك المزوّد
Anthropic (واجهة API مباشرة)
cacheRetentionمدعوم.- مع ملفات تعريف مصادقة مفتاح API الخاصة بـ Anthropic، يضبط OpenClaw القيمة
cacheRetention: "short"افتراضيًا لمراجع نماذج Anthropic عندما لا تكون معيّنة. - تكشف استجابات Messages الأصلية من Anthropic كلًا من
cache_read_input_tokensوcache_creation_input_tokens، لذلك يمكن لـ OpenClaw عرض كل منcacheReadوcacheWrite. - بالنسبة إلى طلبات Anthropic الأصلية، تُطابِق
cacheRetention: "short"التخزين المؤقت المؤقت الافتراضي لمدة 5 دقائق، وتُرقّيcacheRetention: "long"إلى TTL لمدة ساعة واحدة فقط على مضيفاتapi.anthropic.comالمباشرة.
OpenAI (واجهة API مباشرة)
- يكون التخزين المؤقت للموجّه تلقائيًا على النماذج الحديثة المدعومة. لا يحتاج OpenClaw إلى حقن علامات تخزين مؤقت على مستوى الكتل.
- يستخدم OpenClaw القيمة
prompt_cache_keyللحفاظ على استقرار توجيه التخزين المؤقت عبر الأدوار، ويستخدمprompt_cache_retention: "24h"فقط عند اختيارcacheRetention: "long"على مضيفات OpenAI المباشرة. - تكشف استجابات OpenAI عن رموز الموجّه المخزنة مؤقتًا عبر
usage.prompt_tokens_details.cached_tokens(أوinput_tokens_details.cached_tokensفي أحداث Responses API). ويحوّل OpenClaw ذلك إلىcacheRead. - لا يكشف OpenAI عن عدّاد منفصل لرموز كتابة التخزين المؤقت، لذلك تبقى
cacheWriteعند0في مسارات OpenAI حتى عندما يكون المزوّد يدفئ التخزين المؤقت. - يعيد OpenAI رؤوس تتبع وحدود معدل مفيدة مثل
x-request-idوopenai-processing-msوx-ratelimit-*، لكن يجب أن يأتي احتساب إصابات التخزين المؤقت من حمولة الاستخدام، وليس من الرؤوس. - عمليًا، غالبًا ما يتصرف OpenAI كتخزين مؤقت للبادئة الأولية بدلًا من إعادة استخدام السجل الكامل المتحرك على طريقة Anthropic. يمكن أن تستقر الأدوار ذات النص الطويل المستقر قرب مستوى
4864من الرموز المخزنة مؤقتًا في الاختبارات الحية الحالية، بينما غالبًا ما تستقر النصوص الحوارية الثقيلة بالأدوات أو بأسلوب MCP قرب4608رمزًا مخزنًا مؤقتًا حتى مع التكرارات المتطابقة.
Anthropic Vertex
- تدعم نماذج Anthropic على Vertex AI (
anthropic-vertex/*)cacheRetentionبالطريقة نفسها مثل Anthropic المباشر. - تُطابِق
cacheRetention: "long"القيمة TTL الفعلية لمدة ساعة واحدة لذاكرة التخزين المؤقت للموجّه على نقاط نهاية Vertex AI. - يتطابق الاحتفاظ الافتراضي بالتخزين المؤقت لـ
anthropic-vertexمع افتراضيات Anthropic المباشر. - تُوجَّه طلبات Vertex عبر تشكيل تخزين مؤقت واعٍ بالحدود حتى تبقى إعادة استخدام التخزين المؤقت متوافقة مع ما يتلقاه المزوّدون فعليًا.
Amazon Bedrock
- تدعم مراجع نماذج Anthropic Claude (
amazon-bedrock/*anthropic.claude*) تمريرcacheRetentionالصريح. - تُفرَض القيمة
cacheRetention: "none"وقت التشغيل على نماذج Bedrock غير التابعة لـ Anthropic.
نماذج Anthropic عبر OpenRouter
بالنسبة إلى مراجع النماذجopenrouter/anthropic/*، يقوم OpenClaw بحقن
cache_control الخاص بـ Anthropic في كتل موجّه النظام/المطوّر لتحسين إعادة
استخدام التخزين المؤقت للموجّه فقط عندما يظل الطلب موجّهًا إلى مسار OpenRouter
متحقق منه (openrouter على نقطة النهاية الافتراضية الخاصة به، أو أي مزوّد/عنوان أساسي
يُحل إلى openrouter.ai).
إذا أعدت توجيه النموذج إلى عنوان proxy عشوائي متوافق مع OpenAI، فسيتوقف OpenClaw
عن حقن علامات التخزين المؤقت الخاصة بـ Anthropic وOpenRouter.
مزوّدون آخرون
إذا كان المزوّد لا يدعم وضع التخزين المؤقت هذا، فلن يكون لـcacheRetention أي تأثير.
Google Gemini API مباشرة
- ينقل Gemini المباشر (
api: "google-generative-ai") إصابات التخزين المؤقت عبرcachedContentTokenCountمن المصدر؛ ويحوّل OpenClaw ذلك إلىcacheRead. - عند تعيين
cacheRetentionعلى نموذج Gemini مباشر، ينشئ OpenClaw تلقائيًا مواردcachedContentsويعيد استخدامها ويحدّثها لموجّهات النظام في عمليات Google AI Studio. وهذا يعني أنك لم تعد بحاجة إلى إنشاء مقبض cached-content مسبقًا يدويًا. - لا يزال بإمكانك تمرير مقبض Gemini cached-content موجود مسبقًا
عبر
params.cachedContent(أوparams.cached_contentالقديم) على النموذج المهيأ. - هذا منفصل عن التخزين المؤقت لبادئة الموجّه في Anthropic/OpenAI. بالنسبة إلى Gemini،
يدير OpenClaw مورد
cachedContentsأصليًا من المزوّد بدلًا من حقن علامات تخزين مؤقت في الطلب.
استخدام JSON في Gemini CLI
- يمكن لمخرجات JSON في Gemini CLI أيضًا إظهار إصابات التخزين المؤقت عبر
stats.cached؛ ويحوّل OpenClaw ذلك إلىcacheRead. - إذا أغفل CLI قيمة
stats.inputمباشرةً، يشتق OpenClaw رموز الإدخال منstats.input_tokens - stats.cached. - هذا مجرد توحيد للاستخدام. ولا يعني أن OpenClaw ينشئ علامات تخزين مؤقت للموجّه بأسلوب Anthropic/OpenAI من أجل Gemini CLI.
حد التخزين المؤقت لموجّه النظام
يقسّم OpenClaw موجّه النظام إلى بادئة مستقرة ولاحقة متقلبة يفصل بينهما حد داخلي لبادئة التخزين المؤقت. يتم ترتيب المحتوى فوق الحد (تعريفات الأدوات، وبيانات Skills، وملفات مساحة العمل، وغيرها من السياقات الثابتة نسبيًا) بحيث يبقى مطابقًا بايتًا لبايت عبر الأدوار. أما المحتوى أسفل الحد (مثلHEARTBEAT.md والطوابع الزمنية وقت التشغيل
وغيرها من البيانات الوصفية الخاصة بكل دور) فيُسمح له بالتغير
من دون إبطال البادئة المخزنة مؤقتًا.
خيارات التصميم الأساسية:
- تُرتَّب ملفات سياق مشروع مساحة العمل المستقرة قبل
HEARTBEAT.mdبحيث لا يؤدي تغيّر نبضات الإبقاء على السخونة إلى إفساد البادئة المستقرة. - يُطبَّق الحد عبر تشكيل الطلبات لعائلة Anthropic وعائلة OpenAI وGoogle وCLI بحيث تستفيد جميع المزوّدات المدعومة من الاستقرار نفسه للبادئة.
- تُوجَّه طلبات Codex Responses وAnthropic Vertex عبر تشكيل تخزين مؤقت واعٍ بالحدود بحيث تبقى إعادة استخدام التخزين المؤقت متوافقة مع ما يتلقاه المزوّدون فعليًا.
- تُطبَّع بصمات موجّه النظام (المسافات البيضاء، ونهايات الأسطر، والسياق المضاف بواسطة hooks، وترتيب قدرات وقت التشغيل) بحيث تشترك الموجّهات غير المتغيرة دلاليًا في KV/التخزين المؤقت عبر الأدوار.
cacheWrite بعد تغيير في الإعدادات أو مساحة العمل،
فتحقق مما إذا كان التغيير يقع فوق حد التخزين المؤقت أو تحته. غالبًا ما يؤدي نقل
المحتوى المتقلب إلى أسفل الحد (أو تثبيته) إلى حل المشكلة.
وسائل الحماية من ثبات التخزين المؤقت في OpenClaw
يحافظ OpenClaw أيضًا على حتمية عدة أشكال من الحمولات الحساسة للتخزين المؤقت قبل أن يصل الطلب إلى المزوّد:- تُفرَز كتالوجات أدوات MCP المجمّعة بشكل حتمي قبل
تسجيل الأدوات، بحيث لا تؤدي تغييرات ترتيب
listTools()إلى تقلب كتلة الأدوات وإفساد بادئات التخزين المؤقت للموجّه. - تحتفظ الجلسات القديمة ذات كتل الصور المحفوظة بأحدث 3 أدوار مكتملة كما هي؛ ويمكن استبدال كتل الصور القديمة التي تمت معالجتها بالفعل بعلامة حتى لا تستمر المتابعات الثقيلة بالصور في إعادة إرسال حمولات كبيرة قديمة.
أنماط الضبط
حركة مختلطة (الافتراضي الموصى به)
احتفظ بخط أساس طويل العمر على وكيلك الرئيسي، وعطّل التخزين المؤقت على وكلاء الإشعارات المتقطعين:خط أساس يركز على التكلفة أولًا
- عيّن خط الأساس على
cacheRetention: "short". - فعّل
contextPruning.mode: "cache-ttl". - أبقِ نبضات الإبقاء على السخونة أقل من TTL فقط للوكلاء الذين يستفيدون من التخزين المؤقت الدافئ.
تشخيصات التخزين المؤقت
يكشف OpenClaw عن تشخيصات مخصصة لتتبع التخزين المؤقت لتشغيلات الوكلاء المضمّنة. بالنسبة إلى التشخيصات العادية الموجهة للمستخدم، يمكن لـ/status وملخصات الاستخدام الأخرى استخدام
أحدث إدخال استخدام في النص الحواري كمصدر احتياطي لـ cacheRead /
cacheWrite عندما لا يحتوي إدخال الجلسة الحية على هذه العدادات.
اختبارات الانحدار الحية
يحتفظ OpenClaw ببوابة انحدار حية واحدة مدمجة للبادئات المتكررة، وأدوار الأدوات، وأدوار الصور، والنصوص الحوارية للأدوات بأسلوب MCP، وحالة تحكم بدون تخزين مؤقت لـ Anthropic.src/agents/live-cache-regression.live.test.tssrc/agents/live-cache-regression-baseline.ts
التوقعات الحية لـ Anthropic
- توقّع عمليات كتابة تهيئة صريحة عبر
cacheWrite. - توقّع إعادة استخدام شبه كاملة للسجل في الأدوار المتكررة لأن التحكم في التخزين المؤقت لدى Anthropic يقدّم نقطة توقف التخزين المؤقت عبر المحادثة.
- لا تزال التأكيدات الحية الحالية تستخدم حدودًا مرتفعة لمعدلات الإصابة للمسارات المستقرة ومسارات الأدوات والصور.
التوقعات الحية لـ OpenAI
- توقّع
cacheReadفقط. وتبقىcacheWriteعند0. - تعامل مع إعادة استخدام التخزين المؤقت في الأدوار المتكررة على أنها مستوى ثابت خاص بالمزوّد، وليس إعادة استخدام متحركة للسجل الكامل بأسلوب Anthropic.
- تستخدم التأكيدات الحية الحالية فحوصات دنيا متحفظة مستمدة من السلوك الحي المرصود على
gpt-5.4-mini:- بادئة مستقرة:
cacheRead >= 4608، معدل الإصابة>= 0.90 - نص حواري للأدوات:
cacheRead >= 4096، معدل الإصابة>= 0.85 - نص حواري للصور:
cacheRead >= 3840، معدل الإصابة>= 0.82 - نص حواري بأسلوب MCP:
cacheRead >= 4096، معدل الإصابة>= 0.85
- بادئة مستقرة:
- بادئة مستقرة:
cacheRead=4864، معدل الإصابة0.966 - نص حواري للأدوات:
cacheRead=4608، معدل الإصابة0.896 - نص حواري للصور:
cacheRead=4864، معدل الإصابة0.954 - نص حواري بأسلوب MCP:
cacheRead=4608، معدل الإصابة0.891
88s.
سبب اختلاف التأكيدات:
- يكشف Anthropic عن نقاط توقف تخزين مؤقت صريحة وإعادة استخدام متحركة لسجل المحادثة.
- لا يزال التخزين المؤقت للموجّه في OpenAI حساسًا للبادئة المطابقة تمامًا، لكن البادئة الفعلية القابلة لإعادة الاستخدام في حركة Responses الحية قد تستقر مبكرًا قبل الموجّه الكامل.
- لذلك، فإن مقارنة Anthropic وOpenAI باستخدام حد نسبة مئوية واحد عبر المزوّدين تُنشئ إنذارات انحدار كاذبة.
إعداد diagnostics.cacheTrace
filePath:$OPENCLAW_STATE_DIR/logs/cache-trace.jsonlincludeMessages:trueincludePrompt:trueincludeSystem:true
مفاتيح التبديل البيئية (لتصحيح الأعطال لمرة واحدة)
OPENCLAW_CACHE_TRACE=1يفعّل تتبع التخزين المؤقت.OPENCLAW_CACHE_TRACE_FILE=/path/to/cache-trace.jsonlيتجاوز مسار الإخراج.OPENCLAW_CACHE_TRACE_MESSAGES=0|1يبدّل التقاط حمولة الرسائل الكاملة.OPENCLAW_CACHE_TRACE_PROMPT=0|1يبدّل التقاط نص الموجّه.OPENCLAW_CACHE_TRACE_SYSTEM=0|1يبدّل التقاط موجّه النظام.
ما الذي يجب فحصه
- أحداث تتبع التخزين المؤقت بتنسيق JSONL وتتضمن لقطات مرحلية مثل
session:loadedوprompt:beforeوstream:contextوsession:after. - يظهر تأثير رموز التخزين المؤقت لكل دور في أسطح الاستخدام العادية عبر
cacheReadوcacheWrite(مثل/usage fullوملخصات استخدام الجلسات). - بالنسبة إلى Anthropic، توقّع وجود كل من
cacheReadوcacheWriteعندما يكون التخزين المؤقت نشطًا. - بالنسبة إلى OpenAI، توقّع
cacheReadعند إصابات التخزين المؤقت وأن تبقىcacheWriteعند0؛ إذ لا ينشر OpenAI حقلًا منفصلًا لرموز كتابة التخزين المؤقت. - إذا كنت تحتاج إلى تتبع الطلبات، فسجّل معرّفات الطلبات ورؤوس حدود المعدل بشكل منفصل عن مقاييس التخزين المؤقت. يركز مخرج تتبع التخزين المؤقت الحالي في OpenClaw على شكل الموجّه/الجلسة واستخدام الرموز الموحّد بدلًا من رؤوس استجابة المزوّد الخام.
استكشاف الأخطاء وإصلاحها بسرعة
- ارتفاع
cacheWriteفي معظم الأدوار: تحقق من مدخلات موجّه النظام المتقلبة وتأكد من أن النموذج/المزوّد يدعم إعدادات التخزين المؤقت الخاصة بك. - ارتفاع
cacheWriteفي Anthropic: يعني غالبًا أن نقطة توقف التخزين المؤقت تقع على محتوى يتغير في كل طلب. - انخفاض
cacheReadفي OpenAI: تحقق من أن البادئة المستقرة موجودة في المقدمة، وأن البادئة المتكررة لا تقل عن 1024 رمزًا، وأنprompt_cache_keyنفسه يُعاد استخدامه للأدوار التي يجب أن تشترك في التخزين المؤقت. - لا يوجد تأثير من
cacheRetention: تأكد من أن مفتاح النموذج يطابقagents.defaults.models["provider/model"]. - طلبات Bedrock Nova/Mistral مع إعدادات التخزين المؤقت: من المتوقع فرضها وقت التشغيل إلى
none.