استفاده از ابزار
فراخوانی تابع را به برنامهتان بیاورید: ابزار تعریف کنید، بلوکهای 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 میفرستد.
{
"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 است پس بفرستید. مدل آنگاه یا فراخوانی ابزار دیگری میفرستد یا پاسخ متنی نهایی را.
{
"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