يتيح لك البث المتدفق عرض النص أثناء إنتاجه من قبل النموذج.
يتم تفعيل البث المتدفق افتراضياً عبر واجهة برمجة تطبيقات REST، ولكنه معطل افتراضياً في SDKs.
لتفعيل البث المتدفق في SDKs، اضبط المعامل stream على القيمة True.
المفاهيم الأساسية للبث المتدفق
- الدردشة: بث جزئي لرسائل المساعد. كل مقطع يتضمن الحقل
contentحتى تتمكن من عرض الرسائل عند وصولها. - التفكير: النماذج القادرة على التفكير تصدر حقل
thinkingإلى جانب المحتوى العادي في كل مقطع. اكتشف هذا الحقل في مقاطع البث المتدفق لإظهار أو إخفاء آثار الاستدلال قبل وصول الإجابة النهائية. - استدعاء الأدوات: راقب الحقول
tool_callsالمبثوثة في كل مقطع، ونفذ الأداة المطلوبة، ثم أضف مخرجات الأداة مرة أخرى إلى المحادثة.
التعامل مع مقاطع البث المتدفق
ملاحظة
من الضروري تجميع الحقول الجزئية للحفاظ على سجل المحادثة. هذا الأمر مهم بشكل خاص عند استدعاء الأدوات، حيث يجب إعادة الحقل thinking، واستدعاء الأداة من النموذج، ونتيجة الأداة المنفذة إلى النموذج في الطلب التالي.
Python
```python
from ollama import chat
stream = chat(
model='qwen3',
messages=[{'role': 'user', 'content': 'What is 17 × 23?'}],
stream=True,
)
in_thinking = False
content = ''
thinking = ''
for chunk in stream:
if chunk.message.thinking:
if not in_thinking:
in_thinking = True
print('Thinking:\n', end='', flush=True)
print(chunk.message.thinking, end='', flush=True)
# تجميع الجزء الجزئي من التفكير
thinking += chunk.message.thinking
elif chunk.message.content:
if in_thinking:
in_thinking = False
print('\n\nAnswer:\n', end='', flush=True)
print(chunk.message.content, end='', flush=True)
# تجميع الجزء الجزئي من المحتوى
content += chunk.message.content
# إضافة الحقول المجمعة إلى الرسائل للطلب التالي
new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
```
JavaScript
```javascript
import ollama from 'ollama'
async function main() {
const stream = await ollama.chat({
model: 'qwen3',
messages: [{ role: 'user', content: 'What is 17 × 23?' }],
stream: true,
})
let inThinking = false
let content = ''
let thinking = ''
for await (const chunk of stream) {
if (chunk.message.thinking) {
if (!inThinking) {
inThinking = true
process.stdout.write('Thinking:\n')
}
process.stdout.write(chunk.message.thinking)
// تجميع الجزء الجزئي من التفكير
thinking += chunk.message.thinking
} else if (chunk.message.content) {
if (inThinking) {
inThinking = false
process.stdout.write('\n\nAnswer:\n')
}
process.stdout.write(chunk.message.content)
// تجميع الجزء الجزئي من المحتوى
content += chunk.message.content
}
}
// إضافة الحقول المجمعة إلى الرسائل للطلب التالي
new_messages = [{ role: 'assistant', thinking: thinking, content: content }]
}
main().catch(console.error)
```