الانتقال إلى المحتوى الرئيسي

نظافة النصوص التفريغية (إصلاحات موفري الخدمة)

يصف هذا المستند الإصلاحات الخاصة بموفري الخدمة التي تُطبَّق على النصوص التفريغية قبل التشغيل (عند بناء سياق النموذج). هذه التعديلات تُجرى في الذاكرة لتلبية متطلبات موفري الخدمة الصارمة. لا تعيد خطوات النظافة هذه كتابة النص التفريغي المخزن بصيغة JSONL على القرص؛ ومع ذلك، قد تعيد عملية إصلاح منفصلة لملف الجلسة كتابة ملفات JSONL غير السليمة من خلال إسقاط الأسطر غير الصالحة قبل تحميل الجلسة. وعند حدوث إصلاح، يُحفَظ الملف الأصلي كنسخة احتياطية بجانب ملف الجلسة. يشمل النطاق ما يلي:
  • تنظيف معرّفات استدعاءات الأدوات
  • التحقق من صحة مدخلات استدعاءات الأدوات
  • إصلاح إقران نتائج الأدوات
  • التحقق من صحة الأدوار / الترتيب
  • تنظيف تواقيع التفكير
  • تنظيف حمولات الصور
  • وسم مصدر مدخلات المستخدم (للمطالبات الموجّهة بين الجلسات)
إذا كنت تحتاج إلى تفاصيل تخزين النصوص التفريغية، فراجع:

أين يتم تشغيل هذا

تتركز كل نظافة النصوص التفريغية في المشغّل المضمّن:
  • اختيار السياسة: src/agents/transcript-policy.ts
  • تطبيق التنظيف/الإصلاح: sanitizeSessionHistory في src/agents/pi-embedded-runner/google.ts
تستخدم السياسة provider وmodelApi وmodelId لتحديد ما يجب تطبيقه. وبشكل منفصل عن نظافة النصوص التفريغية، تُصلَح ملفات الجلسة (عند الحاجة) قبل التحميل:
  • repairSessionFileIfNeeded في src/agents/session-file-repair.ts
  • يُستدعى من run/attempt.ts وcompact.ts (المشغّل المضمّن)

قاعدة عامة: تنظيف الصور

تُنظَّف حمولات الصور دائمًا لمنع رفض موفر الخدمة بسبب حدود الحجم (تصغير/إعادة ضغط صور base64 كبيرة الحجم). يساعد هذا أيضًا في التحكم في ضغط الرموز الناتج عن الصور للنماذج القادرة على الرؤية. تؤدي الأبعاد القصوى الأصغر عمومًا إلى تقليل استخدام الرموز؛ بينما تحافظ الأبعاد الأكبر على مزيد من التفاصيل. التنفيذ:
  • sanitizeSessionMessagesImages في src/agents/pi-embedded-helpers/images.ts
  • sanitizeContentBlocksImages في src/agents/tool-images.ts
  • يمكن ضبط الحد الأقصى لبعد الصورة عبر agents.defaults.imageMaxDimensionPx (الافتراضي: 1200).

قاعدة عامة: استدعاءات الأدوات غير السليمة

تُسقَط كتل استدعاءات أدوات المساعد التي تفتقد كلًا من input وarguments قبل بناء سياق النموذج. يمنع هذا رفض موفري الخدمة الناتج عن استدعاءات أدوات محفوظة جزئيًا (على سبيل المثال، بعد فشل بسبب حد المعدل). التنفيذ:
  • sanitizeToolCallInputs في src/agents/session-transcript-repair.ts
  • يُطبَّق في sanitizeSessionHistory في src/agents/pi-embedded-runner/google.ts

قاعدة عامة: مصدر المدخلات بين الجلسات

عندما يرسل وكيل مطالبة إلى جلسة أخرى عبر sessions_send (بما في ذلك خطوات الرد/الإعلان من وكيل إلى وكيل)، يحفظ OpenClaw دور المستخدم المُنشأ مع:
  • message.provenance.kind = "inter_session"
تُكتب هذه البيانات الوصفية عند إلحاق النص التفريغي ولا تغيّر الدور (role: "user" يبقى كما هو لتوافق موفر الخدمة). يمكن لقارئات النصوص التفريغية استخدام هذا لتجنب التعامل مع المطالبات الداخلية الموجّهة على أنها تعليمات كتبها المستخدم النهائي. أثناء إعادة بناء السياق، يضيف OpenClaw أيضًا في الذاكرة وسمًا قصيرًا [Inter-session message] قبل أدوار المستخدم هذه حتى يتمكن النموذج من تمييزها عن تعليمات المستخدم النهائي الخارجية.

مصفوفة موفري الخدمة (السلوك الحالي)

OpenAI / OpenAI Codex
  • تنظيف الصور فقط.
  • إسقاط تواقيع الاستدلال اليتيمة (عناصر استدلال مستقلة لا يتبعها بلوك محتوى) في نصوص OpenAI Responses/Codex التفريغية.
  • لا يوجد تنظيف لمعرّفات استدعاءات الأدوات.
  • لا يوجد إصلاح لإقران نتائج الأدوات.
  • لا يوجد تحقق من صحة الأدوار أو إعادة ترتيب.
  • لا توجد نتائج أدوات تركيبية.
  • لا يوجد تجريد لتواقيع التفكير.
Google (Generative AI / Gemini CLI / Antigravity)
  • تنظيف معرّفات استدعاءات الأدوات: أبجدي رقمي صارم.
  • إصلاح إقران نتائج الأدوات ونتائج أدوات تركيبية.
  • التحقق من صحة الأدوار (تناوب الأدوار على نمط Gemini).
  • إصلاح ترتيب أدوار Google (إضافة bootstrap صغير جدًا للمستخدم إذا بدأ السجل بالمساعد).
  • Antigravity Claude: تطبيع تواقيع التفكير؛ وإسقاط كتل التفكير غير الموقعة.
Anthropic / Minimax (متوافق مع Anthropic)
  • إصلاح إقران نتائج الأدوات ونتائج أدوات تركيبية.
  • التحقق من صحة الأدوار (دمج أدوار المستخدم المتتالية لتلبية التناوب الصارم).
Mistral (بما في ذلك الكشف المعتمد على model-id)
  • تنظيف معرّفات استدعاءات الأدوات: strict9 (أبجدي رقمي بطول 9).
OpenRouter Gemini
  • تنظيف تواقيع التفكير: تجريد قيم thought_signature غير المشفرة بـ base64 (والاحتفاظ بالمشفرة بـ base64).
كل شيء آخر
  • تنظيف الصور فقط.

السلوك التاريخي (قبل 2026.1.22)

قبل إصدار 2026.1.22، كان OpenClaw يطبق طبقات متعددة من نظافة النصوص التفريغية:
  • كانت إضافة transcript-sanitize تعمل في كل عملية بناء للسياق وكان يمكنها:
    • إصلاح إقران استخدام/نتيجة الأدوات.
    • تنظيف معرّفات استدعاءات الأدوات (بما في ذلك وضع غير صارم يحافظ على _/-).
  • كان المشغّل أيضًا ينفذ تنظيفًا خاصًا بموفري الخدمة، مما كرر العمل.
  • حدثت تعديلات إضافية خارج سياسة موفر الخدمة، بما في ذلك:
    • تجريد وسوم <final> من نص المساعد قبل الحفظ.
    • إسقاط أدوار أخطاء المساعد الفارغة.
    • تقليم محتوى المساعد بعد استدعاءات الأدوات.
تسبب هذا التعقيد في تراجعات عبر موفري الخدمة (وخاصة اقتران openai-responsescall_id|fc_id). أزالت عملية التنظيف في 2026.1.22 الإضافة، وركّزت المنطق في المشغّل، وجعلت OpenAI من دون تعديل باستثناء تنظيف الصور.