Skip to main content

الخيار

reasoning إما مستوى جهد، 'none' | 'minimal' | 'low' | 'medium' | 'high'، أو كائن: اضبطه في createAgent({ reasoning }) لكل التشغيلات، أو لكل استدعاء عبر send(input, { reasoning }) / stream(input, { reasoning }). الوكيل الفرعي يستخدم reasoning الخاص به، لا الخاص بالوكيل الأب. تأخذه AgentExecutor.execute() في ExecuteOptions.reasoning، ويستقبله المزوّد المخصَّص في GenerateOptions.reasoning. 'none' لا يرسل شيئًا: يعمل النموذج بالإعداد الافتراضي لدى مزوّده (ونماذج الاستدلال من OpenAI تظل تستدل بمستوى جهدها الافتراضي).

المقابل لدى كل مزوّد

قيود تطبّقها حزم المزوّدين عنك: @ai-sdk/anthropic تضيف ميزانية التفكير إلى max_tokens (فتبقى الميزانية دائمًا أقل منه) وتُسقط temperature وtopP اللذين لا تسمح بهما Anthropic مع التفكير؛ و@ai-sdk/openai تُسقط temperature لنماذج الاستدلال. وكلتاهما تسجّل تحذيرًا حين تُسقط إعدادًا.

أي النماذج تحصل عليه

لا تُرسل الخيارات إلا إلى عائلات النماذج المعروف أنها تقبلها، فلا يتلقى نموذج لا يستدل خطأ «خيار غير معروف» أبدًا: لأي معرّف نموذج آخر (نموذج مضبوط بدقة (fine-tune)، أو عائلة جديدة) مرّر { effort, force: true }.

الأحداث والنتائج

agent.stream() يُصدر reasoning.start، ثم reasoning.delta (text) أثناء تفكير النموذج، ثم reasoning.done (text: النص كله؛ وtokens إذا كان المزوّد قد أبلغ عن رموز الاستدلال حتى تلك اللحظة). تأتي هذه الأحداث داخل الخطوة، قبل أول text.delta أو tool.start فيها. والمزوّد الذي لا يستطيع البث يُبلغ عن استدلال الخطوة في صورة start/delta/done واحدة قبل نصها. result.reasoning هو نص الاستدلال لخطوات التشغيل، يفصل بين كل خطوة وأخرى سطر فارغ. وresult.usage.reasoningTokens (وكل عنصر في stepUsage) يعدّ رموز الاستدلال حين يُبلغ عنها المزوّد؛ ويحملها مقطع التتبّع chat في lousho.usage.reasoning_tokens. الجهات المستهلِكة تعرضه أيضًا: reduceAgentEvents() تحتفظ به في reasoning الخاص برسالة المساعد، وtoUIMessageStream() تُصدر الأجزاء reasoning-start / reasoning-delta / reasoning-end لـ useChat، وlousho acp يرسل تحديثات agent_thought_chunk، وlousho chat يطبعه بلون باهت.

ما يُحفظ في سجل المحادثة

لا يُكتب الاستدلال في سجل المحادثة نصًا أبدًا ولا يُعاد إرساله إلى النموذج محتوًى، مع استثناء واحد يفرضه المزوّد: تحتاج Anthropic إلى كتل التفكير الخاصة بالدورة، دون تعديل ومع تواقيعها، حين تواصل بعد استدعاءات الأدوات في تلك الدورة. وعليه:
  • رسالة المساعد التي أجرت استدعاءات أدوات تحتفظ بكتل التفكير الموقَّعة (أو المحجوبة) في message.reasoning؛ ويعيد مزوّد Anthropic إرسالها أولًا في تلك الدورة. وهي تبقى بعد الخطوة التالية، ونقطة الحفظ، والاستئناف بعد انهيار، والتوقف المؤقت للموافقة، لأنها جزء من الرسائل المحفوظة.
  • الاستدلال غير الموقَّع (OpenAI و Ollama و OpenRouter) واستدلال الرد النهائي لا يُحفظان في messages. وعناصر الاستدلال المشفَّرة لدى OpenAI لا تُنقل بين الخطوات.
  • المزوّدون الآخرون يتجاهلون message.reasoning.