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

نظرة عامة

يتيح لك البث تلقي مخرجات جزئية أثناء إنشائها، مما يحسّن زمن الاستجابة المُدرَك وتجربة المستخدم. بالنسبة إلى عمليات التكامل الجديدة بأسلوب OpenAI، يُفضَّل استخدام Responses streaming أولًا. وإذا كان إطار العمل لديك لا يزال يستخدم Chat Completions streaming، فإن LemonData يدعم مسار التوافق هذا أيضًا.

الموصى به: Responses Streaming

curl https://api.lemondata.cc/v1/responses \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.4",
    "input": "Write a short poem.",
    "stream": true
  }'

بث Chat Completions

إذا كان إطار العمل لديك لا يزال يتوقع مقاطع SSE من /v1/chat/completions، فهذا يعمل أيضًا:
stream = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Write a short poem"}],
    stream=True
)

for chunk in stream:
    content = chunk.choices[0].delta.content
    if content:
        print(content, end="", flush=True)

شروط انتهاء البث

شروط الإكمال المعتادة:
  • response.completed لتدفقات Responses API
  • finish_reason: "stop" لتدفقات Chat Completions
  • finish_reason: "length" عند الوصول إلى حد token
  • أحداث استدعاء الأداة/الدالة عندما يريد النموذج استخدام الأدوات

نمط تطبيق الويب

async function streamChat(message) {
  const response = await fetch('https://api.lemondata.cc/v1/chat/completions', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer sk-your-api-key',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      model: 'gpt-4o',
      messages: [{ role: 'user', content: message }],
      stream: true
    })
  });

  const reader = response.body.getReader();
  const decoder = new TextDecoder();

  while (true) {
    const { done, value } = await reader.read();
    if (done) break;

    const chunk = decoder.decode(value);
    const lines = chunk.split('\\n').filter(line => line.startsWith('data: '));

    for (const line of lines) {
      const data = line.slice(6);
      if (data === '[DONE]') return;
      const parsed = JSON.parse(data);
      const content = parsed.choices?.[0]?.delta?.content;
      if (content) {
        document.getElementById('output').textContent += content;
      }
    }
  }
}

أفضل الممارسات

استخدم /v1/responses إذا كان SDK أو التطبيق لديك يدعمه بالفعل. واحتفِظ ببث /v1/chat/completions لعمليات التكامل التي تتطلب التوافق.
ألحِق مقاطع delta بواجهة المستخدم أو الطرفية عند وصولها بدلًا من انتظار الاستجابة الكاملة.
اعتبر انقطاع الشبكة وانفصال المصدر العلوي أوضاع فشل طبيعية، وأعِد الاتصال بحذر للجلسات طويلة التشغيل.