نسخه بتا · دانا به‌زودی عرضه می‌شود
مستندات

Chat Completions

رابط سازگار با OpenAI دانا: پارامترها، streaming، هدرها و ساختار پاسخ

POST /v1/chat/completions رابط اصلی سازگار با OpenAI است. اگر کدی دارید که با openai SDK کار می‌کند، فقط base_url و کلید را عوض کنید.

POST https://api.dana.expert/v1/chat/completions

نمونه کامل

curl:

curl https://api.dana.expert/v1/chat/completions \
  -H "Authorization: Bearer $DANA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dana-1",
    "messages": [
      {"role": "system", "content": "دستیار فارسی‌زبان هستید."},
      {"role": "user", "content": "پایتخت ایران کجاست؟"}
    ]
  }'

Python (openai SDK):

import os

from openai import OpenAI

client = OpenAI(
    api_key=os.environ["DANA_API_KEY"],
    base_url="https://api.dana.expert/v1",
)

response = client.chat.completions.create(
    model="dana-1",
    messages=[
        {"role": "system", "content": "دستیار فارسی‌زبان هستید."},
        {"role": "user", "content": "پایتخت ایران کجاست؟"},
    ],
)
print(response.choices[0].message.content)

Node.js (openai SDK):

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.DANA_API_KEY,
  baseURL: "https://api.dana.expert/v1",
});

const response = await client.chat.completions.create({
  model: "dana-1",
  messages: [
    { role: "system", content: "دستیار فارسی‌زبان هستید." },
    { role: "user", content: "پایتخت ایران کجاست؟" },
  ],
});
console.log(response.choices[0].message.content);

پارامترها

فقط دو پارامتر اجباری است:

پارامترنوعتوضیح
modelstringشناسه مدل، مثل dana-1 یا dana-1-fast
messagesarrayآرایه پیام‌های مکالمه

بقیه اختیاری‌اند:

پارامترنوعتوضیح
streambooleanپاسخ به شکل SSE؛ پیش‌فرض false
max_tokensintegerسقف توکن خروجی
max_completion_tokensintegerنام تازه‌تر همان max_tokens
temperaturenumberتنوع خروجی، از ۰ تا ۲
top_pnumbernucleus sampling
nintegerتعداد پاسخ‌های موازی
stopstring یا arrayتوالی‌های توقف
seedintegerبرای خروجی تکرارپذیرتر
response_formatobjectمثلا حالت JSON
toolsarrayتعریف ابزارها برای tool calling
tool_choicestring یا objectانتخاب اجباری یا خودکار ابزار
parallel_tool_callsbooleanاجازه فراخوانی هم‌زمان چند ابزار
frequency_penaltynumberکم کردن تکرار واژه
presence_penaltynumberتشویق به موضوع تازه
logprobsbooleanبرگرداندن احتمال توکن‌ها
top_logprobsintegerچند گزینه برتر در logprobs
logit_biasobjectدست بردن در شانس توکن‌های مشخص
userstringشناسه کاربر نهایی برای پیگیری

پارامتری که در این فهرست نیست هم دور ریخته نمی‌شود؛ دانا آن را دست‌نخورده به موتور مدل می‌فرستد. سقف max_tokens هم یک حد بالای سمت سرور دارد و مقدار بزرگ‌تر تا همان حد کوتاه می‌شود.

ساختار پیام

{"role": "system", "content": "متن پیام"}

مقدار role یکی از system و user و assistant است.

هدرهای اختصاصی دانا

هدرمقدارکار
X-Dana-Harnessnone یا base یا agentپروفایل بهبود فارسی؛ پیش‌فرض base
X-Dana-Effortlow تا maxمیزان تلاش مدل و سقف پیش‌فرض خروجی

مقدار نامعتبر روی هرکدام، 400 می‌گیرد.

Streaming

با "stream": true پاسخ به شکل رویدادهای SSE می‌آید:

curl https://api.dana.expert/v1/chat/completions \
  -H "Authorization: Bearer $DANA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"dana-1","stream":true,"messages":[{"role":"user","content":"یک داستان کوتاه بگو"}]}'

هر رویداد یک خط data: است و جریان با [DONE] تمام می‌شود:

data: {"id":"chatcmpl-xyz","object":"chat.completion.chunk","choices":[{"delta":{"content":"یک"},"index":0}]}

data: [DONE]

آمار مصرف در رویداد پایانی جریان می‌آید، نه در تک‌تک تکه‌ها.

ساختار پاسخ

{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1700000000,
  "model": "dana-1",
  "choices": [
    {
      "index": 0,
      "message": {"role": "assistant", "content": "تهران پایتخت ایران است."},
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 22,
    "completion_tokens": 10,
    "total_tokens": 32
  }
}

مقدار finish_reason می‌گوید چرا تولید ایستاد. stop یعنی پاسخ کامل شد و length یعنی به سقف max_tokens خورده است. اگر پاسخ‌ها نصفه می‌مانند، سراغ همین فیلد بروید.

صفحه‌های مرتبط