تفکر عمیقتر
Extended Thinking برای مدلهایی مطرح میشود که هنگام حل مسئله، دادههای ساختاریافتهای برای ادامه زمینه استدلالی بین نوبتها برمیگردانند. تنظیم درست آن به نسل مدل Claude بستگی دارد.
این صفحه برای سناریوهای پیشرفته است؛ اگر فقط میخواهید یک پاسخ نهایی بگیرید، معمولاً حافظه نهان و استدلال کافی است.
وضعیت پشتیبانی در گدارAI
گدارAI در نقطه پایانی POST /v1/chat/completions این فیلدها را حفظ و مسیریابی میکند:
reasoning_effortبا مقدارهایnone،minimal،low،medium،high،xhighوmax.thinkingبرای مسیرهای Anthropic-native، با فیلدهایtype،budget_tokensوdisplay.reasoning_contentوthinking_blocksدر پیام assistant.signatureو بلوکهایredacted_thinkingبدون نرمالسازی محتوایی.
در مسیرهای OpenAI-compatible، این فیلدها به ارائهدهنده ارسال و از پاسخ هم حفظ میشوند. در مسیر Anthropic-native، گدارAI reasoning_effort یا thinking را به تنظیم thinking در Anthropic Messages API تبدیل میکند و بلوکهای thinking و redacted_thinking پاسخ را در thinking_blocks برمیگرداند.
درخواستهایی که تفکر عمیقتر دارند در حافظه نهان پاسخ ذخیره نمیشوند. تفکر تطبیقی را با temperature، top_p یا top_k ترکیب نکنید؛ گدارAI این تعارض را پیش از ارسال درخواست رد میکند.
تنظیم بر اساس نسل مدل
| مدل | حالت پشتیبانیشده | روش کنترل |
|---|---|---|
| Claude Opus 4.7 | فقط تفکر تطبیقی | reasoning_effort یا output_config.effort؛ تفکر دستی رد میشود. |
| Claude Opus 4.6 و Sonnet 4.6 | تفکر تطبیقی بهصورت پیشفرض | reasoning_effort؛ تفکر دستی فقط برای سازگاری قدیمی پذیرفته میشود و منسوخ است. |
| Claude 4.5 و قدیمیتر | تفکر عمیق دستی | thinking.type: "enabled" و thinking.budget_tokens |
مقدار max فقط برای مدلهای Opus مجاز است. گدارAI ترکیب حالت تفکر، تلاش استدلالی و پارامترهای نمونهگیری را با نمایه زمان اجرای همان مدل اعتبارسنجی میکند.
چه زمانی لازم میشود؟
تفکر عمیقتر زمانی ارزش دارد که:
- گفتوگوی چندنوبتی و مسئله پیچیده دارید.
- ابزارها و استدلال همزمان استفاده میشوند.
- مدل باید زمینه استدلالی خود را در نوبت بعدی حفظ کند.
- ارائهدهنده برای ادامه صحیح گفتوگو به بلوکهای امضاشده نیاز دارد.
اگر گفتوگو کوتاه و ساده است، درگیر این لایه نشوید.
thinking_blocks چیست؟
برخی مدلها در کنار پاسخ نهایی، دادههایی مثل thinking_blocks برمیگردانند. این دادهها ممکن است شامل signature باشند:
{
"message": {
"role": "assistant",
"content": "پاسخ نهایی",
"thinking_blocks": [
{
"type": "thinking",
"thinking": "...",
"signature": "ErUBCkQIARgCIkC..."
}
]
}
}
این بلوکها را متن نمایشی برای کاربر در نظر نگیرید. آنها بیشتر نقش داده لازم برای ادامه درست گفتوگو با همان مدل و ارائهدهنده را دارند.
چرا امضا مهم است؟
signature نشان میدهد بلوک استدلالی همان چیزی است که ارائهدهنده تولید کرده است. اگر آن را حذف، بازنویسی، کوتاه یا نرمالسازی کنید، نوبت بعدی ممکن است رد شود یا کیفیت ادامه گفتوگو افت کند.
قاعده ساده:
thinking_blocksرا بدون دستکاری ذخیره کنید.- آن را برای کاربر نمایش ندهید، مگر سیاست محصول شما صراحتاً اجازه دهد.
- در نوبت بعدی، پیام assistant را کامل به تاریخچه برگردانید.
نمونه پایه
- Python
- NodeJS
- REST API
- OpenAI Python SDK
- OpenAI NodeJS SDK
import requests
response = requests.post(
"https://YOUR_WORKSPACE.godarai.ir/v1/chat/completions",
headers={
"Authorization": "Bearer YOUR_GODARAI_TOKEN",
"Content-Type": "application/json",
},
json={
"model": "anthropic:default:claude-sonnet-4-6",
"messages": [
{
"role": "user",
"content": "برای طراحی یک agent پشتیبانی، مراحل تصمیمگیری را پیشنهاد بده."
}
],
"reasoning_effort": "high",
"max_tokens": 4000
},
timeout=60,
)
response.raise_for_status()
print(response.json())
const response = await fetch("https://YOUR_WORKSPACE.godarai.ir/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_GODARAI_TOKEN",
"Content-Type": "application/json",
},
body: JSON.stringify({
"model": "anthropic:default:claude-sonnet-4-6",
"messages": [
{
"role": "user",
"content": "برای طراحی یک agent پشتیبانی، مراحل تصمیمگیری را پیشنهاد بده."
}
],
"reasoning_effort": "high",
"max_tokens": 4000
}),
});
if (!response.ok) {
throw new Error(`Request failed with status ${response.status}`);
}
const data = await response.json();
console.log(data);
curl --request POST "https://YOUR_WORKSPACE.godarai.ir/v1/chat/completions" \
--header "Authorization: Bearer YOUR_GODARAI_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"model": "anthropic:default:claude-sonnet-4-6",
"messages": [
{
"role": "user",
"content": "برای طراحی یک agent پشتیبانی، مراحل تصمیمگیری را پیشنهاد بده."
}
],
"reasoning_effort": "high",
"max_tokens": 4000
}'
from openai import OpenAI
client = OpenAI(
api_key="YOUR_GODARAI_TOKEN",
base_url="https://YOUR_WORKSPACE.godarai.ir/v1",
)
response = client.chat.completions.create(
"model": "anthropic:default:claude-sonnet-4-6",
messages=[
{
"role": "user",
"content": "برای طراحی یک agent پشتیبانی، مراحل تصمیمگیری را پیشنهاد بده."
}
],
reasoning_effort="high",
max_tokens=4000
)
print(response)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "YOUR_GODARAI_TOKEN",
baseURL: "https://YOUR_WORKSPACE.godarai.ir/v1",
});
const response = await client.chat.completions.create({
"model": "anthropic:default:claude-sonnet-4-6",
"messages": [
{
"role": "user",
"content": "برای طراحی یک agent پشتیبانی، مراحل تصمیمگیری را پیشنهاد بده."
}
],
"reasoning_effort": "high",
"max_tokens": 4000
});
console.log(response);
در این نمونه، هدف اصلی ذخیره کامل assistant_message است. همین پیام ممکن است شامل content، tool_calls، reasoning_content یا thinking_blocks باشد.
برای مدلهای 4.5 و قدیمیتر، بودجه تفکر Anthropic را با فیلد thinking کنترل کنید:
response = client.chat.completions.create(
model="anthropic:default:claude-sonnet-4-5",
messages=[{"role": "user", "content": "این مسئله را تحلیل کن."}],
max_tokens=4000,
extra_body={"thinking": {"type": "enabled", "budget_tokens": 3200}},
)
گفتوگوی چندنوبتی
برای ادامه گفتوگو، پیام assistant را همانطور که برگشته در تاریخچه نگه دارید:
messages = [
{
"role": "user",
"content": "برای طراحی یک agent پشتیبانی، مراحل تصمیمگیری را پیشنهاد بده."
},
assistant_message,
{
"role": "user",
"content": "حالا همین طرح را برای تیم مالی سادهتر کن."
},
]
response2 = client.chat.completions.create(
model="anthropic:default:claude-sonnet-4-6",
messages=messages,
reasoning_effort="high",
max_tokens=4000,
)
اگر فقط content را نگه دارید و بقیه فیلدها را حذف کنید، ممکن است زمینه لازم برای ادامه درست از بین برود.
ترکیب با ابزارها
وقتی ابزارها و تفکر عمیقتر همزمان فعالاند، پیام assistant دو نقش دارد:
- ممکن است
tool_callsداشته باشد. - ممکن است دادههای استدلالی لازم برای نوبت بعدی داشته باشد.
پس بعد از پاسخ اول:
- پیام assistant را کامل در تاریخچه ذخیره کنید.
- ابزارهای مجاز را در سرویس خود اجرا کنید.
- نتیجه هر ابزار را با
role: "tool"برگردانید. - درخواست دوم را با همان تاریخچه کامل بفرستید.
این الگو از خطاهای ظریف در عاملهای چندمرحلهای جلوگیری میکند.
گدارAI ترکیب tools و تفکر عمیقتر را در هر دو مسیر بومی Anthropic و سازگار با OpenAI پشتیبانی میکند. فراخوانی ابزار به tool_use و نتیجه پیام با نقش tool به tool_result نگاشت میشود. اگر parallel_tool_calls را غیرفعال کنید، گدارAI disable_parallel_tool_use را برای Anthropic تنظیم میکند.
پاسخ جریانی
در حالت جریانی، بخشهای مربوط به استدلال ممکن است تکهتکه برسند. برای استفاده قابل اتکا:
- ابتدا نسخه غیرجریانی را پایدار کنید.
- سپس قطعههای
reasoning_content،thinking_blocksوcontentرا از stream جمعآوری کنید. - در پایان، یک پیام assistant کامل بسازید.
- همان پیام کامل را در تاریخچه نگه دارید.
اگر از stream شروع کنید، عیبیابی خطاهای مربوط به thinking_blocks و ابزارها سختتر میشود.
اشتباههای رایج
- حذف
thinking_blocksاز پیام assistant. - تغییر یا کوتاهکردن
signature. - ساختن دستی پیام assistant فقط با
content. - ترکیب همزمان stream، ابزار و تفکر عمیقتر بدون تست جداگانه.
- نمایش دادههای استدلالی داخلی به کاربر نهایی بدون سیاست روشن.
توصیه عملی
برای شروع، این ترتیب را رعایت کنید:
- درخواست غیرجریانی بدون ابزار را با مدل هدف آزمایش کنید.
- ذخیره و بازپخش کامل پیام assistant را پیاده کنید.
- سپس ابزارها را اضافه کنید.
- در پایان، اگر تجربه کاربری لازم داشت، پاسخ جریانی را فعال کنید.
این ترتیب باعث میشود هر لایه را جداگانه بسنجید و خطاها را بههم گره نزنید.
جمعبندی
تفکر عمیقتر برای جریانهای پیشرفته و چندنوبتی است. مهمترین اصل آن ساده است: پیام assistant را کامل، بدون دستکاری و قابل بازپخش نگه دارید. این کار به گدارAI و مدل پشت آن کمک میکند زمینه استدلالی را در مسیرهای پیچیدهتر حفظ کنند.