---
read_when:
    - شرح كيفية عمل البث أو التجزئة في القنوات
    - تغيير سلوك بث الكتل أو تقسيم القنوات إلى أجزاء
    - تصحيح أخطاء ردود الكتل المكررة/المبكرة أو بث معاينة القناة
summary: سلوك البث والتجزئة (ردود الكتل، بث معاينة القناة، تعيين الأوضاع)
title: التدفق والتجزئة
x-i18n:
    generated_at: "2026-05-03T07:30:54Z"
    model: gpt-5.5
    provider: openai
    source_hash: 85f6cb33031a6c818bb709e0ed14d8dd0f8c30a3dd90468a40396b3a515b5e65
    source_path: concepts/streaming.md
    workflow: 16
---

لدى OpenClaw طبقتان منفصلتان للبث:

- **بث الكتل (القنوات):** يرسل **كتلًا** مكتملة أثناء كتابة المساعد. هذه رسائل قنوات عادية (وليست فروق رموز).
- **بث المعاينة (Telegram/Discord/Slack):** يحدّث **رسالة معاينة** مؤقتة أثناء التوليد.

لا يوجد اليوم **بث حقيقي لفروق الرموز** إلى رسائل القنوات. بث المعاينة قائم على الرسائل (إرسال + تعديلات/إلحاقات).

## بث الكتل (رسائل القنوات)

يرسل بث الكتل مخرجات المساعد في أجزاء كبيرة نسبيًا عند توفرها.

```
Model output
  └─ text_delta/events
       ├─ (blockStreamingBreak=text_end)
       │    └─ chunker emits blocks as buffer grows
       └─ (blockStreamingBreak=message_end)
            └─ chunker flushes at message_end
                   └─ channel send (block replies)
```

المفتاح:

- `text_delta/events`: أحداث بث النموذج (قد تكون متفرقة للنماذج غير الداعمة للبث).
- `chunker`: يطبّق `EmbeddedBlockChunker` حدود الحد الأدنى/الأقصى + تفضيل الفاصل.
- `channel send`: الرسائل الصادرة الفعلية (ردود الكتل).

**عناصر التحكم:**

- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (الافتراضي إيقاف).
- تجاوزات القنوات: `*.blockStreaming` (ومتغيرات لكل حساب) لفرض `"on"`/`"off"` لكل قناة.
- `agents.defaults.blockStreamingBreak`: `"text_end"` أو `"message_end"`.
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (دمج الكتل المبثوثة قبل الإرسال).
- الحد الأقصى الصارم للقناة: `*.textChunkLimit` (مثل `channels.whatsapp.textChunkLimit`).
- وضع تقطيع القناة: `*.chunkMode` (`length` افتراضيًا، و`newline` يقسم عند الأسطر الفارغة (حدود الفقرات) قبل التقطيع حسب الطول).
- الحد المرن في Discord: `channels.discord.maxLinesPerMessage` (الافتراضي 17) يقسم الردود الطويلة لتجنب قصّ الواجهة.

**دلالات الحدود:**

- `text_end`: بث الكتل فور أن يصدرها المقطّع؛ التفريغ عند كل `text_end`.
- `message_end`: الانتظار حتى تنتهي رسالة المساعد، ثم تفريغ المخرجات المخزنة مؤقتًا.

لا يزال `message_end` يستخدم المقطّع إذا تجاوز النص المخزن مؤقتًا `maxChars`، لذلك يمكنه إصدار عدة أجزاء في النهاية.

### تسليم الوسائط مع بث الكتل

توجيهات `MEDIA:` هي بيانات وصفية عادية للتسليم. عندما يرسل بث الكتل كتلة وسائط مبكرًا، يتذكر OpenClaw ذلك التسليم للدورة. إذا كررت حمولة المساعد النهائية عنوان URL نفسه للوسائط، يزيل التسليم النهائي الوسائط المكررة بدل إرسال المرفق مرة أخرى.

يتم كبت الحمولات النهائية المكررة تمامًا. إذا أضافت الحمولة النهائية نصًا مميزًا حول وسائط سبق بثها، يظل OpenClaw يرسل النص الجديد مع الحفاظ على تسليم الوسائط مرة واحدة. يمنع هذا تكرار الملاحظات الصوتية أو الملفات على قنوات مثل Telegram عندما يصدر وكيل `MEDIA:` أثناء البث ويضمّنها المزوّد أيضًا في الرد المكتمل.

## خوارزمية التقطيع (حدود منخفضة/مرتفعة)

ينفذ `EmbeddedBlockChunker` تقطيع الكتل:

- **الحد المنخفض:** لا تُصدر حتى يصبح المخزن المؤقت >= `minChars` (إلا عند الفرض).
- **الحد المرتفع:** فضّل التقسيم قبل `maxChars`؛ وإذا كان مفروضًا، فاقسم عند `maxChars`.
- **تفضيل الفاصل:** `paragraph` ← `newline` ← `sentence` ← `whitespace` ← فاصل صارم.
- **أسوار الكود:** لا تقسّم أبدًا داخل الأسوار؛ وعند الفرض عند `maxChars`، أغلق السور وأعد فتحه للحفاظ على صلاحية Markdown.

يتم تقييد `maxChars` إلى `textChunkLimit` الخاص بالقناة، لذلك لا يمكنك تجاوز حدود كل قناة.

## الدمج (دمج الكتل المبثوثة)

عند تمكين بث الكتل، يمكن لـ OpenClaw **دمج أجزاء كتل متتالية**
قبل إرسالها. يقلل هذا من “إزعاج السطر الواحد” مع الاستمرار في توفير
مخرجات تدريجية.

- ينتظر الدمج **فجوات خمول** (`idleMs`) قبل التفريغ.
- تُحدّ المخازن المؤقتة بواسطة `maxChars` وستُفرّغ إذا تجاوزته.
- يمنع `minChars` إرسال الأجزاء الصغيرة حتى يتراكم نص كافٍ
  (يرسل التفريغ النهائي دائمًا النص المتبقي).
- يُشتق رابط الدمج من `blockStreamingChunk.breakPreference`
  (`paragraph` ← `\n\n`، و`newline` ← `\n`، و`sentence` ← مسافة).
- تتوفر تجاوزات القنوات عبر `*.blockStreamingCoalesce` (بما في ذلك إعدادات كل حساب).
- يتم رفع `minChars` الافتراضي للدمج إلى 1500 في Signal/Slack/Discord ما لم يتم تجاوزه.

## إيقاع يشبه البشر بين الكتل

عند تمكين بث الكتل، يمكنك إضافة **توقف عشوائي** بين
ردود الكتل (بعد الكتلة الأولى). يجعل هذا الردود متعددة الفقاعات تبدو
أكثر طبيعية.

- الإعداد: `agents.defaults.humanDelay` (يمكن تجاوزه لكل وكيل عبر `agents.list[].humanDelay`).
- الأوضاع: `off` (افتراضي)، و`natural` (800–2500ms)، و`custom` (`minMs`/`maxMs`).
- ينطبق فقط على **ردود الكتل**، وليس الردود النهائية أو ملخصات الأدوات.

## "بث الأجزاء أو كل شيء"

يقابل هذا:

- **بث الأجزاء:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (الإصدار أثناء التقدم). تحتاج القنوات غير Telegram أيضًا إلى `*.blockStreaming: true`.
- **بث كل شيء في النهاية:** `blockStreamingBreak: "message_end"` (تفريغ مرة واحدة، وربما عدة أجزاء إذا كان طويلًا جدًا).
- **لا بث للكتل:** `blockStreamingDefault: "off"` (الرد النهائي فقط).

**ملاحظة القناة:** يكون بث الكتل **متوقفًا ما لم**
يتم ضبط `*.blockStreaming` صراحةً إلى `true`. يمكن للقنوات بث معاينة مباشرة
(`channels.<channel>.streaming`) من دون ردود كتل.

تذكير بموقع الإعداد: توجد افتراضيات `blockStreaming*` تحت
`agents.defaults`، وليس في إعداد الجذر.

## أوضاع بث المعاينة

المفتاح المعتمد: `channels.<channel>.streaming`

الأوضاع:

- `off`: تعطيل بث المعاينة.
- `partial`: معاينة واحدة تُستبدل بأحدث نص.
- `block`: تحديثات معاينة بخطوات مقطعة/ملحقة.
- `progress`: معاينة تقدم/حالة أثناء التوليد، والجواب النهائي عند الاكتمال.

### ربط القنوات

| القناة      | `off` | `partial` | `block` | `progress`        |
| ---------- | ----- | --------- | ------- | ----------------- |
| Telegram   | ✅    | ✅        | ✅      | يتحول إلى `partial` |
| Discord    | ✅    | ✅        | ✅      | يتحول إلى `partial` |
| Slack      | ✅    | ✅        | ✅      | ✅                |
| Mattermost | ✅    | ✅        | ✅      | ✅                |

خاص بـ Slack فقط:

- يبدّل `channels.slack.streaming.nativeTransport` استدعاءات واجهة برمجة تطبيقات البث الأصلية في Slack عندما يكون `channels.slack.streaming.mode="partial"` (الافتراضي: `true`).
- يتطلب البث الأصلي في Slack وحالة سلسلة مساعد Slack هدف سلسلة رد. لا تعرض الرسائل المباشرة على المستوى الأعلى تلك المعاينة بأسلوب السلسلة، لكنها لا تزال قادرة على استخدام منشورات معاينة مسودات Slack وتعديلاتها.

ترحيل المفاتيح القديمة:

- Telegram: يتم اكتشاف `streamMode` القديم وقيم `streaming` العددية/المنطقية وترحيلها عبر مسارات توافق الطبيب/الإعداد إلى `streaming.mode`.
- Discord: يتم ترحيل `streamMode` + `streaming` المنطقي تلقائيًا إلى تعداد `streaming`.
- Slack: يتم ترحيل `streamMode` تلقائيًا إلى `streaming.mode`؛ ويتم ترحيل `streaming` المنطقي تلقائيًا إلى `streaming.mode` بالإضافة إلى `streaming.nativeTransport`؛ ويتم ترحيل `nativeStreaming` القديم تلقائيًا إلى `streaming.nativeTransport`.

### سلوك وقت التشغيل

Telegram:

- يستخدم تحديثات معاينة `sendMessage` + `editMessageText` عبر الرسائل المباشرة والمجموعات/المواضيع.
- يرسل رسالة نهائية جديدة بدل التحرير في المكان نفسه عندما تكون المعاينة ظاهرة لمدة تقارب دقيقة واحدة، ثم ينظف المعاينة بحيث يعكس الطابع الزمني في Telegram اكتمال الرد.
- يتم تخطي بث المعاينة عندما يكون بث كتل Telegram ممكّنًا صراحةً (لتجنب البث المزدوج).
- يمكن لـ `/reasoning stream` كتابة الاستدلال في المعاينة.

Discord:

- يستخدم رسائل معاينة بالإرسال + التعديل.
- يستخدم وضع `block` تقطيع المسودات (`draftChunk`).
- يتم تخطي بث المعاينة عندما يكون بث كتل Discord ممكّنًا صراحةً.
- تلغي حمولات الوسائط النهائية والأخطاء والردود الصريحة المعاينات المعلقة من دون تفريغ مسودة جديدة، ثم تستخدم التسليم العادي.

Slack:

- يمكن لـ `partial` استخدام بث Slack الأصلي (`chat.startStream`/`append`/`stop`) عند توفره.
- يستخدم `block` معاينات مسودات بأسلوب الإلحاق.
- يستخدم `progress` نص معاينة الحالة، ثم الجواب النهائي.
- تستخدم الرسائل المباشرة على المستوى الأعلى من دون سلسلة رد منشورات معاينة المسودات وتعديلاتها بدل بث Slack الأصلي.
- يكبت بث المعاينة الأصلي وبث معاينة المسودات ردود الكتل لتلك الدورة، لذلك يتم بث رد Slack عبر مسار تسليم واحد فقط.
- لا تنشئ حمولات الوسائط/الأخطاء النهائية ونهايات التقدم رسائل مسودات مؤقتة؛ فقط النهايات النصية/الكتلية التي يمكنها تعديل المعاينة تفرغ نص المسودة المعلق.

Mattermost:

- يبث التفكير ونشاط الأدوات ونص الرد الجزئي في منشور معاينة مسودة واحد يُنهى في مكانه عندما يصبح الجواب النهائي آمنًا للإرسال.
- يعود إلى إرسال منشور نهائي جديد إذا حُذف منشور المعاينة أو لم يكن متاحًا بطريقة أخرى وقت الإنهاء.
- تلغي حمولات الوسائط/الأخطاء النهائية تحديثات المعاينة المعلقة قبل التسليم العادي بدل تفريغ منشور معاينة مؤقت.

Matrix:

- تُنهى معاينات المسودات في مكانها عندما يمكن للنص النهائي إعادة استخدام حدث المعاينة.
- تلغي النهايات الخاصة بالوسائط فقط والأخطاء وعدم تطابق هدف الرد تحديثات المعاينة المعلقة قبل التسليم العادي؛ ويتم تنقيح معاينة قديمة ظاهرة بالفعل.

### تحديثات معاينة تقدم الأدوات

يمكن أن يتضمن بث المعاينة أيضًا تحديثات **تقدم الأدوات** — أسطر حالة قصيرة مثل "البحث في الويب"، أو "قراءة ملف"، أو "استدعاء أداة" — تظهر في رسالة المعاينة نفسها أثناء تشغيل الأدوات، قبل الرد النهائي. يحافظ هذا على حيوية الدورات متعددة الخطوات بصريًا بدل الصمت بين أول معاينة تفكير والجواب النهائي.

الأسطح المدعومة:

- يبث **Discord** و**Slack** و**Telegram** و**Matrix** تقدم الأدوات في تعديل المعاينة المباشر افتراضيًا عندما يكون بث المعاينة نشطًا.
- شُحن Telegram مع تمكين تحديثات معاينة تقدم الأدوات منذ `v2026.4.22`؛ وإبقاؤها مفعلة يحافظ على ذلك السلوك المنشور.
- يقوم **Mattermost** بالفعل بدمج نشاط الأدوات في منشور معاينة المسودة الواحد الخاص به (انظر أعلاه).
- تتبع تعديلات تقدم الأدوات وضع بث المعاينة النشط؛ ويتم تخطيها عندما يكون بث المعاينة `off` أو عندما يتولى بث الكتل الرسالة. في Telegram، يكون `streaming.mode: "off"` نهائيًا فقط: يتم أيضًا كبت ثرثرة التقدم العامة بدل تسليمها كرسائل مستقلة "جارٍ العمل..."، بينما تظل مطالبات الموافقة وحمولات الوسائط والأخطاء تُوجّه بشكل طبيعي.
- للاحتفاظ ببث المعاينة مع إخفاء أسطر تقدم الأدوات، اضبط `streaming.preview.toolProgress` إلى `false` لتلك القناة. لتعطيل تعديلات المعاينة بالكامل، اضبط `streaming.mode` إلى `off`.

مثال:

```json
{
  "channels": {
    "telegram": {
      "streaming": {
        "mode": "partial",
        "preview": {
          "toolProgress": false
        }
      }
    }
  }
}
```

## ذات صلة

- [الرسائل](/ar/concepts/messages) — دورة حياة الرسالة وتسليمها
- [إعادة المحاولة](/ar/concepts/retry) — سلوك إعادة المحاولة عند فشل التسليم
- [القنوات](/ar/channels) — دعم البث لكل قناة
