فراخوانی ابزار (Tool Calling یا Function Calling) قابلیتی است که به مدلهای هوش مصنوعی اجازه میدهد در حین گفتگو، توابع یا سرویسهای خارجی را فراخوانی کنند. این قابلیت امکان ساخت دستیارهای هوشمند متصل به دنیای واقعی (مانند دریافت آبوهوا، جستجو، محاسبات و...) را فراهم میکند.
در عمل این یک چرخه ساده و قابل تکرار است: مدل میگوید «این تابع را صدا بزن»، شما نتیجه واقعی را میفرستید، و مدل ادامه مکالمه را با اتکا به آن نتیجه میسازد.
/chat/completions
assistant
content
tool
tool_call_id
content
role: tool
tool_call_id
user | system | assistant | tool
assistant
tool_calls
content
tool
tool_call_id
content
tools
tool_choice
tool_calls
payload_validation_failed
{
"model": "your-model",
"tools": [{"type":"function","function":{"name":"get_weather","parameters":{"type":"object","properties":{"city":{"type":"string"}}}}}],
"messages": [
{"role":"user","content":"هوای تهران چطوره؟"},
{"role":"assistant","content":null,"tool_calls":[{"id":"call_1","type":"function","function":{"name":"get_weather","arguments":"{"city":"Tehran"}"}}]},
{"role":"tool","tool_call_id":"call_1","content":"{"city":"Tehran","temp":25}"}
]
}
اگر stream را فعال کنید، پاسخ بهصورت رویدادهای SSE برمیگردد. در این حالت، به جای یک پاسخ نهایی، تکههای کوچکی از داده دریافت میکنید. وقتی مدل تصمیم بگیرد ابزاری را فراخوانی کند، در دل رویدادها، فیلد
choices[0].delta.tool_calls
delta.tool_calls
finish_reason: "tool_calls"
role: "tool"
data: {
"id": "cmpl-...",
"object": "chat.completion.chunk",
"created": 1234567890,
"model": "your-model",
"choices": [
{
"index": 0,
"delta": {
"tool_calls": [
{
"index": 0,
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\":\"Tehran\"}"
}
}
]
}
}
]
}
توجه: در عمل ممکن است نام تابع و آرگومانها در چند رویداد جداگانه کامل شوند. باید این دلتاها را کنار هم تجمیع کنید.
برای اطلاعات بیشتر درباره استریم، به مستندات Streaming مراجعه کنید.
پارامتر | نوع | ضروری؟ | توضیحات |
---|---|---|---|
model | string | بله | شناسه مدل مورد استفاده (مثال: `openai/gpt-4o`). برای لیست کامل مدلها و شناسهها به صفحه مدلها مراجعه کنید. |
messages | array | بله | آرایهای از اشیاء پیام که تاریخچه گفتگو را تشکیل میدهند. هر پیام شامل `role` و `content` است. |
stream | boolean | خیر | اگر `true` باشد، پاسخ به صورت جریانی (Server-Sent Events) ارسال میشود. |
temperature | number | خیر | میزان خلاقیت پاسخ (معمولاً بین 0.0 تا 2.0). مقادیر بالاتر پاسخهای تصادفیتر و مقادیر پایینتر پاسخهای متمرکزتر تولید میکنند. |
max_tokens | integer | خیر | حداکثر تعداد توکنهایی که مدل میتواند در پاسخ تولید کند. |
top_p | number | خیر | روشی جایگزین برای کنترل خلاقیت با نمونهبرداری هستهای. |
tools | array | خیر | لیستی از ابزارهایی که مدل میتواند فراخوانی کند. |
tool_choice | string | object | خیر | نحوه انتخاب ابزار توسط مدل را کنترل میکند. |
پارامتر | نوع | ضروری؟ | توضیحات |
---|---|---|---|
role | string | بله | نقش پیام دهنده. میتواند `"system"`, `"user"`, `"assistant"`, یا `"tool"` باشد. |
content | string | array | بله | محتوای پیام. برای نقش `user` میتواند آرایهای از متن و اشیاء تصویر باشد. |
name | string | خیر | نام تابع (در صورتی که `role` برابر `tool` یا `assistant` با `tool_calls` باشد). |
tool_call_id | string | خیر | شناسه فراخوانی ابزار که این پیام پاسخی به آن است. |
پارامتر | نوع | ضروری؟ | توضیحات |
---|---|---|---|
type | string | بله | نوع ابزار. در حال حاضر فقط `function` پشتیبانی میشود. |
function | object | بله | جزئیات تابع. شامل `name` تابع برای فراخوانی است. |
پارامتر | نوع | ضروری؟ | توضیحات |
---|---|---|---|
name | string | بله | نام تابع خاص برای فراخوانی. |
curl -X POST https://rahyana.ir/api/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_API_KEY" -d '{ "model": "rahyana-chat-v1", "messages": [ {"role": "user", "content": "آب و هوای تهران چطور است؟"} ], "tools": [ { "type": "function", "function": { "name": "get_current_weather", "description": "Get the current weather in a given location", "parameters": { "type": "object", "properties": { "location": {"type": "string", "description": "The city and state, e.g. San Francisco, CA"}, "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]} }, "required": ["location"] } } } ] }'
curl -X POST https://api.rahyana.ir/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_API_KEY" -d '{ "model": "rahyana-chat-v1", "messages": [ {"role": "user", "content": "آب و هوای تهران چطور است؟"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_abc123", "type": "function", "function": {"name": "get_current_weather", "arguments": "{"location": "Tehran, Iran", "unit": "celsius"}"}}]}, {"role": "tool", "tool_call_id": "call_abc123", "content": "{"location": "Tehran", "temperature": "25", "unit": "celsius", "forecast": "sunny"}"} ] }'
tool_choice
tool
tool_call_id