أنا أشغّل نظام متعدد الوكلاء في n8n Cloud بـ 11 سير عمل فرعي من Claude Haiku، كل منها يحتوي على 6-10 أدوات ويعمل بـ 8-10 تكرارات حلقة أدوات لكل تنفيذ. لأن النموذج يعيد إرسال رسالة النظام الكاملة + تعريفات الأدوات في كل تكرار من حلقة الأدوات، فإن رموز الإدخال تتراكم بسرعة حتى مع نموذج غير مكلف مثل Haiku. تخزين الرموز المؤقت للمحتوى سيقلل ذلك بشكل كبير وسيقلل زمن الاستجابة أيضاً.
عقدة lmChatAnthropic/AI Agent القياسية لا تكشف عن رؤوس التحكم في التخزين المؤقت. لا توجد طريقة لتحديد رسائل النظام أو تعريفات الأدوات كقابلة للتخزين المؤقت في تكامل LangChain المدمج. تم تقديم PR #22318 لهذا الغرض وتم إغلاقه دون دمج في مايو 2026. وبما أنني على n8n Cloud (وليس ذاتي الاستضافة)، فإن تصحيح أو عمل نسخة مفصولة من العقدة ليس خياراً.
الرافعة الوحيدة التي وجدتها هي عقدة HTTP Request، التي يمكنك استخدامها لصياغة استدعاء Anthropic API يدويّاً باستخدام رؤوس cache_control صحيحة. لكن هذا يعني إعادة بناء حلقة الأدوات يدويّاً، وهو ما يصبح معقداً بسرعة (توزيع الأدوات، حقن النتائج، منطق استمرار الحلقة كلها في عقد Code).
ما أستكشفه:
عامل Cloudflare يحقن cache_control بشفافية قبل الإعادة إلى Anthropic.
حلقة أدوات HTTP/Code يدويّة للوكلاء الأكثر إنفاقاً.
الانتظار حتى تضيف n8n الدعم الأصلي.
هل قام أي شخص بـ:
نشر طريقة حلقة الأدوات اليدويّة للعقدة HTTP؟ هل يمكن صيانتها؟
العثور على أنماط الوسيط/الوسيط التي تحقن cache_control دون إعادة بناء الحلقة؟
بالنسبة لأولئك على Cloud بالتحديد، هل وجدتم أي حلول بديلة أخرى؟
وثائق تخزين Anthropic المؤقت تجعلها تبدو مباشرة، لكن على مستوى API الخام، فهي مشكلة طبقة n8n بحتة. فضولي كيف يعمل الآخرون حول ذلك أو ما إذا كنتم قد وافقتم على التكلفة فحسب.
وكيل Cloudflare Worker هو المسار الأنظف بالنسبة لـ n8n Cloud - حيث تقوم بتوجيه جميع استدعاءات Anthropic API عبر Worker يعترض POST body، ويدرج "cache_control": {"type": "ephemeral"} في مصفوفة system وفي كل إدخال tools، ثم يعيد التوجيه إلى api.anthropic.com. بيانات اعتماد عقدة AI Agent لديك تشير فقط إلى عنوان URL الخاص بـ Worker بدلاً من Anthropic مباشرة. يعمل أسلوب حلقة HTTP اليدوية فعلاً، لكنه يصبح صعب الصيانة بمجرد أن تحتاج إلى التعامل مع حقن نتائج الأدوات واستمرارية الحلقة بشكل موثوق على مدى 6-10 تكرارات. يتيح لك أسلوب Worker الحفاظ على سلوك عقدة Agent الأصلي سليماً.
قبل توجيه كل استدعاء Anthropic عبر Worker، اختبره على وكيل واحد عالي الإنفاق وسجل حقول استخدام Anthropic لثلاث تشغيلات: input tokens و cache_creation_input_tokens و cache_read_input_tokens. إذا بقي cache_read في 0، فإن الوكيل الوسيط على الأرجح يحقن cache_control في المستوى الخاطئ أو يتغير نص النظام/الأدوات بين التكرارات.
الشيء الذي يجب أن يبقى محددًا هو مفتاح الذاكرة المؤقتة: نموذج متطابق، نص نظام متطابق وتعريفات أدوات متطابقة. أبقِ بيانات المستخدم/المهمة الديناميكية خارج الكتل المحددة للذاكرة المؤقتة، وإلا ستحصل على تعقيد الوكيل الوسيط دون الفوائد.
شكراً لك، @nguyenthieutoan و @oimrqs_ops - هذه تعليقات مفيدة جداً. لم أفكر في تعديل بيانات اعتماد Anthropic الفعلية للقيام بهذا. سأختبر هذا وسأعود بتقرير إلى المجتمع، بما في ذلك أي JSON ذي صلة. يبدو أن هذا إصلاح جيد جداً وسهل نسبياً.
لذلك @nguyenthieutoan و @oimrqs_ops - كان هذا سهل التنفيذ بشكل مفاجئ، لكنني أواجه مشكلة في تخزين رسالة النظام فقط في ذاكرة التخزين المؤقت. ما أحصل عليه بدلاً من ذلك هو جميع تكرارات حلقة الأدوات التي يمر بها، وجميع هذه البيانات الإضافية تُضاف إلى ذاكرة التخزين المؤقت، لكن لا يتم إعادة استخدامها. لا توجد مدخرات فعليًا.
كنت أناقش هذا مع Claude، لكننا لم نتوصل إلى حل حتى الآن. هل أنت على علم بأي طريقة للالتفاف حول هذا؟
يبدو أن العامل يضع علامة على نقطة توقف متحركة. التخزين المؤقت من Anthropic يعتمد على البادئة: فهو يخزن كل شيء حتى كتلة cache_control، لذا إذا وقعت العلامة بعد أدوار assistant/tool_result، فإن سجل حلقة الأدوات يصبح عمليات كتابة في الذاكرة المؤقتة ولن يتم إعادة استخدامه.
بالنسبة لمسار n8n Cloud Agent، احتفظ بالعامل صارماً: أضف cache_control فقط إلى آخر كتلة system/tool-definition ثابتة، وليس أبداً إلى الرسائل التي تم إنشاؤها أثناء الحلقة. إذا كان n8n يرسل للعامل فقط مصفوفة رسائل متغيرة، فقد لا يكون لهذا المسار نقطة توقف نظيفة للنظام فقط. هل يمكنك نشر حمولة معاد صياغتها قبل وبعد توضح بالضبط حيث يدرج العامل cache_control؟
لقد بنيت فكرة وكيل CF Worker باستخدام بيانات اعتماد AnthropicApi في n8n مع عنوان URL أساسي يشير إلى CF Worker الذي يحقن cache_control ويسجل الاستخدام (بتحليل message_start/message_delta)، لأن n8n لا تعرض cache_read_input_tokens بشكل أصلي.
نتيجتان:
وكلاء الضربة الواحدة يخزن بشكل نظيف. مطالبة نظام ثابتة + رسالة مستخدم لكل طلب: يضع العامل علامة على الكتلة النظامية، ويقرأها Anthropic مرة أخرى عبر التشغيل بـ TTL مدته ساعة واحدة. ~75% خفض في رموز الإدخال لتلك المطالبة.
حلقات الأدوات متعددة الأدوار لا تزال مشكلة. عقدة وكيل، Haiku + 4-10 أدوار أداة مع التفكير الممتد مفعل: حتى عند وضع علامة فقط على الكتلة النظامية وإزالة cache_control من الرسائل بالكامل، لا تزال Anthropic تقوم بتخزين التاريخ المتزايد مؤقتًا في كل تكرار ولا تقرأه مرة أخرى. النتيجة: +21% تكلفة مقابل عدم وجود ذاكرة تخزين مؤقت بـ TTL مدته ساعة واحدة، -10% بـ TTL مدته 5 دقائق (وفقًا لقراءة Claude للسجلات).
يبدو أن Anthropic تقوم بالتخزين المؤقت تلقائيًا بعد نقطة الفاصل الصريحة مع نمو المحادثة، لكن تاريخ حلقة الأداة ليس مستقرًا بالبايت من دور إلى آخر، لذا فإن مطابقة البادئة تنكسر بعد الكتلة النظامية. المشبوه المحتمل: كتل التفكير الممتد (أو إعادة تسلسل ChatAnthropic للأدوار المساعدة/tool_result) التي تختلف بين التكرارات.
أسئلة لأي شخص ذهب أعمق:
هل حصل أحد على تاريخ حلقة الأداة للقراءة من الذاكرة المؤقتة عبر التكرارات؟ ما كان الحل؟
أي طريقة لإخبار Anthropic “قم بالتخزين المؤقت فقط حتى نقطة الفاصل هذه، لا شيء بعده” باستخدام CF Worker Proxy؟
هل تقوم n8n’s ChatAnthropic برحلة ذهابًا وإيابًا لكتل التفكير مع التوقيعات سليمة بين الأدوار، أم أنها تسقطها/تعيد تنسيقها؟
أنا مسرور بمشاركة أحد أكواد وكلاء CF Worker الفرعية والحمولات المحررة إذا كان ذلك سيساعد.
أقدر حقًا مساعدة الجميع. لقد كانت هذه مشكلة صعبة في الحل، ويبدو أنه لن يضيفها n8n إلى عقدة Anthropic Chat الأصلية في أي وقت قريب، وهو بالطبع سيكون الحل المثالي.
كتل التفكير الموسعة هي المسؤول الأساسي بكل تأكيد عن Q1 و Q3. كل كتلة محتوى thinking تتضمن حقل signature ينشئه Anthropic بشكل جديد في كل دورة - وهو غير مستقر على مستوى البايت، لذا فإن البادئة تنقطع حتى لو كانت كتلة النظام والأدوات متطابقة. الحل: إذا كان هذه الوكلاء الفرعيون لا يحتاجون فعلاً إلى التفكير الموسع، فعطّله. بدون كتل التفكير، المحتوى الديناميكي الوحيد في أدوار المساعد هو مخرجات tool_use، التي تزيح البادئة لكن على الأقل تحافظ على تناسق البنية.
بخصوص Q2 - لا يمكنك توجيه Anthropic لقمع التخزين المؤقت التلقائي بما يتجاوز نقطة معينة، لكن نقطة التوقف الصريحة في Worker على كتلة النظام هي بالفعل الطريقة الصحيحة. الزيادة بنسبة 21% مع TTL مدته ساعة واحدة هي تكلفة كتابة المخزن المؤقت - وهذا متوقع في المسار الأول. إذا تطابقت البادئة فعلاً في الأدوار اللاحقة، فستشهد قراءات من المخزن المؤقت. إذا لم تشهدها، فالبادئة تنقطع قبل كتلة النظام، وعلى الأرجح السبب هو توقيعات التفكير في المصب.
بخصوص Q3 - نعم، عقدة ChatAnthropic في n8n تعيد تمرير كتل التفكير كما هي مع توقيعاتها. هذا مطلوب من قبل واجهة برمجة تطبيقات Anthropic (لا يمكنك إزالتها). لذا عطّل التفكير الموسع على وكلاء Haiku الفرعيين وأعد الاختبار - يجب أن يحقق ذلك استقراراً كافياً في البادئة للحصول على قراءات من المخزن المؤقت على كتلة النظام والأدوات عبر التكرارات.