Messages
رابط سازگار با Anthropic دانا برای ارسال پیام، tool calling و شمارش توکن
دانا رابط Anthropic را روی بکاند OpenAI-compatible خودش سرو میکند. یعنی کدی که با anthropic SDK نوشتهاید، فقط با عوض کردن base_url و کلید کار میکند.
مدل این رابط امروز homa است. کاربرد هما و محدودیتهایش در هما آمده است.
POST https://api.dana.expert/v1/messages
POST https://api.dana.expert/v1/messages/count_tokensمهمترین نکته تنظیمات: مقدار base_url را روی https://api.dana.expert بگذارید، بدون /v1. خود SDK مسیر /v1/messages را اضافه میکند. رابط Chat Completions برعکس است و /v1 میخواهد.
نمونه کامل
curl https://api.dana.expert/v1/messages \
-H "Authorization: Bearer $DANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "homa",
"max_tokens": 256,
"system": "دستیار فارسیزبان هستید.",
"messages": [{"role": "user", "content": "سلام دانا!"}]
}'import os
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["DANA_API_KEY"],
base_url="https://api.dana.expert",
)
message = client.messages.create(
model="homa",
max_tokens=256,
system="دستیار فارسیزبان هستید.",
messages=[{"role": "user", "content": "سلام دانا!"}],
)
print(message.content[0].text)import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.DANA_API_KEY,
baseURL: "https://api.dana.expert",
});
const message = await client.messages.create({
model: "homa",
max_tokens: 256,
system: "دستیار فارسیزبان هستید.",
messages: [{ role: "user", content: "سلام دانا!" }],
});
console.log(message.content[0].text);پارامترها
| پارامتر | نوع | اجباری | توضیح |
|---|---|---|---|
model | string | بله | شناسهٔ مدل: homa |
messages | array | بله | آرایه پیامهای مکالمه |
max_tokens | integer | بله | سقف توکن خروجی |
system | string یا array | خیر | پیام system |
stream | boolean | خیر | پاسخ به شکل SSE؛ پیشفرض false |
temperature | number | خیر | تنوع خروجی |
top_p | number | خیر | nucleus sampling |
stop_sequences | array | خیر | توالیهایی که تولید را متوقف میکنند |
tools | array | خیر | تعریف ابزارها با input_schema |
tool_choice | object | خیر | auto یا any یا یک ابزار مشخص |
برخلاف رابط OpenAI، اینجا max_tokens اجباری است. همین یک قلم، رایجترین علت 400 روی این مسیر است.
از میان پارامترهای sampling، فقط temperature و top_p به بکاند مدل میرسند. مقدار top_k پذیرفته میشود ولی اثری ندارد، چون بکاند مدل معادلی برایش ندارد.
ساختار پاسخ
{
"id": "msg_abc123",
"type": "message",
"role": "assistant",
"model": "homa",
"content": [{"type": "text", "text": "سلام! چطور میتوانم کمکتان کنم؟"}],
"stop_reason": "end_turn",
"usage": {"input_tokens": 18, "output_tokens": 14}
}فیلد content همیشه آرایه است، حتی برای یک پاسخ متنی ساده.
Streaming
با "stream": true استریم رویدادهای Anthropic را میگیرید، به همان ترتیب همیشگی:
| رویداد | چه وقت |
|---|---|
message_start | آغاز پاسخ، همراه با شناسه و توکن ورودی |
content_block_delta | هر چانک متن یا هر چانک از آرگومانهای ابزار |
message_delta | پایان تولید، همراه با stop_reason و توکن خروجی |
message_stop | پایان استریم |
روی tool calling، آرگومانهای ابزار به شکل input_json_delta تکهتکه میآیند و باید کنار هم چسبانده شوند. anthropic SDK این کار را خودش میکند.
شمارش توکن پیش از ارسال
curl https://api.dana.expert/v1/messages/count_tokens \
-H "Authorization: Bearer $DANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "homa",
"system": "دستیار فارسیزبان هستید.",
"messages": [{"role": "user", "content": "سلام دانا!"}]
}'پاسخ:
{"input_tokens": 18}این عدد فقط ورودی را میشمارد و یک برآورد است. شرح کاملش در قیمت و توکن آمده است.
صفحههای مرتبط
- شروع سریع - نخستین درخواست موفق
- حساب و کلید API - هدر
x-api-keyهم پذیرفته میشود - خطاها - فرمت خطای Anthropic و همه کدها
- محدودیتها - سقف نرخ درخواست