Messages
رابط سازگار با Anthropic دانا برای ارسال پیام، tool calling و شمارش توکن
دانا رابط Anthropic را روی موتور OpenAI-compatible خودش سرو میکند. یعنی anthropic SDK و ابزارهایی مثل Claude Code بدون تغییر کد کار میکنند.
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:
curl https://api.dana.expert/v1/messages \
-H "Authorization: Bearer $DANA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "dana-1-fast",
"max_tokens": 256,
"system": "دستیار فارسیزبان هستید.",
"messages": [{"role": "user", "content": "سلام دانا!"}]
}'Python (anthropic SDK):
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="dana-1-fast",
max_tokens=256,
system="دستیار فارسیزبان هستید.",
messages=[{"role": "user", "content": "سلام دانا!"}],
)
print(message.content[0].text)Node.js (anthropic SDK):
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: "dana-1-fast",
max_tokens: 256,
system: "دستیار فارسیزبان هستید.",
messages: [{ role: "user", content: "سلام دانا!" }],
});
console.log(message.content[0].text);پارامترها
| پارامتر | نوع | اجباری | توضیح |
|---|---|---|---|
model | string | بله | شناسه مدل، مثل dana-1 یا dana-1-fast |
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 روی این مسیر است.
از میان پارامترهای نمونهبرداری، فقط temperature و top_p به موتور میرسند. مقدار top_k پذیرفته میشود ولی اثری ندارد، چون معادلی در سمت موتور برایش وجود ندارد.
ساختار پاسخ
{
"id": "msg_abc123",
"type": "message",
"role": "assistant",
"model": "dana-1-fast",
"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": "dana-1",
"system": "دستیار فارسیزبان هستید.",
"messages": [{"role": "user", "content": "سلام دانا!"}]
}'پاسخ:
{"input_tokens": 18}این عدد فقط ورودی را میشمارد و یک برآورد است. شرح کاملش در قیمت و توکن آمده است.
صفحههای مرتبط
- شروع سریع - نخستین درخواست موفق
- احراز هویت - هدر
x-api-keyهم پذیرفته میشود - خطاها - پاکت خطای Anthropic و همه کدها
- محدودیتها - سقف نرخ درخواست