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