Skip to main content
نوع result.object هو z.output<typeof schema>، ولذلك تُطبَّق القيم الافتراضية والتحويلات (transforms) في zod. أما result.text فيحتفظ بنص JSON الخام الذي كتبه النموذج. يمكن أن يأتي المخطط من zod 3 أو zod 4: يُحوَّل إلى JSON Schema بالدالة z.toJSONSchema في zod 4 وبمحوِّل حزمة ai SDK في zod 3، ويُتحقَّق منه في الحالتين بالدالة safeParse الخاصة بالمخطط نفسه. نوع output هو Standard Schema، مثل defineTool({ input }) تمامًا، ولذلك يُستنتج نوع result.object دون تحويل نوع صريح (cast) سواء كان المخطط من zod 3، أو من zod 4 (zod/v4 في zod 3.25، أو zod 4 نفسه)، أو أي Standard Schema آخر يستطيع إنتاج JSON Schema:

الجلسات

استدعاء agent.session() على وكيل له output يُعيد جلسة تحمل فيها نتيجةُ send() (وكذلك result في stream()) الكائنَ object محدَّد النوع لكل دورة. لا يمكن تغيير output لاستدعاء بعينه: المخطط هو مخطط الوكيل.

الوكلاء الفرعيون

الوكيل الفرعي المُنشأ بمخطط output خاص به يجيب الوكيل الرئيسي بكائنه المُتحقَّق منه. نتيجة الأداة task (وكذلك result في agent_await للمهمة العاملة في الخلفية) هي الكائن بصيغة JSON، يليه سطر فارغ ثم التذييل المعتاد [sub-agent '<name>': ... taskId '<id>']، فيرى نموذج الوكيل الرئيسي الكائن نفسه لا صياغة نثرية له. وإذا بقي رد الوكيل الفرعي غير صالح بعد خطوة الإصلاح، فشل استدعاء task بخطأ الأداة المنظَّم (kind: 'execution'، ورسالة تذكر مشكلات المخطط) ويستطيع الوكيل الرئيسي أن يعيد المحاولة أو يتكيّف. الوكيل الفرعي لا يرث output الوكيل الرئيسي: مخرجات كل وكيل خاصة به، والوكيل الفرعي الذي ليس له output يُعيد نصًا كما كان من قبل. وremoteAgent() الذي يملك وكيله المنشور مخطط output يُعيد الكائن البعيد بالطريقة نفسها (JSON ثم تذييله)، مقروءًا من object في الحدث run.done من البث البعيد.

كيف يعمل

  1. يُضاف إلى موجّه النظام قسم ## Output format يطلب أن تكون الإجابة النهائية كائن JSON فقط يطابق المخطط، معروضًا بصيغة JSON Schema.
  2. يحمل كل استدعاء للنموذج responseFormat: { type: 'json', schema } في GenerateOptions. وهو تلميح: المزوّدون المضمَّنون المبنيون على ai-SDK يفعّلون وضع JSON في النموذج (مع المخطط، في النماذج التي تدعم المخرجات المنظَّمة)؛ أما المزوّد المخصَّص فله أن يستخدمه أو يتجاهله.
  3. عندما يرد النموذج دون استدعاءات أدوات، يُحلَّل الرد بوصفه JSON (ويُقبل أن يكون محاطًا بسياج شيفرة ```json) ثم يُتحقَّق منه وفق المخطط.
  4. إذا كان غير صالح، يحصل النموذج على خطوة إصلاح واحدة: رسالة مستخدم تبدأ بـ [output-invalid] وتسرد المشكلات، مثل 1 issue (tempC: Expected number, received string). تُحتسب خطوة الإصلاح من maxSteps، ولا تُمنح إذا استُنفدت الميزانية.
  5. إذا بقي غير صالح، يُحسم التشغيل (ولا يُرفض) بـ finishReason: 'output-invalid'، دون object، ومع outputError: { message, issues: [{ path, message }] }.

البث

agent.stream() يعمل بالطريقة نفسها: يُحسم run.result ومعه object، ويحمل الحدث النهائي run.done الكائن object (مرمَّزًا بصيغة JSON) إذا كان الرد صالحًا. وتظهر خطوة الإصلاح زوجًا إضافيًا من step.start / step.done. راجع البث.

دون createAgent()

AgentExecutor.execute() وAgentExecutor.stream() يقبلان الخيار output نفسه. هناك يكون نوع result.object هو unknown؛ حلّله مرة أخرى بمخططك، أو استخدم createAgent() للحصول على النوع المستنتَج.

الاختبار

مع mockModel، اكتب سلفًا نص JSON الذي كان النموذج سيكتبه: