OneProvider

استفاده از ابزار

فراخوانی تابع را به برنامه‌تان بیاورید: ابزار تعریف کنید، بلوک‌های tool_use را بخوانید، tool_choice را کنترل و موازی فراخوانی کنید. سبک Anthropic و OpenAI.

فراخوانی تابع (function calling) روی endpoint بومی Anthropic. API مقدار tool_choice را نرمال‌سازی می‌کند تا SDKهای قدیمی که {type:any} یا {type:tool} می‌فرستند همچنان کار کنند.

همهٔ مدل‌ها، قابلیت‌ها و قیمت‌ها فهرست مستندات برای عامل‌های هوش مصنوعی: https://oneprovider.dev/docs/llms.txt

شکل درخواست

ابزارها را به صورت آرایه تعریف کنید. هر ابزار یک name، یک description و یک input_schema به‌صورت JSON-Schema دارد. هر وقت مدل تصمیم بگیرد ابزاری را صدا بزند، یک بلوک محتوای tool_use می‌فرستد.

json
{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"tools": [
{
"name": "get_weather",
"description": "Return current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": { "type": "string" },
"units": { "type": "string", "enum": ["c", "f"] }
},
"required": ["city"]
}
}
],
"messages": [
{ "role": "user", "content": "What's the weather in Berlin in celsius?" }
]
}

پاسخ همراه با فراخوانی ابزار

json
{
"id": "msg_01...",
"stop_reason": "tool_use",
"content": [
{ "type": "text", "text": "Let me check that for you." },
{
"type": "tool_use",
"id": "toolu_bdrk_01...",
"name": "get_weather",
"input": { "city": "Berlin", "units": "c" }
}
]
}

ادامهٔ چرخه

بعد از اینکه کد شما ابزار را اجرا کرد، نتیجه را در یک پیام user که شامل بلوک tool_result است پس بفرستید. مدل آن‌گاه یا فراخوانی ابزار دیگری می‌فرستد یا پاسخ متنی نهایی را.

json
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_bdrk_01...",
"content": "{\"city\":\"Berlin\",\"temp_c\":18,\"sky\":\"clear\"}"
}
]
}

tool_choice — چگونه نرمال‌سازی می‌کنیم

Anthropic چهار شکل tool_choice را می‌پذیرد. API در OneProvider هر چهار را از کلاینت شما می‌پذیرد، اما دو تا از آن‌ها را به شکلی دیگر به مدل می‌دهد:

داده‌های مرجع
کلاینت می‌فرستدمدل دریافت می‌کندچرا
{"type":"auto"} (یا نبودن آن)بدون تغییرمدل تصمیم می‌گیرد — حالت معمول.
{"type":"none"}بدون تغییراجبار به پاسخ فقط متنی.
{"type":"any"}{"type":"auto"} + راهنمای systemهمهٔ مدل‌ها فراخوانی اجباری ابزار را پشتیبانی نمی‌کنند؛ راهنما به مدل می‌گوید «you MUST call a tool».
{"type":"tool","name":"X"}{"type":"auto"} + راهنمای systemهمان؛ راهنما نام ابزار را می‌آورد.
چرا این مهم است بدون این بازنویسی، tool_choice:any و tool_choice:tool روی بعضی مدل‌ها شکست می‌خورند. با auto و یک راهنمای system قوی، در آزمایش‌های ما حدود 95% این درخواست‌ها موفق می‌شوند. اگر دیدید فراخوانی ابزاری که انتظارش را داشتید با متن جایگزین شده، راهنما نتوانسته مدل را هدایت کند — پرامپت کاربر را دقیق‌تر کنید یا به مدل توانمندتری بروید.

فراخوانی موازی ابزارها

یک پاسخ می‌تواند چند بلوک tool_use داشته باشد — مدل تصمیم می‌گیرد که کار را پخش کند یا نه. همهٔ آن‌ها را اجرا کنید، سپس یک پیام user با چند بلوک tool_result (یکی برای هر tool_use_id) پس بفرستید. ترتیب اهمیتی ندارد.

نام‌گذاری ابزارها

  • نام‌ها به بزرگی و کوچکی حروف حساس‌اند و بدون تغییر عبور می‌کنند — مدل همان چیزی را بازتاب می‌دهد که ثبت کرده‌اید.
  • هر دوی snake_case و PascalCase کار می‌کنند. CLI در Claude Code از PascalCase استفاده می‌کند (Read، Bash، Edit)؛ SDKهای عمومی معمولاً snake_case به کار می‌برند.
  • نام‌ها را کمتر از 64 نویسه و به‌صورت ASCII با الگوی [a-zA-Z0-9_] نگه دارید.

فراخوانی ابزار به سبک OpenAI

در endpoint با مسیر /v1/chat/completions از شکل استاندارد OpenAI یعنی tools / tool_calls استفاده کنید — ما آن را در پشت صحنه به بلوک‌های tool_use در Anthropic ترجمه می‌کنیم.

پاسخ‌های سریع

از کدام base URL استفاده کنم؟

Claude Code و SDKهای Anthropic از https://api.oneprovider.dev استفاده می‌کنند. SDKهای OpenAI و کلاینت‌های سازگار با OpenAI از https://api.oneprovider.dev/v1 استفاده می‌کنند. یک کلید پشت هر دو آدرس کار می‌کند؛ فهرست مدل‌ها در صفحهٔ مدل‌ها و نرخ‌ها در صفحهٔ قیمت‌ها است.

چگونه احراز هویت کنم؟

کلید خام sk-… را در x-api-key یا Authorization: Bearer بفرستید: یکی از این دو، نه هر دو. کلید را در یک متغیر محیطی نگه دارید، نه در فایلی که commit می‌شود. اطلاعات بیشتر دربارهٔ احراز هویت .

کلید را از کجا بگیرم؟

حساب کاربری خود را در ربات Telegram به نام @oneprovider_robot یا در app.oneprovider.dev باز کنید، موجودی را شارژ کنید و «صدور کلید» را بزنید. هر کلید می‌تواند سقف مصرف مخصوص خودش را داشته باشد. حساب کاربری و کلیدهای API .

کدهای 401، 404 و 429 یعنی چه؟

401: کلید ارسال نشده، اشتباه تایپ شده یا در هدر نادرست فرستاده شده است؛ کلید را کامل و بدون گیومه و فاصله جای‌گذاری کنید. 404: معمولاً base URL نادرست است، مثلاً /v1 جا افتاده یا دوبار آمده است. 429 با پیام «Insufficient balance»: موجودی حساب کاربری یا سقف مصرف کلید تمام شده است؛ به‌جای تلاش دوباره، شارژ کنید. هر 429 دیگری محدودیت نرخ است؛ تا پایان زمان Retry-After صبر کنید. جزئیات: کدهای خطا و رفع اشکال .

چرا استریم‌ها قطع یا ریست می‌شوند؟

VPN و پروکسی‌های VLESS اغلب SSE را بافر می‌کنند یا مذاکرهٔ HTTP/2 را مختل می‌کنند. OneProvider هیچ محدودیت منطقه‌ای ندارد و استریم‌ها را بافر نمی‌کند؛ پروکسی را خاموش کنید و دوباره امتحان کنید.

اگر این‌ها کافی نبود از کجا بپرسم؟

در Telegram به @Oneproviderhelpbot پیام بدهید یا در حساب کاربری وب «پشتیبانی» را باز کنید و کد وضعیت HTTP و متن دقیق خطا را بفرستید. پشتیبانی چگونه کار می‌کند .

آخرین به‌روزرسانی: 2026-11-08 باگی پیدا کردید؟ @Oneproviderhelpbot