Create a chat completion
درخواستی برای دریافت پاسخ مدل به گفتگوی دادهشده میفرستد؛ هم حالت استریم و هم غیراستریم پشتیبانی میشود.
این نقطهٔ پایانی منتظر یک پاسخ مدل برای گفتگوی مشخصی است که در messages
داده میشود و از هر دو حالت استریم و غیراستریم پشتیبانی میکند. پاسخ طبق فرمت
chat.completion OpenAI برمیگردد تا SDKها و کدهای موجود بدون
تغییر کار کنند — فقط کافیست Base URL و کلید API آشا را تنظیم کنید.
Endpoint
https://app.asha-ai.ir/v1/chat/completions
احراز هویت
همهٔ درخواستها به کلید API آشا نیاز دارند که از طریق هدر
Authorization: Bearer <ASHA_API_KEY>
ارسال میشود. کلید را از داشبورد آشا دریافت کنید.
مثال درخواست
پاسخی سادهٔ غیراستریم برای یک گفتگوی کوتاه:
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://app.asha-ai.ir/v1',
apiKey: '<ASHA_API_KEY>',
});
const result = await client.chat.completions.create({
model: 'openai/gpt-4',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'What is the capital of France?' },
],
temperature: 0.7,
max_tokens: 150,
});
console.log(result.choices[0].message.content);
import requests
response = requests.post(
'https://app.asha-ai.ir/v1/chat/completions',
headers={
'Authorization': 'Bearer <ASHA_API_KEY>',
'Content-Type': 'application/json',
},
json={
'model': 'openai/gpt-4',
'messages': [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': 'What is the capital of France?'},
],
'temperature': 0.7,
'max_tokens': 150,
}
)
result = response.json()
print(result['choices'][0]['message']['content'])
curl -X POST https://app.asha-ai.ir/v1/chat/completions
-H "Authorization: Bearer $ASHA_API_KEY"
-H "Content-Type: application/json"
-d '{
"model": "openai/gpt-4",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the capital of France?"}
],
"temperature": 0.7,
"max_tokens": 150
}'
پارامترهای بدنهٔ درخواست
پارامترهای کلیدی بدنهٔ JSON درخواست:
| پارامتر | نوع | توضیح |
|---|---|---|
model | string | الزامی. مدل مورد استفاده برای تکمیل گفتگو. |
messages | array | الزامی. فهرست پیامهای گفتگو؛ دستکم یک پیام باید داشته باشد. |
temperature | number | دمای نمونهگیری (۰ تا ۲). مقدار پیشفرض معمول ۱ است. |
top_p | number | نمونهگیری هستهای (۰ تا ۱). |
max_tokens | integer | حداکثر توکنهای تکمیل. برخی از ارائهدهندگان حداقل ۱۶ را اعمال میکنند. |
max_completion_tokens | integer | جایگزین مدرنتر max_tokens برای مدلهای جدید. |
stream | boolean | در صورت true پاسخ بهصورت رویدادهای SSE برگردانده میشود. پیشفرض false. |
stop | string | array | توالیهای توقف (تا ۴ مورد). |
presence_penalty | number | جریمهٔ حضور (−۲ تا ۲). |
frequency_penalty | number | جریمهٔ تکرار (−۲ تا ۲). |
seed | integer | دانهٔ تصادفی برای خروجی قطعیتر. |
response_format | object | قالب خروجی؛ مثلاً json_object یا json_schema. |
tools | array | ابزارهای تعریفشده برای فراخوانی تابع. |
tool_choice | string | object | کنترل انتخاب ابزار؛ auto، none، required یا ابزار نامدار. |
user | string | شناسهٔ پایدار کاربر نهایی برای ایزولهسازی سوءاستفاده. |
پیامهای گفتگو
نقشهای پشتیبانیشده در آرایهٔ messages:
| نقش | توضیح |
|---|---|
system | رفتار کلی دستیار را تعیین میکند. |
user | پیام کاربر نهایی. |
assistant | پاسخ قبلی مدل؛ برای گفتگوهای چندمرحلهای. |
tool | نتیجهٔ اجرای یک فراخوانی ابزار. |
developer | معادل system برای مدلهای جدیدتر. |
پاسخ
در صورت موفقیت، پاسخ با کد 200 و ساختار زیر برمیگردد
(نمونه با مدل openai/gpt-4):
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "openai/gpt-4",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "The capital of France is Paris."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 10,
"total_tokens": 35
}
}
مفهوم فیلدها
| فیلد | توضیح |
|---|---|
id | شناسهٔ یکتای تکمیل. |
choices | فهرست انتخابهای خروجی؛ معمولاً یک انتخاب. |
choices[].message | پیام تولیدشده توسط مدل. |
choices[].finish_reason | دلیل پایان؛ stop، length، tool_calls و… |
usage | آمار مصرف توکن برای صورتحساب. |
استریم
با تنظیم stream: true، پاسخ بهصورت رویدادهای
text/event-stream (SSE) ارسال میشود؛ هر رویداد یک قطعهٔ
chat.completion.chunk است:
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-4","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-4","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"openai/gpt-4","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
خطاها
خطاها با ساختار زیر برمیگردند:
{
"error": {
"code": 400,
"message": "Invalid request parameters"
}
}
| کد | توضیح |
|---|---|
400 | پارامترهای درخواست نامعتبر یا ورودی ناقص. |
401 | هدر احراز هویت وجود ندارد یا کلید نامعتبر است. |
402 | اعتبار کافی نیست. |
429 | محدودیت نرخ رد شده است. |
500 | خطای داخلی سرور. |
502 | ارائهدهنده خطای بالادستی برگرداند. |