Responses API وGPT-6 Astra: ما الذي يتطلبه الترحيل فعلاً؟

دليل عملي لترحيل مسارات GPT-6 Astra إلى Responses API، مع حساب التكلفة، وتشغيل الأدوات غير المتزامن، والتوجيه أثناء التنفيذ لتقليل إعادة العمل من الصفر.

Friday, September 4, 2026Omid Saffari
Tools
Responses API وGPT-6 Astra: ما الذي يتطلبه الترحيل فعلاً؟

يفرض GPT-6 Astra التعامل مع استخدام الأدوات بوصفه مشروع ترحيل إلى Responses API، لا مجرد تبديل اسم النموذج في سطر واحد. أطلقته OpenAI في 3 سبتمبر 2026: ما زالت Chat Completions تعمل مع النصوص، لكن كل سير عمل يستخدم Astra لاستدعاء الأدوات يجب نقله إلى Responses، فيما يغيّر استدعاء الأدوات غير المتزامن والتوجيه أثناء التنفيذ طريقة تشغيل المهام الطويلة.

القراران العمليان هنا هما حجم الجهد الهندسي الذي يستحقه الترحيل، وما إذا كانت أدوات التحكم الجديدة قادرة على خفض تكلفة الانتظار والتصحيح وإعادة تشغيل الوكلاء.

ما الذي تغيّر فعلاً؟

كانت صورة Astra قبل الإطلاق نموذجًا بحثيًا خلف باب مغلق. أما إصدار سبتمبر فمنحه معرّف نموذج متاحًا للعامة، gpt-6-astra، وحدد سعره، وأتاحه على كل من Chat Completions وResponses. يبدأ الوصول مع المؤسسات المشاركة في Trusted Access Program من OpenAI، على أن يتوسع وصول API والباقات الأخرى خلال الأيام المقبلة.

يتوقف اختيار نقطة النهاية على ما يفعله التطبيق. يمكن لتكامل Chat Completions المخصص للنصوص فقط استخدام Astra. أما التكامل الذي يسمح لـ Astra باستدعاء دوالك أو الأدوات المستضافة لدى OpenAI، فيجب أن يستخدم Responses API.

Responses عقد مختلف للتطبيق. في Chat Completions تدخل قائمة رسائل وتخرج قائمة خيارات، بينما يتعامل Responses مع عناصر محددة النوع (Items). الرسالة عنصر، وfunction_call عنصر آخر، وتعود نتيجة الأداة في صورة function_call_output تحمل call_id الأصلي.

جزء التطبيقChat CompletionsResponses
الطلبmessagesinput مع instructions اختيارية
النص النهائيchoices[0].message.contentresponse.output_text أو عناصر output محددة النوع
تعريف الأداةالدالة متداخلة داخل غلاف الأداةحقول الدالة موجودة مباشرة في عنصر الأداة
نتيجة الأداةرسالة أداةfunction_call_output مطابق عبر call_id
متابعة الحالةسجل الرسائل لديكprevious_response_id، أو إعادة تمرير العناصر يدويًا، أو Conversations
البثأجزاء تحمل deltaأحداث محددة النوع مثل response.output_text.delta

هناك فخّان يسهل الوقوع فيهما أثناء الترحيل. لا تنتقل instructions في المستوى الأعلى تلقائيًا عند ربط الطلبات عبر previous_response_id، لذلك يجب إرسالها مجددًا. كذلك تنتقل Structured Outputs من response_format إلى text.format. ويعرض دليل الترحيل القائمة الكاملة للتغييرات التي تمس المحلل والحالة والأدوات والبث.

لماذا يفرض Responses API ميزانيتين لا واحدة؟

الميزانية الأولى هي وقت التطوير. فحلقة الأدوات في بيئة الإنتاج تمس نقطة النهاية وبنية الطلب ومحلل المخرجات وتعريفات الدوال وربط النتائج وإدارة الحالة وأحداث البث والسجلات وإعادة المحاولة والتقييمات. تغيير اسم النموذج وحده يترك معظم هذا العمل بلا إنجاز.

الميزانية الثانية هي تكلفة المهمة المكتملة. أسعار GPT-6 Astra القياسية للسياق القصير هي $10.00 لكل 1 مليون رمز إدخال، و$1.00 للإدخال المخزّن مؤقتًا، و$12.50 لكتابة ذاكرة التخزين المؤقت، و$50.00 للإخراج. أما الأسعار الترويجية الحالية لـ GPT-5.6 Sol فهي $4.00 و$0.40 و$5.00 و$20.00 للبنود الأربعة نفسها. عند تساوي حجم الرموز، تبلغ تكلفة Astra على كل بند 2.5 مرة.

لا تفرض نقطة النهاية رسومًا مستقلة. تتكوّن فاتورتك من رموز النموذج، ورسوم الأدوات المدمجة المسعّرة، وبنية أدواتك، ومحاولات الإعادة، والعمل الذي يُتخلى عنه. كما أن المطالبات التي تتجاوز 272,000 رمز إدخال ترفع كامل طلب Astra إلى ضعف أسعار الإدخال والتخزين المؤقت و1.5 مرة من سعر الإخراج. هذه هي الأرقام التي ينبغي إدراجها في ميزانية التجربة من صفحة الأسعار الحالية.

قد يوجد ما يعوّض هذه الزيادة، لكن إثباته يحتاج إلى بياناتك. تفيد OpenAI بأن استخدام Responses حسّن الاستفادة من ذاكرة التخزين المؤقت بنسبة تتراوح بين 40% و80% مقارنةً بـ Chat Completions في اختباراتها الداخلية. كما تفيد بأن تكلفة Astra التقديرية لكل مهمة عبر API كانت أقل في عدة تقييمات لأن Astra استخدم رموز إخراج أقل رغم ارتفاع سعر الرمز. ولا يعني أي من الادعاءين توفيرًا عامًا يصلح لكل حالة.

ما ينبغي قياسه هو:

cost per completed job = model tokens + built-in tool fees + your tool costs + retries + operator time

المقام هنا مهم. فقد تصبح الجولة الأرخص أعلى تكلفة لكل نتيجة مكتملة إذا اضطرت إلى البدء من جديد بعد تصحيح متأخر، مقارنةً بجولة أغلى حافظت على العمل المفيد.

استدعاء الأدوات غير المتزامن يغيّر حلقة الانتظار

يوقف استدعاء الدالة العادي النموذج حتى يعيد التطبيق النتيجة. مع Astra، يمكن أن تحمل دالة يشغّلها التطبيق أو أداة مخصصة القيمة async: true. يستطيع النموذج إصدار الاستدعاء، ومواصلة الاستدلال، واستدعاء أداة مستقلة أخرى، أو الإجابة عن جزء مستقل من الطلب بينما ينفّذ تطبيقك المهمة.

يبقى الخادم لديك مسؤولاً عن العمل. عليه بدء المهمة، والاحتفاظ بسجل لها، وحفظ call_id الأصلي، ثم تسليم النتيجة في طلب Responses لاحق. وإذا وقعت أدوار أخرى قبل وصول النتيجة، فيجب أن تستخدم المتابعة أحدث معرّف استجابة، مع إبقاء مخرجات الأداة مرتبطة بمعرّف الاستدعاء الأصلي.

في منتج بحثي، يعني ذلك أن طلبًا بطيئًا إلى مزوّد بيانات يمكنه العمل بينما يرتّب Astra المصادر المتاحة بالفعل. وفي وكيل عمليات داخلي، يمكن بدء عمليتي بحث مستقلتين عن حسابين مبكرًا، فيما يصوغ النموذج الجزء من التقرير الذي لا يعتمد عليهما. المكسب هو تقليل وقت الخمول، لا تنفيذ مجاني.

التوجيه أثناء التنفيذ يغيّر حلقة إعادة البدء

يتيح التوجيه أثناء التنفيذ للمستخدم تصحيح المهمة بينما يواصل Astra العمل. يرسل التطبيق حدث response.steer عبر اتصال Responses WebSocket نفسه، ويشير إلى الاستجابة النشطة باستخدام previous_response_id، ويضمّن التعليمات الجديدة. يُكمل الخادم عنصر الإخراج الحالي وأي عمل لأداة مستضافة بدأ بالفعل، ثم ينشئ متابعة تتضمن التحديث.

يفيد ذلك مسؤول وكالة يلاحظ أن التقرير موجّه إلى السوق الخطأ، أو قائدًا هندسيًا يريد تقليص نطاق خطة ترحيل قيد التنفيذ. يمكنهما تصحيح المسار قبل انتهاء الدور بالكامل.

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

هذه الخاصية حصرية لـ Astra وتتطلب Responses WebSocket. ولا يبقى التوجيه الموضوع في قائمة الانتظار إلا على ذلك الاتصال، لذلك يحتاج التطبيق إلى تسجيل كل تحديث مقبول والتعافي بحذر بعد انقطاع الاتصال. تضع OpenAI حدًا أقصى لاتصال WebSocket يبلغ 60 دقيقة. وعند طرح WebSocket لمسارات تضم 20 استدعاء أداة أو أكثر، يشير دليل WebSocket إلى تنفيذ أسرع من البداية إلى النهاية بما يصل تقريبًا إلى 40%، لكن هذه نتيجة مرتبطة بالنقل وليست وفرًا مضمونًا من التوجيه.

ورشة طين تبيّن وكيل Astra يواصل عملاً مفيدًا أثناء تشغيل أداة غير متزامنة، ثم ينضم تصحيح بالتوجيه إلى المتابعة
تزيل الأدوات غير المتزامنة انتظارًا مفروضًا، ويضيف التوجيه التصحيح إلى المتابعة. يظل تطبيقك مسؤولاً عن المهمة والحالة.

خطة ترحيل يمكنك تنفيذها

ابدأ بمسار دالة واحد منخفض المخاطر، ولا تبدأ بأكثر وكلاء الإنتاج ازدحامًا.

  1. احصر النطاق الفعلي

    اسرد كل مسار في Chat Completions يمرر أدوات. حدّد باني الطلب، ومخطط الأداة، ومعالج النتائج، ومخزن الحالة، ومستهلك البث، وسياسة إعادة المحاولة، وقياس الاستخدام لكل مسار. يمكن للمسارات النصية وحدها البقاء في مكانها بينما تنقل مسار أدوات واحدًا.

  2. أنشئ مسار ظل على Responses

    مرّر حالات الاختبار المؤهلة نفسها عبر Responses. قارن جودة المهمة المكتملة وزمن الاستجابة ورموز الإدخال والرموز المخزنة مؤقتًا ورموز الإخراج واستدعاءات الأدوات والإخفاقات وتدخلات المشغّل. أبقِ مسار توجيه طلبات الإنتاج من دون تغيير حتى تصبح هذه الأدلة سليمة.

  3. أضف async إلى أداة مستقلة واحدة

    اختر دالة بطيئة لا يحتاج النموذج إلى نتيجتها لإنجاز الجزء التالي من العمل. اضبط async: true، واحفظ المهمة مع call_id الخاص بها، ثم أعد النتيجة على المعرّف نفسه. يعرض المثال الرسمي بلغة Python أدناه الحلقة كاملة.

  4. أضف التوجيه بعد نجاح الاسترداد

    استخدم Responses WebSocket، وسجّل معرّفات التوجيه المقبولة ومدخلاتها، واختبر انقطاعًا إجباريًا. قد تضيع تعليمات المستخدم بصمت إذا لم تدعم ميزة التصحيح إعادة التمرير والاسترداد.

ثبّت أحدث إصدار من Python SDK واضبط متغير البيئة كما هو موضح في دليل البدء السريع من OpenAI:

Bash
pip install openai
export OPENAI_API_KEY="your_api_key_here"

هذا مثال OpenAI القابل للتشغيل لاستدعاء الأدوات غير المتزامن، ويستخدم بيانات طقس تجريبية. شغّله بعد حصول مشروع API لديك على صلاحية الوصول إلى Astra:

Python
import json
from concurrent.futures import ThreadPoolExecutor

from openai import OpenAI
from openai.types.responses import FunctionToolParam

def get_weather(city):
    # Demo data. Replace this function with your weather service.
    weather = {
        "Paris": {
            "city": "Paris",
            "temperature_c": 22,
            "condition": "Clear",
            "source": "demo weather snapshot",
        }
    }
    return weather[city]

worker = ThreadPoolExecutor()

def main():
    client = OpenAI()
    model = "gpt-6-astra"
    tools: list[FunctionToolParam] = [
        {
            "type": "function",
            "name": "get_weather",
            "description": "Read the demo weather snapshot for a city.",
            "async": True,
            "strict": True,
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
                "additionalProperties": False,
            },
        },
    ]

    instructions = (
        "Start the weather lookup and answer the independent packing "
        "question without waiting. Use the actual tool result when it "
        "arrives; never invent it. Identify the weather as demo data."
    )
    response = client.responses.create(
        model=model,
        tools=tools,
        instructions=instructions,
        input=(
            "Check the demo weather in Paris. Meanwhile, "
            "list three essentials for any city trip."
        ),
    )

    call = next(item for item in response.output if item.type == "function_call")
    arguments = json.loads(call.arguments)
    if call.name != "get_weather" or arguments != {"city": "Paris"}:
        raise ValueError("Expected a weather lookup for Paris")

    latest_response_id = response.id
    if call.async_:
        job = worker.submit(get_weather, **arguments)
        print(response.output_text)
        # Independent work or conversation turns can happen here.
        # Update latest_response_id after each continuation.
        result = job.result()
    else:
        result = get_weather(**arguments)

    response = client.responses.create(
        model=model,
        tools=tools,
        instructions=instructions,
        previous_response_id=latest_response_id,
        input=[
            {
                "type": "function_call_output",
                "call_id": call.call_id,
                "output": json.dumps(result),
            },
        ],
    )
    print(response.output_text)

if __name__ == "__main__":
    try:
        main()
    finally:
        worker.shutdown(wait=True)

السطر الذي يسهل تفويته هو call_id: call.call_id. فالنتيجة اللاحقة تعود إلى استدعاء الأداة الأصلي، حتى لو تغيّر معرّف أحدث استجابة بسبب أدوار محادثة لاحقة.

من المستفيد من كل جزء؟

فريق أنظمة خلفية يستدعي الدوال بالفعل

ينبغي احتساب ميزانية ترحيل Responses قبل اعتماد Astra لهذا المسار. الفائدة هي انتقال مضبوط تدعمه سجلات وتقييمات قابلة للمقارنة، بدلاً من تصحيح أخطاء نقطة النهاية والمحلل والنموذج في آن واحد.

وكيل SaaS ينتظر خدمات بطيئة

استخدم التنفيذ غير المتزامن فقط للأعمال المستقلة فعلاً. يمكن بدء البحث في CRM أو البحث الداخلي أو تصدير مستند بينما يعالج Astra فرعًا آخر. أما التبعية التي تمنع اتخاذ القرار التالي فينبغي أن تبقى متزامنة أو تستخدم أداة انتظار صريحة.

فريق عمليات أو وكالة يشرف على أعمال طويلة

أتِح التوجيه للتصحيحات التي كانت ستؤدي لولاه إلى الإلغاء وإعادة البدء. تتبّع عدد مرات إعادة البدء التي يمنعها فعليًا، ومقدار العمل المكتمل الذي يحافظ عليه كل تصحيح. هكذا تحصل على مبرر تجاري لا مجرد عرض لميزة.

مؤسسة خاضعة للتنظيم تستخدم Zero Data Retention

يعمل وضع Responses WebSocket مع store: false وZero Data Retention، لكن مسؤولية الحالة تنتقل إليك. احتفظ بعناصر الاستدلال المشفرة عند الحاجة، وأعد تمرير السياق كاملاً عندما لا يعود معرّف الاستجابة متاحًا، وصمّم مسار الاسترداد هذا قبل إتاحة التوجيه للمستخدمين.

الحقيقة بلا تجميل

لا يزال الوصول إلى Astra يتوسع تدريجيًا. يمكن تجهيز الترحيل الآن، لكن التحول الكامل في الإنتاج ينبغي أن ينتظر حصول المشروع على الصلاحية ونتائج تقييمات خاصة بأعباء العمل.

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

تبقى جدوى السعر غير محسومة حتى تتوافر بيانات القياس لديك. عند تساوي الرموز، تبلغ التكلفة 2.5 مرة من أسعار GPT-5.6 Sol الترويجية. وقد تسد هذه الفجوة في بعض المهام عوامل مثل تحسين التخزين المؤقت، وتقليل رموز الإخراج، وخفض مرات إعادة البدء. ضع التجربة خلف حد إنفاق صارم، ثم قيّم Astra على أساس تكلفة المهمة المكتملة ووقت المشغّل.

ما الذي ينبغي تنفيذه يوم الاثنين؟

  • إذا كان تطبيقك يستخدم استدعاءات أدوات Chat Completions وتريد اعتماد Astra، فاحصر مسار إنتاج واحدًا وموّل هذا الأسبوع مسار ظل يعمل على Responses.
  • إذا كان تطبيقك نصيًا فقط، فأبقِه مستقرًا ريثما يتوسع الوصول. لا يوجد ترحيل إجباري لنقطة النهاية في هذا المسار.
  • إذا كانت الأدوات البطيئة تهيمن على الزمن المنقضي، فاختبر دالة غير متزامنة واحدة وقِس وقت الخمول والإخفاقات وتكلفة المهمة المكتملة.
  • إذا كانت التصحيحات البشرية المتأخرة تتسبب في إعادة البدء، فابنِ نموذجًا أوليًا للتوجيه فقط بعد نجاح اختبارات إعادة اتصال WebSocket وإعادة التمرير.
  • إذا كان تسعير رموز Astra عند 2.5 مرة يفسد اقتصاديات الوحدة قبل ظهور أي تعويض مقاس، فأبقِ عبء العمل على GPT-5.6 Sol أو Terra أو Luna.

لتحصل على تحويل عملي للتغيير المقبل في المنصة إلى قرار سير عمل وميزانية، اشترك في النشرة البريدية.

آخر تحديث

4 سبتمبر 2026

التصنيفExplained

فضّل هذا الموقع في Google

إضافة omidsaffari.com كمصدر مفضّل في بحث Google

اجعل omidsaffari.com مصدرًا مفضّلًا، وسيرفعه Google لك في Top Stories وAI Overviews وAI Mode.

المزيد من Explained

عرض كل مقالات Explained
النشرة البريدية

رسالة واحدة، كل يوم أحد. أنظمة تعمل، لا آراء ساخنة.

سجلات بناء، وأنظمة قيد التشغيل، وملاحظات ميدانية من إدارة محفظة مشاريع ذكاء اصطناعي.

أسبوعية. بلا إزعاج. يمكنك إلغاء الاشتراك متى شئت.