داشبورد توسعه‌دهنده
پرسش از هوش مصنوعی
پرسش از هوش مصنوعی

مدل‌های استدلالی

مدل‌های پیشرفته استدلال و حل مسئله موجود از طریق AvalAI را کاوش کنید.

مقدمه

مدل‌های استدلالی مدل‌های زبان بزرگی هستند که برای مصرف compute بیشتر روی استدلال پیچیده پیش از پاسخ آموزش دیده‌اند. reasoning آن‌ها را یک فرایند داخلی بدانید: پاسخ نهایی، دلیل کوتاه، citation یا checklist بخواهید، اما از مدل نخواهید chain-of-thought پنهان را آشکار کند. آن‌ها در حل مسائل پیچیده، کدنویسی، استدلال علمی و برنامه‌ریزی چند مرحله‌ای برای گردش کارهای عاملی (agentic) برتری دارند.

AvalAI دسترسی به چندین مدل با قابلیت استدلال از ارائه‌دهندگان مختلف را فراهم می‌کند:

مدل‌های OpenAI:

  • gpt-5.6-sol: جدیدترین پرچم‌دار با بیشترین توانایی از خانواده GPT-5.6 برای کدنویسی عاملی دشوار، کار دانشی، استدلال علمی و هماهنگی ابزارها، پنجره زمینه ۱M
  • gpt-5.6-terra: مدل متعادل GPT-5.6 برای استدلال تولیدی روزمره و گردش‌کارهای عاملی، پنجره زمینه ۱M
  • gpt-5.6-luna: مدل مقرون‌به‌صرفه GPT-5.6 برای استدلال پرترافیک، پشتیبانی و گردش‌کارهای اسنادی، پنجره زمینه ۱M
  • gpt-5.5: پرچم‌دار قبلی OpenAI با استدلال در سطح جدیدترین فناوری در کدنویسی عاملی، کار دانشی، استفاده از کامپیوتر و تحقیقات علمی (تلاش قابل تنظیم: none/low/medium/high/xhigh)، پنجره زمینه ۱M
  • gpt-5.4-pro: مدل GPT-5.4 با بالاترین سطح استدلال برای کار حرفه‌ای پیچیده، پنجره زمینه ۱.۰۵M، سطوح تلاش medium/high/xhigh
  • gpt-5.4: مدل frontier برای استدلال و گردش‌کارهای عاملی با تلاش قابل تنظیم (none/low/medium/high/xhigh)، پنجره زمینه ۱.۰۵M
  • gpt-5.4-mini: مدل سریع و مقرون به صرفه با پشتیبانی از استدلال (سطوح تلاش بدون، کم، متوسط)، زمینه ۴۰۰K
  • gpt-5.4-nano: سریع‌ترین و مقرون به صرفه‌ترین مدل با استدلال پایه (سطوح تلاش بدون، کم)، زمینه ۴۰۰K
  • gpt-5-pro: مدل استدلالی پیشرفته OpenAI با قابلیت‌های تفکر گسترده برای حل مسائل سطح تخصصی (کاربران سطح ۲ به بالا، فقط API Responses)
  • gpt-5.3-codex: توانمندترین مدل کدنویسی عاملی OpenAI با پشتیبانی از توکن‌های استدلال (فقط API Responses)
  • o4-mini: استدلال پیشرفته با کارایی بهبود یافته
  • o3: قابلیت‌های استدلالی متعادل با عملکرد خوب
  • o3-mini: مدلی کوچک‌تر و سریع‌تر، معمولا با هزینه کمتر به ازای هر توکن

مدل‌های Gemini گوگل:

  • gemini-3.6-flash: مدل همه‌کاره استدلالی Flash گوگل در ژوئیه ۲۰۲۶ برای کدنویسی عاملی، کار دانشی، تحلیل چندوجهی، استفاده کارآمد از ابزار و زمینه ۱M
  • gemini-3.5-flash-lite: سریع‌ترین و مقرون‌به‌صرفه‌ترین مدل استدلالی کلاس Gemini 3.5 برای زیرعامل‌های پرترافیک، پردازش سند، استخراج و بارهای کاری کم‌تأخیر
  • gemini-3.5-flash: مدل استدلالی Flash گوگل در مه ۲۰۲۶ با سطوح تفکر قابل تنظیم، عملکرد قوی در کدنویسی و استفاده عامل‌محور از ابزار، ورودی چندوجهی و زمینه ۱M
  • gemini-3.1-pro-preview: مدل پیشرفته کلاس Pro گوگل (فوریه ۲۰۲۶) با استدلال چندوجهی بومی، عملکرد عاملی قوی، کدنویسی پیشرفته و درک زمینه طولانی
  • gemini-3.1-flash-lite: مدل استدلالی پایدار و مقرون‌به‌صرفه برای وظایف عاملی سبک و پرتکرار با تأخیر بسیار پایین
  • gemini-3.1-flash-lite-preview: alias پیش‌نمایش Gemini 3.1 Flash-Lite با همان قیمت‌گذاری و قابلیت‌ها
  • gemini-2.5-pro: دارای قابلیت‌های تفکر و استدلال پیشرفته
  • gemini-2.5-flash: اولین مدل استدلال ترکیبی گوگل با بودجه‌های تفکر قابل تنظیم

مدل‌های Anthropic:دسترسی در سطح کاربری ۱ و بالاتر

  • claude-opus-5: پرچم‌دار جدید Opus شرکت Anthropic با پنجره ورودی ۱M، ظرفیت خروجی ۱۲۸K، تفکر تطبیقی، تلاش قابل تنظیم، بررسی دقیق‌تر و کدنویسی بلندمدت، کار دانشی، استفاده از کامپیوتر و تحلیل علمی بهبودیافته
  • claude-opus-4-8: پرچم‌دار قبلی Opus با تفکر تطبیقی، ۵ سطح تلاش (پایین/متوسط/بالا/فوق‌بالا/حداکثر)، تلاش پیش‌فرض high، پیام‌های سیستمی میان مکالمه و کدنویسی عاملی افق بلند قوی
  • claude-opus-4-7: مدل پرچم‌دار قبلی با تفکر تطبیقی، ۵ سطح تلاش (پایین/متوسط/بالا/فوق‌بالا/حداکثر) و بودجه وظایف
  • claude-sonnet-5: عاملی‌ترین مدل Sonnet شرکت Anthropic با تفکر تطبیقی و سطوح تلاش قابل تنظیم؛ تلاش بالاتر می‌تواند در برخی وظایف با Opus 4.8 برابری کند، با قیمت‌گذاری سطح Sonnet که پایین‌تر است
  • claude-sonnet-4-6: قابلیت‌های استدلالی قوی با کارایی بهتر
  • claude-haiku-4-5: استدلال سریع و کارآمد برای استقرارهای حساس به هزینه

مدل‌های Moonshot AI:

  • kimi-k3: پرچم‌دار جدید Moonshot AI با ۲٫۸ تریلیون پارامتر، زمینه ۱ میلیون توکنی، بینایی بومی، استدلال همیشه‌فعال، کدنویسی بلندمدت، خروجی ساختاریافته و فراخوانی ابزار
  • kimi-latest: alias پایدار که اکنون با همان قابلیت‌ها و قیمت به kimi-k3 اشاره می‌کند

برای Kimi K3 از فیلد سطح بالای reasoning_effort: "max" استفاده کنید. K3 فعلا فقط سطح max را پشتیبانی می‌کند و thinking در آن همیشه فعال است. پارامتر قدیمی thinking مربوط به K2.x یا فیلدهای sampling ثابت مانند temperature و top_p را استفاده نکنید. در workflowهای چندنوبتی و ابزارمحور، پیام کامل assistant را به درخواست بعدی اضافه کنید تا زمینه reasoning و tool call حفظ شود.

مدل‌های DeepSeek:

  • deepseek-v4-pro: مدل پرچم‌دار استدلالی DeepSeek با ۱٫۶ تریلیون پارامتر کل / ۴۹ میلیارد فعال، زمینه ۱M، فیلد reasoning_content و reasoning_effort: "high"/"max"
  • deepseek-v4-flash: شناسه پایدار که اکنون به‌طور خودکار از نسخه رسمی DeepSeek-V4-Flash-0731 با ۲۸۴ میلیارد پارامتر کل / ۱۳ میلیارد فعال استفاده می‌کند؛ دارای زمینه ۱M، کدنویسی و استفاده از ابزار بلندمدت قوی‌تر و reasoning_effort: "low"/"high"/"max"، بدون نیاز به تغییر کد یا قیمت
  • deepseek-reasoner: alias قدیمی که اکنون به deepseek-v4-pro هدایت می‌شود
  • deepseek-chat: alias قدیمی که اکنون به deepseek-v4-flash هدایت می‌شود

مدل‌های XAI:

  • grok-4.5: مدل پرچم‌دار جدید XAI برای کدنویسی، وظایف عاملی و کار دانشی با زمینه ۱M، سرویس‌دهی سریع، پشتیبانی Chat Completions و پشتیبانی جزئی Responses
  • grok-4.3: مدل استدلالی پرچمدار XAI با پنجره زمینه ۱M، فراخوانی تابع، خروجی‌های ساختاریافته و قیمت‌گذاری وابسته به زمینه بالای ۲۰۰K توکن
  • grok-4.20-reasoning: نسخه پایدار با سرعت پیشرو در صنعت و استدلال داخلی، پنجره زمینه ۲م، کمترین نرخ توهم‌زایی
  • grok-4.20-non-reasoning: نسخه پایدار بدون استدلال برای وظایفی که به استدلال داخلی گسترده نیاز ندارند، پنجره زمینه ۲م

مدل‌های MiniMax:

  • minimax-m3: مدل پرچم‌دار جدید با قابلیت‌های کدنویسی و عاملی پیشرو، پنجره زمینه ۱م (معماری MSA)، ورودی چندوجهی بومی و تفکر قابل تغییر
  • minimax-m2.7: مدل استدلالی انقلابی خود-تکامل (اولین مدلی که عمیقا در تکامل خود شرکت می‌کند)، ۵۶.۲۲٪ SWE-Pro، پشتیبانی از تیم‌های عامل
  • minimax-m2.7-highspeed: نسخه فوق‌سریع خود-تکامل (~۱۰۰ توکن در ثانیه سرعت خروجی)
  • minimax-m2.5: مدل شاخص نسل قبل با عملکرد SOTA در کدنویسی (۸۰.۲٪ SWE-Bench Verified) و بهره‌وری واقعی
  • minimax-m2.5-lightning: نسخه فوق سریع استدلالی (~۱۰۰ توکن در ثانیه سرعت خروجی)

مدل‌های Z.AI:

  • glm-5.2: جدیدترین مدل پرچمدار استدلالی با زمینه ۱ میلیون توکنی، کدنویسی پیشرو و مهندسی عامل‌محور افق بلند
  • glm-5.1: استدلال پیشرفته با ۵۸.۴٪ SWE-Bench Pro، بهینه‌سازی افق بلند برای مهندسی عامل‌محور
  • glm-5v-turbo: استدلال چندوجهی و درک بینایی با پردازش تصویری پرسرعت
  • glm-5-turbo: استدلال بهینه‌شده برای OpenClaw، فراخوانی ابزار، وظایف پایدار و اجرای زنجیره‌های طولانی

مدل‌های Alibaba:

  • qwen3.8-2.4t-a95b: مدل پایه وزن‌باز زیرساخت Qwen3.8-Max با ۲٫۴ تریلیون پارامتر کل و ۹۵ میلیارد پارامتر فعال، ورودی فقط متن، تفکر همیشه فعال و اجباری، زمینه ۲۶۲K و مقدارهای low، medium و xhigh برای reasoning_effort
  • qwen3.8-max: جدیدترین پرچم‌دار مدیریت‌شده ۲٫۴ تریلیون پارامتری برای کدنویسی بلندمدت، کار حرفه‌ای، استدلال چندوجهی و برنامه‌ریزی عاملی، با تفکر ترکیبی اختیاری از طریق enable_thinking، زمینه ۱ میلیون و حداکثر خروجی ۱۲۸K
  • qwen3.7-max: مدل پرچم‌دار قبلی پایه عامل، تفکر ترکیبی از طریق enable_thinking، ۹۲.۴ GPQA Diamond، ۹۷.۱ HMMT، زمینه ۱ میلیون
  • qwen3-max: مدل پرچم‌دار Qwen3 Max برای استدلال پیچیده و گردش‌های کاری عاملی، تفکر ترکیبی از طریق enable_thinking، زمینه ۲۶۲ هزار
  • qwen3.6-plus: مدل کدنویسی عاملی با ۷۸.۸٪ SWE-bench Verified، زمینه پیش‌فرض ۱ میلیون، توسعه وب پیشرو
  • qwen3.6-flash: مدل سریع با تفکر ترکیبی و سوئیچ enable_thinking، پنجره زمینه ۱ میلیون
  • qwen3.6-max-preview: پیش‌نمایش پرچمدار با تفکر ترکیبی، توانمندترین مدل Qwen3.6
  • qwen3.6-35b-a3b: MoE وزن-باز (۳۵B کل/۳B فعال) با حالت تفکر، زمینه ۲۵۶ هزار
  • qwen3.6-27b: مدل Dense بینایی-زبان برای استدلال با زمینه ۲۵۶ هزار

مدل‌های Fireworks.ai:

  • muse-glimmer-30b: مدل dense چندوجهی و عاملی Meta با حدود ۳۰B پارامتر، استفاده از ابزار، بازیابی از شکست، بیش از ۱۰۰ زبان، زمینه بیشتر از ۱۳۱K و سطوح reasoning قابل تنظیم low، medium، high و xhigh
  • nemotron-3.5-lightning: مدل hybrid MoE کارآمد NVIDIA با ۳۰B پارامتر کل و ۳B فعال، زمینه ۲۶۲K در AvalAI، استفاده از ابزار، کدنویسی و reasoning عاملی؛ پیاده‌سازی upstream امکان روشن یا خاموش کردن thinking را دارد
  • nemotron-3-ultra: مدل پرچمدار بزرگ‌مقیاس Nemotron از NVIDIA برای استدلال پیچیده و گردش‌کارهای عاملی، سرویس‌دهی‌شده از طریق Fireworks.ai

برای Muse Glimmer فقط زمانی که route انتخابی این فیلدها را می‌پذیرد، با مقادیر پیشنهادی upstream یعنی temperature: 1.0، top_p: 0.95 و top_k: 64 شروع کنید. برای Nemotron 3.5 Lightning از temperature: 1.0 و top_p: 0.95 شروع کنید. عبور کنترل‌های thinking اختصاصی provider را در همه endpointهای AvalAI فرض نکنید؛ پاسخ را بررسی و فیلدهای پشتیبانی‌نشده را حذف کنید.

توجه: برخی مدل‌های پیشرفته مانند o1-pro ممکن است ویژگی‌های منحصربه‌فرد و نقاط پایانی API خاصی داشته باشند (مثلا معادل AvalAI برای Responses API). برای جزئیات، به مستندات مدل مورد نظر و مرجع API AvalAI مراجعه کنید.

چه زمانی از مدل‌های reasoning استفاده کنیم

مدل‌های reasoning برای کارهایی مناسب‌اند که صحت پاسخ به برنامه‌ریزی، رفع ابهام یا سنجش دقیق trade-offها وابسته است. از آن‌ها استفاده کنید وقتی نیاز دارید:

  • حل مسئله پیچیده: تصمیم‌های ریاضی، علمی، مالی، حقوقی، policy یا مهندسی با محدودیت‌های زیاد.
  • ترکیب زمینه طولانی: یافتن رابطه‌ها در قراردادها، گزارش‌ها، transcriptها، ticketها یا سندهای بازیابی‌شده.
  • برنامه‌ریزی عاملی: تصمیم‌گیری درباره ابزارها، شکستن workflow یا واگذاری گام‌ها به مدل‌های اجرایی سریع‌تر.
  • بازبینی و debugging کد: بررسی diffهای چندفایلی، ریشه‌یابی خطاها یا اعتبارسنجی patchهای تولیدشده.
  • ارزیابی: داوری پاسخ مدل‌ها بر اساس rubricهای ظریف یا پاسخ‌های مرجع.

مدل‌های reasoning را مانند برنامه‌ریز و مدل‌های GPT-style سریع‌تر را مانند مجری در نظر بگیرید. از برنامه‌ریز برای ابهام، strategy ابزارها، تفسیر policy، ترکیب زمینه طولانی یا اعتبارسنجی نهایی استفاده کنید. از مجری برای extraction، بازنویسی، classification، formatting و گام‌های دقیقا تعریف‌شده‌ای استفاده کنید که سرعت و هزینه از reasoning عمیق مهم‌ترند. بسیاری از سیستم‌های production هر دو را ترکیب می‌کنند: مدل reasoning برنامه‌ریزی یا اعتبارسنجی می‌کند و مدل کم‌تأخیرتر گام‌های ساده را اجرا می‌کند.

پرامپت‌نویسی مؤثر برای مدل‌های reasoning

مدل‌های reasoning نسبت به مدل‌های کلاسیک GPT-style به سبک پرامپت متفاوتی نیاز دارند:

  • پرامپت را ساده و مستقیم نگه دارید؛ قبل از افزودن مثال‌ها، zero-shot شروع کنید.
  • قوانین برنامه را در پیام developer و وظیفه کاربر را در پیام user قرار دهید.
  • برای جدا کردن قوانین، زمینه و مثال‌ها از تیترهای Markdown، tagهای XML یا delimiterهای دیگر استفاده کنید.
  • محدودیت‌ها، معیار موفقیت، ابزارهای موجود و محتوای مورد انتظار پاسخ نهایی را دقیق مشخص کنید.
  • از درخواست chain-of-thought پنهان یا «step by step فکر کن» خودداری کنید؛ به‌جایش دلیل کوتاه، checklist پاسخ یا شواهد دارای citation بخواهید.
  • اگر یک snapshot مدل reasoning خروجی Markdown را کم می‌کند اما UI شما Markdown می‌خواهد، خط اول پیام developer را با Formatting re-enabled شروع کنید.

قابلیت‌های ارائه‌دهندگان متفاوت است. مدل‌های OpenAI در /v1/responses از reasoning.effort استفاده می‌کنند؛ Kimi K3 از فیلد سطح بالای reasoning_effort: "max" استفاده می‌کند؛ DeepSeek-V4-Flash-0731 مقدارهای low، high و max را می‌پذیرد. مدل مدیریت‌شده qwen3.8-max از enable_thinking با الزامات استریمینگ وابسته به route استفاده می‌کند، اما مدل وزن‌باز و فقط متن qwen3.8-2.4t-a95b تفکر اجباری دارد و مقدارهای low، medium و xhigh را برای reasoning_effort می‌پذیرد. قبل از کپی کردن پارامترها بین خانواده مدل‌ها، بخش provider را بررسی کنید.

شروع کار با استدلال

برای مدل‌های استدلالی OpenAI که از طریق AvalAI در دسترس هستند، وقتی مدل پشتیبانی می‌کند از /v1/responses استفاده کنید. Responses آیتم‌های خروجی تایپ‌شده را حفظ می‌کند، از reasoning.effort پشتیبانی می‌کند و می‌تواند آیتم‌های reasoning مرتبط را در فراخوانی‌های ابزار با previous_response_id یا replay کردن آیتم‌های خروجی قبلی نگه دارد. مثال‌های Chat Completions را برای routeهای ارائه‌دهنده‌محور یا ادغام‌های legacy که هنوز Responses ندارند نگه دارید.

چک‌لیست استدلال Responses-first

  • برای تعادل کیفیت، تأخیر و هزینه با gpt-5.6-terra یا gpt-5.6-sol و reasoning: {"effort": "medium"} شروع کنید؛ برای پشتیبانی یا draft سریع‌تر low را امتحان کنید و فقط وقتی evalها ارزشش را نشان می‌دهند از high یا xhigh استفاده کنید.
  • برای max_output_tokens فضای کافی برای خروجی قابل مشاهده و توکن‌های reasoning پنهان رزرو کنید. اگر پاسخ با status: "incomplete" و incomplete_details.reason: "max_output_tokens" برگشت، ممکن است مدل تمام بودجه را صرف reasoning کرده و هیچ متن قابل مشاهده‌ای تولید نکرده باشد. بودجه را افزایش دهید، در صورت پشتیبانی reasoning.effort را روی low یا none بگذارید یا task را ساده‌تر کنید.
  • وقتی مدل reasoning ابزار فراخوانی می‌کند، اگر سیاست نگهداری داده شما اجازه می‌دهد store: true را تنظیم کنید، سپس آیتم‌های reasoning و function-call پاسخ قبلی را برگردانید یا با previous_response_id ادامه دهید.
  • برای جریان‌های stateless یا شبیه zero-retention، در صورت پشتیبانی reasoning.encrypted_content را include کنید تا آیتم‌های reasoning رمزنگاری‌شده قابل round-trip باشند.
  • reasoning.summary را فقط وقتی درخواست کنید که مدل و حساب انتخابی از خلاصه‌ها پشتیبانی کنند؛ summary برای observability است، نه raw chain-of-thought.
  • مدل‌های reasoning را با هدف، محدودیت‌ها، ابزارهای موجود و معیار موفقیت prompt کنید. به‌جای درخواست chain-of-thought پنهان، توضیح نهایی کوتاه یا checklist بخواهید.

تأخیر و پیشرفت قابل مشاهده

در taskهای سخت، افزایش reasoning.effort می‌تواند کیفیت پاسخ را بهتر کند، اما زمان رسیدن اولین توکن مفید را هم بالا می‌برد. راهنمای reasoning در OpenAI پیشنهاد می‌کند وقتی به پیشرفت قابل مشاهده سریع‌تر نیاز دارید، از مدل یک preamble کوتاه بخواهید. در AvalAI این الگو برای ابزارهای developer، review assistantها و workflowهای agentic طولانی مفید است:

  • پیش از تحلیل عمیق فقط یک جمله کوتاه وضعیت بخواهید، نه chain-of-thought پنهان.
  • preamble را به‌عنوان status text نمایش دهید؛ آن را پاسخ نهایی حساب نکنید.
  • قرارداد پاسخ نهایی را صریح نگه دارید: تصمیم، شواهد، checklist، برنامه patch یا اقدام بعدی.
  • اگر route از phase پشتیبانی می‌کند، هنگام replay کردن state مقدارهای phase: "commentary" برای preamble و phase: "final_answer" برای پاسخ نهایی را حفظ کنید.
python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gpt-5.6-sol",
    reasoning={"effort": "high"},
    instructions=(
        "برای کارهای دشوار، ابتدا یک جمله کوتاه از وضعیت پیشرفت بده. "
        "chain-of-thought پنهان را آشکار نکن. در پایان، تصمیم، شواهد "
        "و checklist راستی‌آزمایی را کوتاه ارائه کن."
    ),
    input="این برنامه مهاجرت را از نظر ریسک‌های production بررسی کن: ...",
)

print(response.output_text)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const response = await client.responses.create({
  model: "gpt-5.6-sol",
  reasoning: { effort: "high" },
  instructions:
    "برای کارهای دشوار، ابتدا یک جمله کوتاه از وضعیت پیشرفت بده. chain-of-thought پنهان را آشکار نکن. در پایان، تصمیم، شواهد و checklist راستی‌آزمایی را کوتاه ارائه کن.",
  input: "این برنامه مهاجرت را از نظر ریسک‌های production بررسی کن: ...",
});

console.log(response.output_text);

جریان‌های طولانی ابزارمحور و phase

راهنمای فعلی Responses در OpenAI توصیه می‌کند برای جریان‌های طولانی یا ابزارمحور GPT-5.5/GPT-5.4 مقدار phase پیام دستیار را حفظ کنید. در AvalAI این قابلیت را وابسته به مدل و route بدانید: وقتی نگهداری state مجاز است previous_response_id را ترجیح دهید، و اگر تاریخچه دستیار را دستی replay می‌کنید، مقدارهای اصلی phase را بدون تغییر نگه دارید.

برای به‌روزرسانی‌های میانی دستیار قبل از tool call از phase: "commentary" و برای پاسخ تکمیل‌شده از phase: "final_answer" استفاده کنید. به پیام‌های کاربر phase اضافه نکنید. حذف phase metadata می‌تواند باعث شود یک یادداشت میانی در flow چندمرحله‌ای مثل پاسخ نهایی تفسیر شود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gpt-5.6-sol",
    input=[
        {
            "role": "assistant",
            "phase": "commentary",
            "content": "ابتدا لاگ‌ها را بررسی می‌کنم و بعد راه‌حل پیشنهاد می‌دهم.",
        },
        {
            "role": "assistant",
            "phase": "final_answer",
            "content": "علت اصلی: race در cache invalidation.",
        },
        {"role": "user", "content": "حالا یک برنامه اصلاح امن برای rollout بده."},
    ],
)

print(response.output_text)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const response = await client.responses.create({
  model: "gpt-5.6-sol",
  input: [
    {
      role: "assistant",
      phase: "commentary",
      content: "ابتدا لاگ‌ها را بررسی می‌کنم و بعد راه‌حل پیشنهاد می‌دهم.",
    },
    {
      role: "assistant",
      phase: "final_answer",
      content: "علت اصلی: race در cache invalidation.",
    },
    { role: "user", content: "حالا یک برنامه اصلاح امن برای rollout بده." },
  ],
});

console.log(response.output_text);

مثال: استفاده از یک مدل استدلالی

bash
PROMPT='یک اسکریپت bash بنویسید که یک ماتریس را به صورت رشته با فرمت '\''[1,2],[3,4],[5,6]'\'' دریافت کرده و ترانهاده آن را با همان فرمت چاپ کند.'

curl https://api.avalai.ir/v1/responses \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
 "model": "gpt-5.6-sol",
 "reasoning": {"effort": "medium"},
 "input": [
 {
 "role": "user",
 "content": "'"$PROMPT"'"
 }
 ]
 }'
python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

prompt = """
یک اسکریپت bash بنویسید که یک ماتریس را به صورت رشته با فرمت
'[1,2],[3,4],[5,6]' دریافت کرده و ترانهاده آن را با همان فرمت چاپ کند.
"""

try:
    response = client.responses.create(
        model="gpt-5.6-sol",
        reasoning={"effort": "medium"},
        input=[{"role": "user", "content": prompt}],
    )
    print(response.output_text)
except Exception as e:
    print(f"یک خطای API رخ داد: {e}")
javascript
import OpenAI from "openai"; // از کتابخانه استاندارد OpenAI پیکربندی شده برای AvalAI استفاده کنید
import * as dotenv from "dotenv";
dotenv.config();

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1", // نقطه پایانی AvalAI
});

const prompt = `
یک اسکریپت bash بنویسید که یک ماتریس را به صورت رشته با فرمت
'[1,2],[3,4],[5,6]' دریافت کرده و ترانهاده آن را با همان فرمت چاپ کند.
`;

async function runReasoning() {
  try {
    const response = await client.responses.create({
      model: "gpt-5.6-sol",
      reasoning: { effort: "medium" },
      input: [{ role: "user", content: prompt }],
    });
    console.log(response.output_text);
  } catch (error) {
    console.error("یک خطای API رخ داد:", error);
  }
}

runReasoning();
go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	prompt := `
یک اسکریپت bash بنویسید که یک ماتریس را به صورت رشته با فرمت
'[1,2],[3,4],[5,6]' دریافت کرده و ترانهاده آن را با همان فرمت چاپ کند.
`

	payload := map[string]any{
		"model":     "gpt-5.5",
		"reasoning": map[string]string{"effort": "medium"},
		"input": []map[string]string{
			{
				"role":    "user",
				"content": prompt,
			},
		},
	}

	body, err := json.Marshal(payload)
	if err != nil {
		panic(err)
	}

	req, err := http.NewRequest("POST", "https://api.avalai.ir/v1/responses", bytes.NewBuffer(body))
	if err != nil {
		panic(err)
	}
	req.Header.Set("Authorization", "Bearer "+os.Getenv("AVALAI_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	resp, err := http.DefaultClient.Do(req)

	if err != nil {
		fmt.Printf("خطای Responses API: %v\n", err)
		return
	}
	defer resp.Body.Close()

	responseBody, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}

	fmt.Println(string(responseBody))
}
php
<?php
$apiKey = getenv('AVALAI_API_KEY');
$prompt = <<<PROMPT
یک اسکریپت bash بنویسید که یک ماتریس را به صورت رشته با فرمت
'[1,2],[3,4],[5,6]' دریافت کرده و ترانهاده آن را با همان فرمت چاپ کند.
PROMPT;

$payload = [
    'model' => 'gpt-5.5',
    'reasoning' => ['effort' => 'medium'],
    'input' => [
        ['role' => 'user', 'content' => $prompt],
    ],
];

$ch = curl_init('https://api.avalai.ir/v1/responses');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($payload),
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;

?>

تلاش استدلالی (Reasoning Effort)

برخی از مدل‌های استدلالی پارامترهایی مانند reasoning.effort را برای هدایت میزان استدلال داخلی انجام شده قبل از تولید پاسخ می‌پذیرند. مقادیر بالقوه شامل موارد زیر است:

  • none: در مدل‌های پشتیبانی‌شده استدلال صریح را غیرفعال می‌کند و سرعت را ترجیح می‌دهد.
  • minimal: وقتی مدل این مقدار را پشتیبانی کند، کوچک‌ترین بودجه reasoning را استفاده می‌کند.
  • low: سرعت و استفاده کمتر از توکن را ترجیح می‌دهد.
  • medium (اغلب پیش‌فرض): تعادلی بین سرعت و کیفیت استدلال برقرار می‌کند.
  • high: استدلال کامل‌تر را ترجیح می‌دهد، بالقوه با استفاده از توکن‌های بیشتر و زمان طولانی‌تر.
  • xhigh یا max: در مدل‌های پشتیبانی‌شده، بیشترین میزان استدلال را برای سخت‌ترین وظایف کدنویسی، ریاضی و عاملی استفاده می‌کند.

برای پارامترهای پشتیبانی شده و اثرات آنها، با مستندات مدل مورد نظر در AvalAI مشورت کنید.

انتخاب effort در production

effort را یک پیچ تنظیم تأخیر/هزینه/کیفیت بدانید، نه اولین راه‌حل برای پرامپت ضعیف. با پایین‌ترین مقداری شروع کنید که evalهای شما را پاس می‌کند، سپس فقط برای taskهایی آن را بالا ببرید که توکن‌های reasoning اضافه، کیفیت قابل اندازه‌گیری ایجاد می‌کنند.

workloadنقطه شروع پیشنهادیدلیل
voice، classification، retrieval سادهnone یا low در صورت پشتیبانیتأخیر اولین توکن و مصرف کمتر توکن را اولویت می‌دهد.
پشتیبانی مشتری، draft، برنامه‌ریزی ابزارlow یا mediumبرای strategy ابزار فضا می‌گذارد بدون اینکه بیش‌ازحد هزینه کند.
کدنویسی، پژوهش، تحلیل spreadsheet/documentmediumبا پیش‌فرض متعادل راهنمای فعلی OpenAI برای مدل‌هایی مانند gpt-5.5 هم‌راستا است.
deep research، security review، debugging دشوارhigh یا xhigh پس از evalوقتی دقت از تأخیر و هزینه مهم‌تر است مفید است.

پیش‌فرض‌ها وابسته به مدل هستند. فرض نکنید medium در OpenAI، Anthropic، Gemini، DeepSeek، XAI یا ارائه‌دهندگان دیگر universal است؛ effort انتخاب‌شده را در traceهای eval ثبت کنید و قبل از تغییر پیش‌فرض production، کیفیت، تأخیر، output_tokens و output_tokens_details.reasoning_tokens را مقایسه کنید.

نحوه عملکرد استدلال

مدل‌های استدلالی علاوه بر توکن‌های ورودی و خروجی استاندارد، از توکن‌های استدلالی به صورت داخلی استفاده می‌کنند. این توکن‌ها نمایانگر "فرایند فکری" مدل هستند - تجزیه پرامپت، کاوش رویکردها و برنامه‌ریزی پاسخ. پس از این مرحله استدلال داخلی، مدل توکن‌های خروجی قابل مشاهده نهایی را تولید می‌کند و معمولا توکن‌های استدلالی را از حافظه زمینه خود برای نوبت‌های بعدی حذف می‌کند.

نموداری که نشان می‌دهد توکن‌های استدلالی به صورت داخلی استفاده می‌شوند اما در زمینه نگهداری نمی‌شوند(منبع نمودار: OpenAI)

مهم: توکن‌های reasoning ممکن است در متن نهایی پاسخ پنهان باشند، اما همچنان قابل پرداخت‌اند و هنگام تولید در پنجره زمینه مدل فضا اشغال می‌کنند. در همه ارائه‌دهندگان و مدل‌ها، این توکن‌ها با نرخ توکن خروجی مدل انتخابی محاسبه می‌شوند. وقتی output_tokens از قبل آنها را شامل می‌شود، output_tokens_details.reasoning_tokens تفکیک این مقدار است؛ بنابراین افزودن reasoning_tokens به output_tokens باعث دوباره‌شماری می‌شود. اگر route خروجی قابل مشاهده و reasoning را جدا گزارش می‌کند، همان نرخ توکن خروجی را برای هر دو مقدار به کار ببرید.

تنظیمات استدلال مختص ارائه دهنده

ارائه‌دهندگان مختلف مدل، قابلیت‌های استدلالی را به روش‌های خاص خود پیاده‌سازی می‌کنند. در اینجا نحوه استفاده از ویژگی‌های استدلالی با هر ارائه دهنده از طریق AvalAI توضیح داده شده است:

تنظیمات استدلال مدل‌های Gemini

مدل‌های استدلالی جدید Gemini 3.6، 3.5 و 3.1 از تفکر قابل تنظیم از طریق generationConfig.thinkingConfig مربوط به Gemini پشتیبانی می‌کنند. برای gemini-3.6-flash، gemini-3.5-flash-lite، gemini-3.5-flash، gemini-3.1-pro-preview، gemini-3.1-flash-lite و gemini-3.1-flash-lite-preview از thinkingLevel برای تنظیم تعادل کیفیت، تأخیر و هزینه استفاده کنید.

هنگام استفاده از کتابخانه‌های کلاینت OpenAI با AvalAI، تنظیمات اختصاصی Gemini را از طریق پارامتر extra_body ارسال کنید:

python
# مثال پایتون - سطوح تفکر Gemini
response = client.chat.completions.create(
    model="gemini-3.6-flash",
    messages=[
        {
            "role": "user",
            "content": "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
        }
    ],
    extra_body={"generationConfig": {"thinkingConfig": {"thinkingLevel": "high"}}},
)
javascript
// مثال جاوااسکریپت - سطوح تفکر Gemini
const response = await client.chat.completions.create({
  model: "gemini-3.6-flash",
  messages: [
    {
      role: "user",
      content: "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
    },
  ],
  // @ts-expect-error extra_body برای گزینه‌های اختصاصی Gemini در AvalAI پشتیبانی می‌شود
  extra_body: {
    generationConfig: {
      thinkingConfig: { thinkingLevel: "high" },
    },
  },
});
نسخه معادل Responses API

Gemini 3.6 Flash و Gemini 3.5 Flash-Lite از /v1/responses به‌صورت جزئی پشتیبانی می‌کنند. زمانی از این نسخه استفاده کنید که پارامترها و ابزارهای موردنیاز گردش‌کار شما پشتیبانی شوند؛ messages به input منتقل می‌شود و متن نهایی از response.output_text خوانده می‌شود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gemini-3.6-flash",
    instructions="You are a helpful assistant.",
    input="این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
)

print(response.output_text)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const response = await client.responses.create({
  model: "gemini-3.6-flash",
  instructions: "You are a helpful assistant.",
  input: "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
});

console.log(response.output_text);
bash
curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '
  {
    "model": "gemini-3.6-flash",
    "input": "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
    "instructions": "You are a helpful assistant."
  }'
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

تنظیمات تفکر Gemini 3.6/3.5/3.1 شامل موارد زیر است:

  • thinkingLevel: عمق استدلال را کنترل می‌کند. سطح‌های پشتیبانی‌شده به مدل و route انتخابی بستگی دارند.
  • سطح تفکر بالاتر معمولا کیفیت استدلال چندمرحله‌ای و استفاده از ابزار را بهتر می‌کند، اما می‌تواند تأخیر و مصرف توکن را افزایش دهد.
  • برای پیش‌فرض production متعادل از یک سطح میانی پشتیبانی‌شده و برای کارهای پیچیده کدنویسی، عاملی یا تحلیلی از یک سطح بالاتر پشتیبانی‌شده استفاده کنید.

برای endpoint بومی Gemini v1beta، همین پیکربندی را مستقیما در بدنه درخواست ارسال کنید:

bash
curl https://api.avalai.ir/v1beta/models/gemini-3.6-flash:generateContent \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '{
    "contents": [{"role": "user", "parts": [{"text": "برای مهاجرت مقاوم از monolith به microservices برنامه‌ریزی کن."}]}],
    "generationConfig": {
      "thinkingConfig": {"thinkingLevel": "high"}
    }
  }'

نکته قدیمی

thinking_budget مخصوص Gemini 2.5 Flash است. برای آخرین اطلاعات، به مستندات رسمی Google AI مراجعه کنید.

Gemini 2.5 Flash از کنترل تفکر مبتنی بر بودجه استفاده می‌کند:

python
# مثال پایتون - بودجه تفکر Gemini 2.5 Flash
response = client.chat.completions.create(
    model="gemini-2.5-flash",
    messages=[
        {
            "role": "user",
            "content": "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
        }
    ],
    extra_body={"thinking": {"type": "enabled", "budget_tokens": 2000}},
)
javascript
// مثال جاوااسکریپت - بودجه تفکر Gemini 2.5 Flash
const responseAlt = await client.chat.completions.create({
  model: "gemini-2.5-flash",
  messages: [{ role: "user", content: "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ..." }],
  // @ts-expect-error thinking یک پارامتر اختصاصی ارائه‌دهنده و مستندنشده است
  thinking: { type: "enabled", budget_tokens: 2000 },
});
نسخه معادل Responses API مدل این نسخه روی `gpt-5.5` تنظیم شده، چون `gemini-2.5-flash` ممکن است در داده‌های فعلی AvalAI برای `/v1/responses` فعال نباشد.

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. messages به input منتقل می‌شود و متن نهایی از response.output_text خوانده می‌شود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gpt-5.6-sol",
    instructions="You are a helpful assistant.",
    input="این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
)

print(response.output_text)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const response = await client.responses.create({
  model: "gpt-5.6-sol",
  instructions: "You are a helpful assistant.",
  input: "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
});

console.log(response.output_text);
bash
curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '
  {
    "model": "gpt-5.6-sol",
    "input": "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
    "instructions": "You are a helpful assistant."
  }'
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

با تنظیم سطح یا بودجه تفکر مناسب، می‌توانید هم عمق استدلال و هم هزینه فراخوانی‌های API خود را کنترل کنید.

تنظیمات استدلال مدل‌های Anthropic

مدل‌های Claude از Anthropic (به‌ویژه claude-opus-5، claude-sonnet-5، claude-opus-4-8، claude-opus-4-7، claude-sonnet-4-6 و claude-haiku-4-5) از استدلال قابل تنظیم با تنظیمات thinking اختصاصی ارائه‌دهنده پشتیبانی می‌کنند. برای Claude Opus 5 از thinking: {"type": "adaptive"} همراه با output_config.effort استفاده کنید و بودجه ثابت extended thinking نفرستید. از medium یا high شروع کنید و فقط زمانی به xhigh یا max افزایش دهید که ارزیابی‌ها بهبود معنادار موفقیت وظیفه را نشان دهند.

python
response = client.chat.completions.create(
    model="claude-opus-5",
    messages=[
        {
            "role": "user",
            "content": "این طراحی مهاجرت را تحلیل کن، حالت‌های شکست را شناسایی کن و برنامه rollback را بررسی کن.",
        }
    ],
    extra_body={
        "thinking": {"type": "adaptive"},
        "output_config": {"effort": "high"},
    },
)
نسخه معادل Responses API؛ Claude Opus 5 در `/v1/responses` پشتیبانی جزئی دارد و باید فیلدها و ابزارهای موردنیاز را پیش از استفاده production بررسی کنید.

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. messages به input منتقل می‌شود و متن نهایی از response.output_text خوانده می‌شود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gpt-5.6-sol",
    instructions="You are a helpful assistant.",
    input="این طراحی مهاجرت را تحلیل کن، حالت‌های شکست را شناسایی کن و برنامه rollback را بررسی کن.",
)

print(response.output_text)
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

کنترل‌های effort در Anthropic اختصاصی ارائه‌دهنده هستند؛ پارامترهای thinking مدل‌های Gemini یا فیلد reasoning.effort مدل‌های OpenAI را بدون بررسی route انتخابی کپی نکنید. به‌جای chain-of-thought پنهان، دلیل کوتاه یا شواهد بررسی درخواست کنید.

تنظیمات استدلال مدل‌های OpenAI

جدیدترین مدل‌های استدلالی OpenAI (gpt-5.5، gpt-5.4-pro، gpt-5.4، gpt-5.4-mini، gpt-5.4-nano، gpt-5.3-codex، gpt-5-pro، o4-mini، o3 و o3-mini) دارای قابلیت‌های استدلالی داخلی هستند که در صورت نیاز به طور خودکار فعال می‌شوند. برای این مدل‌ها، ممکن است توکن‌های استدلالی را در آمار استفاده خود مشاهده کنید، اما فرآیند استدلال بیشتر در عملکرد مدل یکپارچه شده است.

برای کنترل پیشرفته‌تر، برخی نقاط پایانی ممکن است از پارامترهایی مانند reasoning.effort برای هدایت میزان استدلال داخلی پشتیبانی کنند:

python
response = client.chat.completions.create(
    model="gpt-5.6-sol",
    messages=[
        {
            "role": "user",
            "content": "یک الگوریتم برای حل این مسئله بهینه‌سازی طراحی کن: ...",
        }
    ],
    extra_body={"reasoning": {"effort": "high"}},  # درخواست استدلال کامل‌تر
)
نسخه معادل Responses API

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. messages به input منتقل می‌شود و متن نهایی از response.output_text خوانده می‌شود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gpt-5.6-sol",
    instructions="You are a helpful assistant.",
    input="یک الگوریتم برای حل این مسئله بهینه‌سازی طراحی کن: ...",
)

print(response.output_text)
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

تنظیمات استدلال مدل‌های DeepSeek

DeepSeek قابلیت‌های استدلالی را از طریق خانواده پرچم‌دار V4 (deepseek-v4-pro و deepseek-v4-flash) ارائه می‌دهد. شناسه پایدار deepseek-v4-flash اکنون با همان قیمت به‌طور خودکار از نسخه رسمی DeepSeek-V4-Flash-0731 استفاده می‌کند و قابلیت‌های عاملی قوی‌تر و سطوح تلاش low، high و max دارد. در حالت تفکری، routeهای پشتیبانی‌شده می‌توانند فیلد provider-specific به نام reasoning_content را برای تداوم/observability همراه با پاسخ نهایی برگردانند. نام‌های قدیمی deepseek-reasoner (→ deepseek-v4-pro) و deepseek-chat (→ deepseek-v4-flash) همچنان کار می‌کنند اما در ۲۴ ژوئیه ۲۰۲۶ بازنشسته خواهند شد.

ویژگی‌های کلیدی:

  • reasoning_content: حاوی trace استدلالی ارائه‌شده توسط provider برای تداوم فراخوانی ابزار و observability
  • content: حاوی پاسخ نهایی
  • Trace استدلالی: از trace ارائه‌شده توسط provider برای debugging، تداوم فراخوانی ابزار و observability استفاده کنید
  • ادغام با فراخوانی ابزار: حالت تفکری با فراخوانی تابع کار می‌کند
  • کلید حالت تفکری: هرجا route انتخابی V4 این کلید را ارائه می‌دهد، از extra_body={"thinking": {"type": "enabled"}} یا {"type": "disabled"} استفاده کنید
  • تلاش استدلالی: DeepSeek-V4-Flash-0731 از reasoning_effort: "low"، "high" یا "max" پشتیبانی می‌کند؛ پیش از اشتراک پیکربندی میان خانواده، مقدارهای V4-Pro را جداگانه بررسی کنید
  • پنجره زمینه: مدل‌های پرچم‌دار V4 به‌صورت پیش‌فرض پنجره زمینه ۱ میلیون توکنی دارند

استفاده پایه (حالت تفکری، V4-Pro):

python
response = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[
        {
            "role": "user",
            "content": "۹.۱۱ و ۹.۸، کدام بزرگ‌تر است؟",
        }
    ],
    reasoning_effort="high",
    extra_body={"thinking": {"type": "enabled"}},
)

# دسترسی به فرآیند استدلال
reasoning = response.choices[0].message.reasoning_content
# دسترسی به پاسخ نهایی
answer = response.choices[0].message.content
نسخه معادل Responses API مدل این نسخه روی `gpt-5.5` تنظیم شده، چون `deepseek-v4-pro` ممکن است در داده‌های فعلی AvalAI برای `/v1/responses` فعال نباشد.

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. messages به input منتقل می‌شود و متن نهایی از response.output_text خوانده می‌شود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gpt-5.6-sol",
    instructions="You are a helpful assistant.",
    input="۹.۱۱ و ۹.۸، کدام بزرگ‌تر است؟",
)

print(response.output_text)
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

استدلال سریع و اقتصادی (V4-Flash):

python
response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[
        {
            "role": "user",
            "content": "تفاوت‌های حالت تفکری و غیرتفکری را خلاصه کن.",
        }
    ],
    extra_body={"thinking": {"type": "enabled"}},
)
نسخه معادل Responses API مدل این نسخه روی `gpt-5.5` تنظیم شده، چون `deepseek-v4-flash` ممکن است در داده‌های فعلی AvalAI برای `/v1/responses` فعال نباشد.

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. messages به input منتقل می‌شود و متن نهایی از response.output_text خوانده می‌شود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

response = client.responses.create(
    model="gpt-5.6-sol",
    instructions="You are a helpful assistant.",
    input="تفاوت‌های حالت تفکری و غیرتفکری را خلاصه کن.",
)

print(response.output_text)
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

⚠️ حیاتی: فراخوانی ابزار در حالت تفکری

هنگام استفاده از فراخوانی ابزار با مدل‌های DeepSeek V4 در حالت تفکری (شامل deepseek-v4-pro، deepseek-v4-flash با فعال‌سازی تفکری یا نام قدیمی deepseek-reasonerباید فیلد reasoning_content را در درخواست‌های بعدی در همان نوبت به API بازگردانید. در غیر این صورت خطا دریافت می‌کنید:

Missing reasoning_content field in the assistant message

پیاده‌سازی صحیح فراخوانی ابزار:

python
# هنگام دریافت tool_calls از مدل، reasoning_content را در پیام دستیار درج کنید
assistant_message = {
    "role": "assistant",
    "content": message.content or "",
    "tool_calls": [...],
    "reasoning_content": message.reasoning_content,  # حیاتی: درج این فیلد الزامی است
}
messages.append(assistant_message)

قوانین مکالمه چند نوبتی:

  1. در یک نوبت واحد (هنگام پردازش فراخوانی ابزار): همیشه reasoning_content را درج کنید
  2. بین نوبت‌ها (پیام جدید کاربر): فقط content را ارسال کنید، نه reasoning_content

برای مستندات کامل و مثال‌ها به زبان‌های مختلف، به مستندات مدل‌های DeepSeek مراجعه کنید.

مرجع رسمی: DeepSeek Thinking Mode - Tool Calls

درخواست‌های HTTP مستقیم

هنگام ارسال درخواست‌های HTTP مستقیم یا استفاده از curl، می‌توانید این پارامترها را مستقیما در بدنه درخواست قرار دهید:

bash
curl https://api.avalai.ir/v1/chat/completions \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
"model": "gemini-3.1-flash-lite-preview",
"messages": [{"role": "user", "content": "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ..."}],
"thinking": {"type": "enabled", "budget_tokens": 2000}
}'
نسخه معادل Responses API مدل این نسخه روی `gpt-5.5` تنظیم شده، چون `gemini-3.1-flash-lite-preview` ممکن است در داده‌های فعلی AvalAI برای `/v1/responses` فعال نباشد.

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. messages به input منتقل می‌شود و متن نهایی از response.output_text خوانده می‌شود.

bash
curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '
  {
    "model": "gpt-5.6-sol",
    "input": "این مسئله ریاضی پیچیده را حل کن. پاسخ نهایی، فرض‌های کلیدی و یک checklist کوتاه برای راستی‌آزمایی برگردان: ...",
    "instructions": "You are a helpful assistant."
  }'
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

با تنظیم این پارامترها، می‌توانید عمق استدلال را در برابر هزینه و سرعت برای مورد استفاده خاص خود در بین ارائه‌دهندگان مختلف مدل متعادل کنید.

مدیریت پنجره زمینه (Context Window)

اطمینان حاصل کنید که فضای کافی در پنجره زمینه برای هر دو خروجی مورد انتظار و توکن‌های استدلال داخلی باقی مانده است. مسائل پیچیده ممکن است به هزاران یا حتی ده‌ها هزار توکن استدلالی نیاز داشته باشند.

شما اغلب می‌توانید تفکیک میزان استفاده از توکن (شامل توکن‌های استدلالی، در صورت افشا شدن توسط API) را در شی usage پاسخ API پیدا کنید. در Responses شرکت OpenAI، مقدار output_tokens کل خروجی تولیدشده و شامل توکن‌های reasoning است؛ مقدار reasoning_tokens در فیلد تو‌در‌تو عدد اضافه‌ای برای جمع کردن نیست.

نمونه شی usage در OpenAI Responses:

json
{
  "usage": {
    "input_tokens": 75,
    "input_tokens_details": {
      "cached_tokens": 0
    },
    "output_tokens": 1186,
    "output_tokens_details": {
      "reasoning_tokens": 1024
    },
    "total_tokens": 1261
  }
}

برای طول پنجره زمینه مدل‌های خاص، مستندات مدل‌های AvalAI را بررسی کنید.

از telemetry شیء usage به‌عنوان چرخه تنظیم استفاده کنید:

  1. برای هر نمونه eval، model، مقدار reasoning.effort، مقدار max_output_tokens، تأخیر، وضعیت و مصرف توکن را log کنید.
  2. اگر reasoning_tokens زیاد است اما کیفیت پاسخ بهتر نمی‌شود، effort را پایین بیاورید یا پرامپت را ساده‌تر کنید.
  3. اگر status: "incomplete" یا خروجی قابل مشاهده ناقص دیدید، max_output_tokens را افزایش دهید، task را تقسیم کنید یا زمینه بازیابی‌شده را کمتر کنید.
  4. برای Chat Completions و Responses baseline جدا نگه دارید، چون Responses می‌تواند آیتم‌های reasoning را در tool callها حفظ کند اما Chat Completions stateless است.

کنترل هزینه‌ها

برای مدیریت هزینه‌ها:

  1. به پارامتر reasoning.effort (یا معادل آن) در صورت وجود توجه داشته باشید. تلاش بالاتر معمولا به معنای توکن‌های بیشتر است.
  2. از پارامتر max_tokens (یا پارامتر معادل مانند max_output_tokens) در درخواست API خود برای محدود کردن تعداد کل توکن‌های تولید شده (استدلال + خروجی) استفاده کنید.

تخصیص فضا برای استدلال

در مدل‌های دارای reasoning، پارامترهای max_output_tokens در Responses، max_completion_tokens در Chat Completions و پارامتر قدیمی max_tokens یک بودجه مشترک برای تولید هستند؛ هم توکن‌های reasoning پنهان و هم توکن‌های پاسخ قابل مشاهده می‌توانند این بودجه را مصرف کنند. این پارامترها سهم جداگانه‌ای برای پاسخ نهایی رزرو نمی‌کنند.

اگر reasoning تمام سقف را مصرف کند، ممکن است پاسخ فقط آیتم reasoning داشته باشد و هیچ متنی برنگرداند. این وضعیت معمولا ناشی از تمام شدن بودجه توکن است، نه لزوما content filter یا در دسترس نبودن مدل. نشانه‌های رایج عبارت‌اند از:

  • Responses: مقدار status: "incomplete" و incomplete_details.reason: "max_output_tokens".
  • Usage: مقدار output_tokens_details.reasoning_tokens به کل output_tokens نزدیک است، اما متن قابل مشاهده خالی یا وجود ندارد.
  • Chat Completions: مقدار finish_reason: "length"، گاهی پیش از تولید محتوای قابل استفاده.

برای رفع مشکل، سقف خروجی مربوط را تا حداکثر پشتیبانی‌شده مدل افزایش دهید، در صورت پشتیبانی reasoning.effort را روی low یا none بگذارید، task را ساده یا به چند درخواست تقسیم کنید و برای پاسخ نهایی حاشیه امن مبتنی بر اندازه‌گیری در نظر بگیرید. سقف را فقط بر اساس طول متن قابل مشاهده مورد انتظار تعیین نکنید. مصرف توکن را به تفکیک مدل و نوع پرامپت ثبت کنید، زیرا نیاز reasoning حتی برای یک مدل ثابت نیز بین درخواست‌ها تغییر می‌کند.

مدیریت پاسخ‌های ناقص (مثال)

کد شما باید نشانگرهایی را بررسی کند که تولید به دلیل محدودیت توکن متوقف شده است.

python
import json

# ... (راه‌اندازی کلاینت و درخواست اولیه مانند قبل) ...

try:
    response = client.chat.completions.create(
        model="gpt-5.6-sol",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=300,  # محدود کردن کل توکن‌های تولید شده (استدلال + خروجی)
        # در صورت لزوم، پارامترهای استدلال را اضافه کنید
    )

    finish_reason = response.choices[0].finish_reason
    output_text = response.choices[0].message.content

    if finish_reason == "length":  # دلیل پایان استاندارد برای max_tokens
        print("توکن‌ها تمام شد (به max_tokens رسید).")
        if output_text:
            print("خروجی جزئی:", output_text)
        else:
            # این بدان معنی است که محدودیت در طول استدلال داخلی زده شد
            print("توکن‌ها در مرحله استدلال تمام شد.")
    elif finish_reason == "stop":
        print("با موفقیت تکمیل شد:")
        print(output_text)
    else:
        print(f"با دلیل پایان یافت: {finish_reason}")
    if output_text:
        print("خروجی:", output_text)


except Exception as e:
    print(f"یک خطای API رخ داد: {e}")
javascript
// ... (راه‌اندازی کلاینت و درخواست اولیه مانند قبل) ...

async function runReasoningWithLimit() {
  try {
    const response = await client.chat.completions.create({
      model: "gpt-5.6-sol",
      messages: [{ role: "user", content: prompt }],
      max_tokens: 300, // محدود کردن کل توکن‌های تولید شده
      // در صورت لزوم، پارامترهای استدلال را اضافه کنید
    });

    const finish_reason = response.choices[0].finish_reason;
    const output_text = response.choices[0].message.content;

    if (finish_reason === "length") {
      // دلیل پایان استاندارد برای max_tokens
      console.log("توکن‌ها تمام شد (به max_tokens رسید).");
      if (output_text) {
        console.log("خروجی جزئی:", output_text);
      } else {
        console.log("توکن‌ها در مرحله استدلال تمام شد.");
      }
    } else if (finish_reason === "stop") {
      console.log("با موفقیت تکمیل شد:");
      console.log(output_text);
    } else {
      console.log(`با دلیل پایان یافت: ${finish_reason}`);
      if (output_text) {
        console.log("خروجی:", output_text);
      }
    }
  } catch (error) {
    console.error("یک خطای API رخ داد:", error);
  }
}

runReasoningWithLimit();
go
package main

import (
	"context"
	"fmt"
	"os"

	openai "github.com/openai/openai-go"
)

func main() {
	// ... (راه‌اندازی کلاینت مانند قبل) ...

	prompt := "..."  // پرامپت شما در اینجا
	maxTokens := 300 // تعریف max_tokens

	resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: "gpt-5.5",
			Messages: []openai.ChatCompletionMessage{
				{Role: openai.ChatMessageRoleUser, Content: prompt},
			},
			MaxTokens: maxTokens, // محدود کردن کل توکن‌های تولید شده
			// در صورت لزوم، پارامترهای استدلال را اضافه کنید
		},
	)

	if err != nil {
		fmt.Printf("خطای ChatCompletion: %v\n", err)
		return
	}

	finishReason := resp.Choices[0].FinishReason
	outputText := resp.Choices[0].Message.Content

	if finishReason == openai.FinishReasonLength { // بررسی دلیل پایان length
		fmt.Println("توکن‌ها تمام شد (به max_tokens رسید).")
		if outputText != "" {
			fmt.Println("خروجی جزئی:", outputText)
		} else {
			fmt.Println("توکن‌ها در مرحله استدلال تمام شد.")
		}
	} else if finishReason == openai.FinishReasonStop {
		fmt.Println("با موفقیت تکمیل شد:")
		fmt.Println(outputText)
	} else {
		fmt.Printf("با دلیل پایان یافت: %s\n", finishReason)
		if outputText != "" {
			fmt.Println("خروجی:", outputText)
		}
	}
}
php
<?php
require 'vendor/autoload.php';

// ... (راه‌اندازی کلاینت مانند قبل) ...

$prompt = "..."; // پرامپت شما در اینجا
$maxTokens = 300; // تعریف max_tokens

try {
 $response = $client->chat()->create([
 'model' => 'gpt-5.5',
 'messages' => [
 ['role' => 'user', 'content' => $prompt],
 ],
 'max_tokens' => $maxTokens, // محدود کردن کل توکن‌های تولید شده
 // در صورت لزوم، پارامترهای استدلال را اضافه کنید
 ]);

 $finishReason = $response->choices[0]->finishReason;
 // اطمینان حاصل کنید که محتوا قبل از دسترسی وجود دارد
 $outputText = $response->choices[0]->message->content ?? null;

 if ($finishReason === 'length') { // بررسی دلیل پایان length
 echo "توکن‌ها تمام شد (به max_tokens رسید).\n";
 if ($outputText) {
 echo "خروجی جزئی: " . $outputText . "\n";
 } else {
 echo "توکن‌ها در مرحله استدلال تمام شد.\n";
 }
 } elseif ($finishReason === 'stop') {
 echo "با موفقیت تکمیل شد:\n";
 echo $outputText . "\n";
 } else {
 echo "Finished with reason: " . $finishReason . "\n";
 if ($outputText) {
 echo "Output: " . $outputText . "\n";
 }
 }

} catch (Exception $e) {
 echo "یک خطای API رخ داد: " . $e->getMessage() . "\n";
}
?>
نسخه معادل Responses API

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. Chat Completions پایان به دلیل کمبود توکن را با finish_reason: "length" نشان می‌دهد؛ Responses آن را با status: "incomplete" و incomplete_details.reason: "max_output_tokens" گزارش می‌کند.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

prompt = """
Write a bash script that takes a matrix represented as a string with
format '[1,2],[3,4],[5,6]' and prints the transpose in the same format.
"""

response = client.responses.create(
    model="gpt-5.6-sol",
    reasoning={"effort": "medium"},
    input=[{"role": "user", "content": prompt}],
    max_output_tokens=300,
)

if (
    response.status == "incomplete"
    and response.incomplete_details.reason == "max_output_tokens"
):
    print("توکن‌ها تمام شد.")
    if response.output_text:
        print("خروجی جزئی:", response.output_text)
    else:
        print("توکن‌ها در مرحله reasoning تمام شد.")
else:
    print(response.output_text)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const prompt = `
Write a bash script that takes a matrix represented as a string with
format '[1,2],[3,4],[5,6]' and prints the transpose in the same format.
`;

const response = await client.responses.create({
  model: "gpt-5.6-sol",
  reasoning: { effort: "medium" },
  input: [{ role: "user", content: prompt }],
  max_output_tokens: 300,
});

if (
  response.status === "incomplete" &&
  response.incomplete_details?.reason === "max_output_tokens"
) {
  console.log("توکن‌ها تمام شد.");
  if (response.output_text) {
    console.log("خروجی جزئی:", response.output_text);
  } else {
    console.log("توکن‌ها در مرحله reasoning تمام شد.");
  }
} else {
  console.log(response.output_text);
}
bash
PROMPT='Write a bash script that takes a matrix represented as a string with format "[1,2],[3,4],[5,6]" and prints the transpose in the same format.'

jq -n --arg prompt "$PROMPT" '{
  model: "gpt-5.6-sol",
  reasoning: {effort: "medium"},
  input: [{role: "user", content: $prompt}],
  max_output_tokens: 300
}' | curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d @- | jq '{
    status,
    incomplete_reason: .incomplete_details.reason,
    output_text
  }'
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • max_tokensmax_output_tokens
  • choices[0].finish_reason == "length"status == "incomplete" با incomplete_details.reason
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

توصیه در مورد پرامپت‌نویسی

پرامپت‌نویسی برای مدل‌های استدلالی می‌تواند کمی با پرامپت‌نویسی برای مدل‌های استاندارد GPT متفاوت باشد.

  • مدل‌های استدلالی: اغلب با اهداف سطح بالا و مرحله‌های میانی کمتر تجویزی، عملکرد خوبی دارند. آنها را مانند همکاران ارشدی در نظر بگیرید که می‌توانید به آنها اعتماد کنید تا جزئیات را بفهمند.
  • مدل‌های GPT: اغلب از دستورالعمل‌های بسیار دقیق و تعاریف واضح فرمت خروجی مورد نظر بهره می‌برند. آنها را مانند همکاران تازه‌کاری در نظر بگیرید که به راهنمایی صریح نیاز دارند.

ارائه هدف کلی و اجازه دادن به مدل استدلالی برای تعیین بهترین مسیر را در مقابل ارائه مراحل دقیق، آزمایش کنید.

مثال‌های پرامپت

(توجه: مثال‌های زیر از مدل‌های استدلالی فعلی مانند gpt-5.5، deepseek-v4-pro، qwen3.7-max و glm-5.2 استفاده می‌کنند. پارامترها/نقاط پایانی را در صورت نیاز بر اساس پیاده‌سازی خاص AvalAI تنظیم کنید.)

۱. کدنویسی (بازسازی کد - Refactoring)

وظیفه: بازسازی یک کامپوننت React برای تغییر رنگ متن بر اساس داده‌ها.

javascript
// --- کد فراخوانی (Node.js) ---
import OpenAI from "openai";
import * as dotenv from "dotenv";
dotenv.config();

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

// توجه به تغییر: به جای بک‌تیک سه‌گانه در رشته پرامپت،
// از تورفتگی برای مثال کد داخلی استفاده کنید.
const prompt = `
دستورالعمل‌ها:
- با توجه به کامپوننت React زیر، آن را طوری تغییر دهید که کتاب‌های غیرداستانی متن قرمز داشته باشند.
- فقط کد بازسازی شده React را در پاسخ خود برگردانید.
- توضیحات یا بلوک‌های کد مارک‌داون را شامل نکنید.
- از چهار فاصله برای تورفتگی استفاده کنید.
- طول خطوط را زیر ۸۰ ستون نگه دارید.

کد اصلی:

 const books = [
 { title: 'تل‌ماسه', category: 'fiction', id: 1 }, // داستانی
 { title: 'فرانکنشتاین', category: 'fiction', id: 2 }, // داستانی
 { title: 'مانی‌بال', category: 'nonfiction', id: 3 }, // غیرداستانی
 ];

 export default function BookList() {
 const listItems = books.map(book =>
 <li>
 {book.title}
 </li>
 );

 return (
 <ul>{listItems}</ul>
 );
 }

`.trim();

async function refactorCode() {
  try {
    const response = await client.chat.completions.create({
      model: "gpt-5.6-sol", // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
      messages: [{ role: "user", content: prompt }],
      temperature: 0.1, // دمای پایین‌تر برای خروجی کد قابل پیش‌بینی‌تر
    });
    console.log(response.choices[0].message.content);
  } catch (error) {
    console.error("خطای API:", error);
  }
}

refactorCode();
python
# --- کد فراخوانی (Python) ---
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه
)

# توجه به تغییر: به جای بک‌تیک سه‌گانه در رشته پرامپت،
# از تورفتگی برای مثال کد داخلی استفاده کنید.
prompt = """
دستورالعمل‌ها:
- با توجه به کامپوننت React زیر، آن را طوری تغییر دهید که کتاب‌های غیرداستانی متن قرمز داشته باشند.
- فقط کد بازسازی شده React را در پاسخ خود برگردانید.
- توضیحات یا بلوک‌های کد مارک‌داون را شامل نکنید.
- از چهار فاصله برای تورفتگی استفاده کنید.
- طول خطوط را زیر ۸۰ ستون نگه دارید.

کد اصلی:

 const books = [
 { title: 'تل‌ماسه', category: 'fiction', id: 1 }, // داستانی
 { title: 'فرانکنشتاین', category: 'fiction', id: 2 }, // داستانی
 { title: 'مانی‌بال', category: 'nonfiction', id: 3 }, // غیرداستانی
 ];

 export default function BookList() {
 const listItems = books.map(book =>
 <li>
 {book.title}
 </li>
 );

 return (
 <ul>{listItems}</ul>
 );
 }

""".strip()

try:
    response = client.chat.completions.create(
        model="gpt-5.6-sol",  # از یک مدل استدلالی مناسب از AvalAI استفاده کنید
        messages=[{"role": "user", "content": prompt}],
        temperature=0.1,  # دمای پایین‌تر برای خروجی کد قابل پیش‌بینی‌تر
    )
    print(response.choices[0].message.content)
except Exception as e:
    print(f"خطای API: {e}")
bash
# --- کد فراخوانی (Bash/cURL) ---
# توجه به تغییر: به جای بک‌تیک سه‌گانه در رشته پرامپت،
# از تورفتگی برای مثال کد داخلی استفاده کنید.
PROMPT=$(
  cat <<'EOF'
دستورالعمل‌ها:
- با توجه به کامپوننت React زیر، آن را طوری تغییر دهید که کتاب‌های غیرداستانی متن قرمز داشته باشند.
- فقط کد بازسازی شده React را در پاسخ خود برگردانید.
- توضیحات یا بلوک‌های کد مارک‌داون را شامل نکنید.
- از چهار فاصله برای تورفتگی استفاده کنید.
- طول خطوط را زیر ۸۰ ستون نگه دارید.

کد اصلی:

 const books = [
 { title: 'تل‌ماسه', category: 'fiction', id: 1 }, // داستانی
 { title: 'فرانکنشتاین', category: 'fiction', id: 2 }, // داستانی
 { title: 'مانی‌بال', category: 'nonfiction', id: 3 }, // غیرداستانی
 ];

 export default function BookList() {
 const listItems = books.map(book =>
 <li>
 {book.title}
 </li>
 );

 return (
 <ul>{listItems}</ul>
 );
 }

EOF
)

# فرار از کاراکترهای خاص JSON در پرامپت
JSON_PROMPT=$(echo "$PROMPT" | jq -Rsa .)

curl https://api.avalai.ir/v1/chat/completions \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
 "model": "gpt-5.6-sol",
 "messages": [{"role": "user", "content": '"$JSON_PROMPT"'}],
 "temperature": 0.1
 }'
go
// --- کد فراخوانی (Go) ---
package main

import (
	"context"
	"fmt"
	"os"
	"strings"

	openai "github.com/openai/openai-go"
)

func main() {
	apiKey := os.Getenv("AVALAI_API_KEY")
	baseURL := "https://api.avalai.ir/v1"

	config := openai.DefaultConfig(apiKey)
	config.BaseURL = baseURL
	client := openai.NewClientWithConfig(config)

	// توجه به تغییر: به جای بک‌تیک سه‌گانه در رشته پرامپت،
	// از تورفتگی برای مثال کد داخلی استفاده کنید.
	prompt := strings.TrimSpace(`
دستورالعمل‌ها:
- با توجه به کامپوننت React زیر، آن را طوری تغییر دهید که کتاب‌های غیرداستانی متن قرمز داشته باشند.
- فقط کد بازسازی شده React را در پاسخ خود برگردانید.
- توضیحات یا بلوک‌های کد مارک‌داون را شامل نکنید.
- از چهار فاصله برای تورفتگی استفاده کنید.
- طول خطوط را زیر ۸۰ ستون نگه دارید.

کد اصلی:

 const books = [
 { title: "تل‌ماسه", category: "fiction", id: 1 }, // داستانی
 { title: "فرانکنشتاین", category: "fiction", id: 2 }, // داستانی
 { title: "مانی‌بال", category: "nonfiction", id: 3 }, // غیرداستانی
 ];

 export default function BookList() {
 const listItems = books.map(book =>
 <li>
 {book.title}
 </li>
 );

 return (
 <ul>{listItems}</ul>
 );
 }

`) // توجه: رشته‌های فارسی در کد Go باید به درستی مدیریت شوند

	temp := float32(0.1)
	resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: "gpt-5.5", // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
			Messages: []openai.ChatCompletionMessage{
				{Role: openai.ChatMessageRoleUser, Content: prompt},
			},
			Temperature: &temp,
		},
	)

	if err != nil {
		fmt.Printf("خطای API: %v\n", err)
		return
	}
	fmt.Println(resp.Choices[0].Message.Content)
}
php
// --- کد فراخوانی (PHP) ---
<?php
require 'vendor/autoload.php';

use OpenAI\Client;

$apiKey = getenv('AVALAI_API_KEY');
$baseURL = 'https://api.avalai.ir/v1';

// پیکربندی کلاینت (مثال)
$client = OpenAI::client($apiKey);
// تنظیم base URL در صورت نیاز از طریق factory/config

// توجه به تغییر: به جای بک‌تیک سه‌گانه در رشته پرامپت،
// از تورفتگی برای مثال کد داخلی استفاده کنید.
$prompt = trim(<<<PROMPT
دستورالعمل‌ها:
- با توجه به کامپوننت React زیر، آن را طوری تغییر دهید که کتاب‌های غیرداستانی متن قرمز داشته باشند.
- فقط کد بازسازی شده React را در پاسخ خود برگردانید.
- توضیحات یا بلوک‌های کد مارک‌داون را شامل نکنید.
- از چهار فاصله برای تورفتگی استفاده کنید.
- طول خطوط را زیر ۸۰ ستون نگه دارید.

کد اصلی:

 const books = [
 { title: 'تل‌ماسه', category: 'fiction', id: 1 }, // داستانی
 { title: 'فرانکنشتاین', category: 'fiction', id: 2 }, // داستانی
 { title: 'مانی‌بال', category: 'nonfiction', id: 3 }, // غیرداستانی
 ];

 export default function BookList() {
 const listItems = books.map(book =>
 <li>
 {book.title}
 </li>
 );

 return (
 <ul>{listItems}</ul>
 );
 }

PROMPT);


try {
 $response = $client->chat()->create([
 'model' => 'gpt-5.5', // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
 'messages' => [
 ['role' => 'user', 'content' => $prompt],
 ],
 'temperature' => 0.1,
 ]);

 echo $response->choices[0]->message->content;

} catch (Exception $e) {
 echo "خطای API: " . $e->getMessage() . "\n";
}
?>
نسخه معادل Responses API

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. همان task بازسازی کد را نگه می‌دارد، قوانین برنامه را به instructions منتقل می‌کند، و چون تغییر محدود و دقیق است از reasoning effort پایین استفاده می‌کند.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

prompt = """
با توجه به کامپوننت React زیر، آن را طوری تغییر دهید که کتاب‌های غیرداستانی متن قرمز داشته باشند.
فقط کد بازسازی شده React را در پاسخ خود برگردانید.
توضیحات یا بلوک‌های کد مارک‌داون را شامل نکنید.
از چهار فاصله برای تورفتگی استفاده کنید.
طول خطوط را زیر ۸۰ ستون نگه دارید.

کد اصلی:

    const books = [
     { title: 'تل‌ماسه', category: 'fiction', id: 1 },
     { title: 'فرانکنشتاین', category: 'fiction', id: 2 },
     { title: 'مانی‌بال', category: 'nonfiction', id: 3 },
    ];

    export default function BookList() {
     const listItems = books.map(book =>
     <li>
     {book.title}
     </li>
     );

     return (
     <ul>{listItems}</ul>
     );
    }
"""

response = client.responses.create(
    model="gpt-5.6-sol",
    reasoning={"effort": "low"},
    instructions=(
        "Formatting re-enabled\n"
        "You refactor code precisely. Return only the requested code."
    ),
    input=prompt,
)

print(response.output_text)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const prompt = `
با توجه به کامپوننت React زیر، آن را طوری تغییر دهید که کتاب‌های غیرداستانی متن قرمز داشته باشند.
فقط کد بازسازی شده React را در پاسخ خود برگردانید.
توضیحات یا بلوک‌های کد مارک‌داون را شامل نکنید.
از چهار فاصله برای تورفتگی استفاده کنید.
طول خطوط را زیر ۸۰ ستون نگه دارید.

کد اصلی:

    const books = [
     { title: 'تل‌ماسه', category: 'fiction', id: 1 },
     { title: 'فرانکنشتاین', category: 'fiction', id: 2 },
     { title: 'مانی‌بال', category: 'nonfiction', id: 3 },
    ];

    export default function BookList() {
     const listItems = books.map(book =>
     <li>
     {book.title}
     </li>
     );

     return (
     <ul>{listItems}</ul>
     );
    }
`;

const response = await client.responses.create({
  model: "gpt-5.6-sol",
  reasoning: { effort: "low" },
  instructions:
    "Formatting re-enabled\nYou refactor code precisely. Return only the requested code.",
  input: prompt,
});

console.log(response.output_text);
bash
PROMPT=$(
  cat <<'EOF'
با توجه به کامپوننت React زیر، آن را طوری تغییر دهید که کتاب‌های غیرداستانی متن قرمز داشته باشند.
فقط کد بازسازی شده React را در پاسخ خود برگردانید.
توضیحات یا بلوک‌های کد مارک‌داون را شامل نکنید.
از چهار فاصله برای تورفتگی استفاده کنید.
طول خطوط را زیر ۸۰ ستون نگه دارید.

کد اصلی:

    const books = [
     { title: 'تل‌ماسه', category: 'fiction', id: 1 },
     { title: 'فرانکنشتاین', category: 'fiction', id: 2 },
     { title: 'مانی‌بال', category: 'nonfiction', id: 3 },
    ];

    export default function BookList() {
     const listItems = books.map(book =>
     <li>
     {book.title}
     </li>
     );

     return (
     <ul>{listItems}</ul>
     );
    }
EOF
)

jq -n --arg prompt "$PROMPT" '{
  model: "gpt-5.6-sol",
  reasoning: {effort: "low"},
  instructions: "Formatting re-enabled\nYou refactor code precisely. Return only the requested code.",
  input: $prompt
}' | curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d @-
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

۲. کدنویسی (برنامه‌ریزی)

وظیفه: برنامه‌ریزی و تولید کد برای یک برنامه پرسش و پاسخ ساده پایتون.

javascript
// --- کد فراخوانی (Node.js) ---
import OpenAI from "openai";
import * as dotenv from "dotenv";
dotenv.config();

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const prompt = `
می‌خواهم یک برنامه پایتون بسازم که سوالات کاربر را دریافت کرده و آنها را
در یک ذخیره‌ساز ساده کلید-مقدار (مانند دیکشنری یا فایل JSON) که در آن
به پاسخ‌ها نگاشت شده‌اند، جستجو کند. اگر یک تطابق نزدیک (بررسی بدون حساسیت به حروف بزرگ و کوچک) وجود داشته باشد،
پاسخ مطابق را بازیابی می‌کند. اگر وجود نداشته باشد، از کاربر می‌خواهد
پاسخی ارائه دهد و جفت سوال/پاسخ جدید را ذخیره می‌کند.

1. طرحی برای ساختار دایرکتوری (مثلا اسکریپت اصلی، فایل داده) ارائه دهید.
2. کد کامل پایتون برای اسکریپت اصلی را برگردانید.
3. یک ساختار JSON نمونه برای فایل داده برگردانید.
4. متن توضیحی را فقط در ابتدا و انتهای خروجی ارائه دهید، نه به صورت ترکیبی در کد یا خروجی ساختار فایل.
`.trim();

async function planProject() {
  try {
    const response = await client.chat.completions.create({
      model: "deepseek-v4-pro", // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
      messages: [{ role: "user", content: prompt }],
    });
    console.log(response.choices[0].message.content);
  } catch (error) {
    console.error("خطای API:", error);
  }
}

planProject();
python
# --- کد فراخوانی (Python) ---
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه
)

prompt = """
می‌خواهم یک برنامه پایتون بسازم که سوالات کاربر را دریافت کرده و آنها را
در یک ذخیره‌ساز ساده کلید-مقدار (مانند دیکشنری یا فایل JSON) که در آن
به پاسخ‌ها نگاشت شده‌اند، جستجو کند. اگر یک تطابق نزدیک (بررسی بدون حساسیت به حروف بزرگ و کوچک) وجود داشته باشد،
پاسخ مطابق را بازیابی می‌کند. اگر وجود نداشته باشد، از کاربر می‌خواهد
پاسخی ارائه دهد و جفت سوال/پاسخ جدید را ذخیره می‌کند.

1. طرحی برای ساختار دایرکتوری (مثلا اسکریپت اصلی، فایل داده) ارائه دهید.
2. کد کامل پایتون برای اسکریپت اصلی را برگردانید.
3. یک ساختار JSON نمونه برای فایل داده برگردانید.
4. متن توضیحی را فقط در ابتدا و انتهای خروجی ارائه دهید، نه به صورت ترکیبی در کد یا خروجی ساختار فایل.
""".strip()

try:
    response = client.chat.completions.create(
        model="deepseek-v4-pro",  # از یک مدل استدلالی مناسب از AvalAI استفاده کنید
        messages=[{"role": "user", "content": prompt}],
    )
    print(response.choices[0].message.content)
except Exception as e:
    print(f"خطای API: {e}")
bash
# --- کد فراخوانی (Bash/cURL) ---
PROMPT=$(
  cat <<'EOF'
می‌خواهم یک برنامه پایتون بسازم که سوالات کاربر را دریافت کرده و آنها را
در یک ذخیره‌ساز ساده کلید-مقدار (مانند دیکشنری یا فایل JSON) که در آن
به پاسخ‌ها نگاشت شده‌اند، جستجو کند. اگر یک تطابق نزدیک (بررسی بدون حساسیت به حروف بزرگ و کوچک) وجود داشته باشد،
پاسخ مطابق را بازیابی می‌کند. اگر وجود نداشته باشد، از کاربر می‌خواهد
پاسخی ارائه دهد و جفت سوال/پاسخ جدید را ذخیره می‌کند.

1. طرحی برای ساختار دایرکتوری (مثلا اسکریپت اصلی، فایل داده) ارائه دهید.
2. کد کامل پایتون برای اسکریپت اصلی را برگردانید.
3. یک ساختار JSON نمونه برای فایل داده برگردانید.
4. متن توضیحی را فقط در ابتدا و انتهای خروجی ارائه دهید، نه به صورت ترکیبی در کد یا خروجی ساختار فایل.
EOF
)

# فرار از کاراکترهای خاص JSON
JSON_PROMPT=$(echo "$PROMPT" | jq -Rsa .)

curl https://api.avalai.ir/v1/chat/completions \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
 "model": "deepseek-v4-pro",
 "messages": [{"role": "user", "content": '"$JSON_PROMPT"'}]
 }'
go
// --- کد فراخوانی (Go) ---
package main

import (
	"context"
	"fmt"
	"os"
	"strings"

	openai "github.com/openai/openai-go"
)

func main() {
	apiKey := os.Getenv("AVALAI_API_KEY")
	baseURL := "https://api.avalai.ir/v1"

	config := openai.DefaultConfig(apiKey)
	config.BaseURL = baseURL
	client := openai.NewClientWithConfig(config)

	prompt := strings.TrimSpace(`
می‌خواهم یک برنامه پایتون بسازم که سوالات کاربر را دریافت کرده و آنها را
در یک ذخیره‌ساز ساده کلید-مقدار (مانند دیکشنری یا فایل JSON) که در آن
به پاسخ‌ها نگاشت شده‌اند، جستجو کند. اگر یک تطابق نزدیک (بررسی بدون حساسیت به حروف بزرگ و کوچک) وجود داشته باشد،
پاسخ مطابق را بازیابی می‌کند. اگر وجود نداشته باشد، از کاربر می‌خواهد
پاسخی ارائه دهد و جفت سوال/پاسخ جدید را ذخیره می‌کند.

1. طرحی برای ساختار دایرکتوری (مثلا اسکریپت اصلی، فایل داده) ارائه دهید.
2. کد کامل پایتون برای اسکریپت اصلی را برگردانید.
3. یک ساختار JSON نمونه برای فایل داده برگردانید.
4. متن توضیحی را فقط در ابتدا و انتهای خروجی ارائه دهید، نه به صورت ترکیبی در کد یا خروجی ساختار فایل.
`) // اطمینان از مدیریت صحیح UTF-8 در Go

	resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: "deepseek-v4-pro", // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
			Messages: []openai.ChatCompletionMessage{
				{Role: openai.ChatMessageRoleUser, Content: prompt},
			},
		},
	)

	if err != nil {
		fmt.Printf("خطای API: %v\n", err)
		return
	}
	fmt.Println(resp.Choices[0].Message.Content)
}
php
// --- کد فراخوانی (PHP) ---
<?php
require 'vendor/autoload.php';

use OpenAI\Client;

$apiKey = getenv('AVALAI_API_KEY');
$baseURL = 'https://api.avalai.ir/v1';

// پیکربندی کلاینت (مثال)
$client = OpenAI::client($apiKey);
// تنظیم base URL در صورت نیاز از طریق factory/config

$prompt = trim(<<<PROMPT
می‌خواهم یک برنامه پایتون بسازم که سوالات کاربر را دریافت کرده و آنها را
در یک ذخیره‌ساز ساده کلید-مقدار (مانند دیکشنری یا فایل JSON) که در آن
به پاسخ‌ها نگاشت شده‌اند، جستجو کند. اگر یک تطابق نزدیک (بررسی بدون حساسیت به حروف بزرگ و کوچک) وجود داشته باشد،
پاسخ مطابق را بازیابی می‌کند. اگر وجود نداشته باشد، از کاربر می‌خواهد
پاسخی ارائه دهد و جفت سوال/پاسخ جدید را ذخیره می‌کند.

1. طرحی برای ساختار دایرکتوری (مثلا اسکریپت اصلی، فایل داده) ارائه دهید.
2. کد کامل پایتون برای اسکریپت اصلی را برگردانید.
3. یک ساختار JSON نمونه برای فایل داده برگردانید.
4. متن توضیحی را فقط در ابتدا و انتهای خروجی ارائه دهید، نه به صورت ترکیبی در کد یا خروجی ساختار فایل.
PROMPT);

try {
 $response = $client->chat()->create([
 'model' => 'deepseek-v4-pro', // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
 'messages' => [
 ['role' => 'user', 'content' => $prompt],
 ],
 ]);

 echo $response->choices[0]->message->content;

} catch (Exception $e) {
 echo "خطای API: " . $e->getMessage() . "\n";
}
?>
نسخه معادل Responses API مدل این نسخه روی `gpt-5.5` تنظیم شده، چون `deepseek-v4-pro` ممکن است در داده‌های فعلی AvalAI برای `/v1/responses` فعال نباشد.

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. همان task برنامه‌ریزی را نگه می‌دارد و چون مدل باید ساختار کوچک، کد کامل و قرارداد خروجی مشخص تولید کند، از reasoning effort متوسط استفاده می‌کند.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

prompt = """
می‌خواهم یک برنامه پایتون بسازم که سوالات کاربر را دریافت کرده و آنها را
در یک ذخیره‌ساز ساده کلید-مقدار (مانند دیکشنری یا فایل JSON) که در آن
به پاسخ‌ها نگاشت شده‌اند، جستجو کند. اگر یک تطابق نزدیک (بررسی بدون حساسیت به حروف بزرگ و کوچک) وجود داشته باشد،
پاسخ مطابق را بازیابی می‌کند. اگر وجود نداشته باشد، از کاربر می‌خواهد
پاسخی ارائه دهد و جفت سوال/پاسخ جدید را ذخیره می‌کند.

1. طرحی برای ساختار دایرکتوری (مثلا اسکریپت اصلی، فایل داده) ارائه دهید.
2. کد کامل پایتون برای اسکریپت اصلی را برگردانید.
3. یک ساختار JSON نمونه برای فایل داده برگردانید.
4. متن توضیحی را فقط در ابتدا و انتهای خروجی ارائه دهید، نه به صورت ترکیبی در کد یا خروجی ساختار فایل.
"""

response = client.responses.create(
    model="gpt-5.6-sol",
    reasoning={"effort": "medium"},
    instructions=(
        "Formatting re-enabled\n"
        "You are a senior Python engineer. Follow the requested output contract exactly."
    ),
    input=prompt,
)

print(response.output_text)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const prompt = `
می‌خواهم یک برنامه پایتون بسازم که سوالات کاربر را دریافت کرده و آنها را
در یک ذخیره‌ساز ساده کلید-مقدار (مانند دیکشنری یا فایل JSON) که در آن
به پاسخ‌ها نگاشت شده‌اند، جستجو کند. اگر یک تطابق نزدیک (بررسی بدون حساسیت به حروف بزرگ و کوچک) وجود داشته باشد،
پاسخ مطابق را بازیابی می‌کند. اگر وجود نداشته باشد، از کاربر می‌خواهد
پاسخی ارائه دهد و جفت سوال/پاسخ جدید را ذخیره می‌کند.

1. طرحی برای ساختار دایرکتوری (مثلا اسکریپت اصلی، فایل داده) ارائه دهید.
2. کد کامل پایتون برای اسکریپت اصلی را برگردانید.
3. یک ساختار JSON نمونه برای فایل داده برگردانید.
4. متن توضیحی را فقط در ابتدا و انتهای خروجی ارائه دهید، نه به صورت ترکیبی در کد یا خروجی ساختار فایل.
`;

const response = await client.responses.create({
  model: "gpt-5.6-sol",
  reasoning: { effort: "medium" },
  instructions:
    "Formatting re-enabled\nYou are a senior Python engineer. Follow the requested output contract exactly.",
  input: prompt,
});

console.log(response.output_text);
bash
PROMPT=$(
  cat <<'EOF'
می‌خواهم یک برنامه پایتون بسازم که سوالات کاربر را دریافت کرده و آنها را
در یک ذخیره‌ساز ساده کلید-مقدار (مانند دیکشنری یا فایل JSON) که در آن
به پاسخ‌ها نگاشت شده‌اند، جستجو کند. اگر یک تطابق نزدیک (بررسی بدون حساسیت به حروف بزرگ و کوچک) وجود داشته باشد،
پاسخ مطابق را بازیابی می‌کند. اگر وجود نداشته باشد، از کاربر می‌خواهد
پاسخی ارائه دهد و جفت سوال/پاسخ جدید را ذخیره می‌کند.

1. طرحی برای ساختار دایرکتوری (مثلا اسکریپت اصلی، فایل داده) ارائه دهید.
2. کد کامل پایتون برای اسکریپت اصلی را برگردانید.
3. یک ساختار JSON نمونه برای فایل داده برگردانید.
4. متن توضیحی را فقط در ابتدا و انتهای خروجی ارائه دهید، نه به صورت ترکیبی در کد یا خروجی ساختار فایل.
EOF
)

jq -n --arg prompt "$PROMPT" '{
  model: "gpt-5.6-sol",
  reasoning: {effort: "medium"},
  instructions: "Formatting re-enabled\nYou are a senior Python engineer. Follow the requested output contract exactly.",
  input: $prompt
}' | curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d @-
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

۳. تحقیقات علوم پایه، فناوری، مهندسی و ریاضیات (STEM)

وظیفه: پرسیدن در مورد ترکیبات بالقوه برای تحقیقات آنتی‌بیوتیکی.

javascript
// --- کد فراخوانی (Node.js) ---
import OpenAI from "openai";
import * as dotenv from "dotenv";
dotenv.config();

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const prompt = `
سه ترکیب یا کلاس ترکیبی که باید برای پیشبرد تحقیقات در مورد
آنتی‌بیوتیک‌های جدید، به ویژه علیه باکتری‌های مقاوم، بیشتر بررسی کنیم، کدامند؟
به طور خلاصه توضیح دهید که چرا هر کدام امیدوارکننده است.
`.trim();

async function researchQuery() {
  try {
    const response = await client.chat.completions.create({
      model: "gemini-3.1-pro-preview", // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
      messages: [{ role: "user", content: prompt }],
    });
    console.log(response.choices[0].message.content);
  } catch (error) {
    console.error("خطای API:", error);
  }
}

researchQuery();
python
# --- کد فراخوانی (Python) ---
from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",  # آدرس پایه
)

prompt = """
سه ترکیب یا کلاس ترکیبی که باید برای پیشبرد تحقیقات در مورد
آنتی‌بیوتیک‌های جدید، به ویژه علیه باکتری‌های مقاوم، بیشتر بررسی کنیم، کدامند؟
به طور خلاصه توضیح دهید که چرا هر کدام امیدوارکننده است.
""".strip()

try:
    response = client.chat.completions.create(
        model="gemini-3.1-pro-preview",  # از یک مدل استدلالی مناسب از AvalAI استفاده کنید
        messages=[{"role": "user", "content": prompt}],
    )
    print(response.choices[0].message.content)
except Exception as e:
    print(f"خطای API: {e}")
bash
# --- کد فراخوانی (Bash/cURL) ---
PROMPT=$(
  cat <<'EOF'
سه ترکیب یا کلاس ترکیبی که باید برای پیشبرد تحقیقات در مورد
آنتی‌بیوتیک‌های جدید، به ویژه علیه باکتری‌های مقاوم، بیشتر بررسی کنیم، کدامند؟
به طور خلاصه توضیح دهید که چرا هر کدام امیدوارکننده است.
EOF
)

# فرار از کاراکترهای خاص JSON
JSON_PROMPT=$(echo "$PROMPT" | jq -Rsa .)

curl https://api.avalai.ir/v1/chat/completions \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
 "model": "gemini-3.1-pro-preview",
 "messages": [{"role": "user", "content": '"$JSON_PROMPT"'}]
 }'
go
// --- کد فراخوانی (Go) ---
package main

import (
	"context"
	"fmt"
	"os"
	"strings"

	openai "github.com/openai/openai-go"
)

func main() {
	apiKey := os.Getenv("AVALAI_API_KEY")
	baseURL := "https://api.avalai.ir/v1"

	config := openai.DefaultConfig(apiKey)
	config.BaseURL = baseURL
	client := openai.NewClientWithConfig(config)

	prompt := strings.TrimSpace(`
سه ترکیب یا کلاس ترکیبی که باید برای پیشبرد تحقیقات در مورد
آنتی‌بیوتیک‌های جدید، به ویژه علیه باکتری‌های مقاوم، بیشتر بررسی کنیم، کدامند؟
به طور خلاصه توضیح دهید که چرا هر کدام امیدوارکننده است.
`) // اطمینان از مدیریت صحیح UTF-8

	resp, err := client.CreateChatCompletion(
		context.Background(),
		openai.ChatCompletionRequest{
			Model: "gemini-3.1-pro-preview", // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
			Messages: []openai.ChatCompletionMessage{
				{Role: openai.ChatMessageRoleUser, Content: prompt},
			},
		},
	)

	if err != nil {
		fmt.Printf("خطای API: %v\n", err)
		return
	}
	fmt.Println(resp.Choices[0].Message.Content)
}
php
// --- کد فراخوانی (PHP) ---
<?php
require 'vendor/autoload.php';

use OpenAI\Client;

$apiKey = getenv('AVALAI_API_KEY');
$baseURL = 'https://api.avalai.ir/v1';

// پیکربندی کلاینت (مثال)
$client = OpenAI::client($apiKey);
// تنظیم base URL در صورت نیاز از طریق factory/config

$prompt = trim(<<<PROMPT
سه ترکیب یا کلاس ترکیبی که باید برای پیشبرد تحقیقات در مورد
آنتی‌بیوتیک‌های جدید، به ویژه علیه باکتری‌های مقاوم، بیشتر بررسی کنیم، کدامند؟
به طور خلاصه توضیح دهید که چرا هر کدام امیدوارکننده است.
PROMPT);

try {
 $response = $client->chat()->create([
 'model' => 'gemini-3.1-pro-preview', // از یک مدل استدلالی مناسب از AvalAI استفاده کنید
 'messages' => [
 ['role' => 'user', 'content' => $prompt],
 ],
 ]);

 echo $response->choices[0]->message->content;

} catch (Exception $e) {
 echo "خطای API: " . $e->getMessage() . "\n";
}
?>
نسخه معادل Responses API مدل این نسخه روی `gpt-5.5` تنظیم شده، چون `gemini-3.1-pro-preview` ممکن است در داده‌های فعلی AvalAI برای `/v1/responses` فعال نباشد.

وقتی مدل انتخابی از /v1/responses پشتیبانی می‌کند، این نسخه را کنار مثال Chat Completions استفاده کنید. همان prompt پژوهشی را نگه می‌دارد، اما یک مرز ایمنی صریح اضافه می‌کند تا پاسخ در سطح علمی کلی بماند و وارد دستورالعمل سنتز یا wet-lab نشود.

python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["AVALAI_API_KEY"],
    base_url="https://api.avalai.ir/v1",
)

prompt = """
سه ترکیب یا کلاس ترکیبی که باید برای پیشبرد تحقیقات در مورد
آنتی‌بیوتیک‌های جدید، به ویژه علیه باکتری‌های مقاوم، بیشتر بررسی کنیم، کدامند؟
به طور خلاصه توضیح دهید که چرا هر کدام امیدوارکننده است.
"""

response = client.responses.create(
    model="gpt-5.6-sol",
    reasoning={"effort": "high"},
    instructions=(
        "Formatting re-enabled\n"
        "Answer at a high scientific level. Do not include synthesis steps, "
        "dosages, protocols, or operational wet-lab instructions."
    ),
    input=prompt,
)

print(response.output_text)
javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

const prompt = `
سه ترکیب یا کلاس ترکیبی که باید برای پیشبرد تحقیقات در مورد
آنتی‌بیوتیک‌های جدید، به ویژه علیه باکتری‌های مقاوم، بیشتر بررسی کنیم، کدامند؟
به طور خلاصه توضیح دهید که چرا هر کدام امیدوارکننده است.
`;

const response = await client.responses.create({
  model: "gpt-5.6-sol",
  reasoning: { effort: "high" },
  instructions:
    "Formatting re-enabled\nAnswer at a high scientific level. Do not include synthesis steps, dosages, protocols, or operational wet-lab instructions.",
  input: prompt,
});

console.log(response.output_text);
bash
PROMPT=$(
  cat <<'EOF'
سه ترکیب یا کلاس ترکیبی که باید برای پیشبرد تحقیقات در مورد
آنتی‌بیوتیک‌های جدید، به ویژه علیه باکتری‌های مقاوم، بیشتر بررسی کنیم، کدامند؟
به طور خلاصه توضیح دهید که چرا هر کدام امیدوارکننده است.
EOF
)

jq -n --arg prompt "$PROMPT" '{
  model: "gpt-5.6-sol",
  reasoning: {effort: "high"},
  instructions: "Formatting re-enabled\nAnswer at a high scientific level. Do not include synthesis steps, dosages, protocols, or operational wet-lab instructions.",
  input: $prompt
}' | curl https://api.avalai.ir/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d @-
  • messagesinput
  • پیام سیستمی → instructions یا آیتم developer
  • choices[0].message.contentresponse.output_text
  • برای ابزارها و خروجی‌های چندوجهی، response.output را بر اساس type بررسی کنید.

مثال‌های موارد استفاده

برای مثال‌های بیشتر از کاربرد مدل‌های استدلالی در وظایفی مانند اعتبارسنجی داده‌ها، تولید روتین و تحلیل‌های پیچیده، کتاب آشپزی AvalAI (در صورت وجود) یا منابع جامعه را کاوش کنید.

(در صورت وجود، به کتاب آشپزی AvalAI یا بخش مثال‌های مرتبط پیوند دهید، در غیر این صورت این بخش را حذف کنید یا آن را کلی نگه دارید)

منابع مرتبط