---
read_when:
    - شرح كيفية عمل البث أو التقسيم إلى مقاطع على القنوات
    - تغيير سلوك البث الكتلي أو تقسيم القناة إلى مقاطع
    - تصحيح أخطاء الردود الكتلية المكررة/المبكرة أو بث معاينة القناة
summary: سلوك البث + التقسيم إلى مقاطع (الردود الكتلية، بث معاينة القناة، تعيين الأوضاع)
title: البث والتقسيم إلى مقاطع
x-i18n:
    generated_at: "2026-04-22T04:22:47Z"
    model: gpt-5.4
    provider: openai
    source_hash: c6b246025ea1b1be57705bde60c0cdb485ffda727392cf00ea5a165571e37fce
    source_path: concepts/streaming.md
    workflow: 15
---

# البث + التقسيم إلى مقاطع

يحتوي OpenClaw على طبقتين منفصلتين للبث:

- **البث الكتلي (القنوات):** إصدار **كتل** مكتملة أثناء كتابة المساعد. هذه رسائل قناة عادية (وليست token deltas).
- **بث المعاينة (Telegram/Discord/Slack):** تحديث **رسالة معاينة** مؤقتة أثناء الإنشاء.

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

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

يرسل البث الكتلي مخرجات المساعد على شكل مقاطع كبيرة نسبيًا عند توفرها.

```
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"` (الافتراضي 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`: بث الكتل بمجرد أن يُصدرها `chunker`؛ والتفريغ عند كل `text_end`.
- `message_end`: الانتظار حتى تكتمل رسالة المساعد، ثم تفريغ المخرجات المخزنة مؤقتًا.

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

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

يُنفّذ التقسيم الكتلي عبر `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 assistant thread هدف reply thread؛ ولا تعرض الرسائل المباشرة ذات المستوى الأعلى معاينة بنمط thread.

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

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

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

Telegram:

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

Discord:

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

Slack:

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

Mattermost:

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

Matrix:

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

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

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

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

- **Discord** و**Slack** و**Telegram** تبث تقدم الأدوات ضمن تعديل المعاينة المباشر.
- يقوم **Mattermost** بالفعل بضم نشاط الأداة إلى منشور مسودة معاينة واحد (كما ورد أعلاه).
- تتبع تعديلات تقدم الأدوات وضع بث المعاينة النشط؛ ويتم تخطيها عندما يكون بث المعاينة `off` أو عندما يكون البث الكتلي قد استحوذ على الرسالة.

## ذو صلة

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