اتصال Claude Code به API دانا

با سه متغیر محیطی، Claude Code را به رابط سازگار با Anthropic دانا وصل کنید و اولین درخواست را از ترمینال بفرستید.

دانا رابط Anthropic را روی همان موتور OpenAI-compatible خودش سرو می‌کند. Claude Code هم مقصد درخواست‌هایش را از دو متغیر محیطی ANTHROPIC_BASE_URL و ANTHROPIC_AUTH_TOKEN می‌خواند. پس برای عوض کردن مقصد، نه به پلاگین نیاز دارید نه به تغییر کد.

فرض ما این است که Claude Code روی سیستم شما نصب است. اگر هنوز کلید ندارید، از کنسول دانا یکی بسازید؛ کلید با dn-live- شروع می‌شود و فقط یک بار کامل نشان داده می‌شود.

چرا این کار جواب می‌دهد

Claude Code با هر سروری که پاکت پیام‌های Anthropic را بفهمد حرف می‌زند. دانا POST /v1/messages را با همان شکل ورودی و خروجی پیاده کرده و درخواست را پشت صحنه به موتور خودش ترجمه می‌کند. streaming و tool call هم در همین ترجمه حفظ می‌شوند، پس ابزارهای داخلی Claude Code (خواندن فایل، اجرای دستور) از کار نمی‌افتند. جزئیات پارامترها در مستندات Messages آمده است.

روش اول: متغیرهای محیطی

سریع‌ترین راه، تنظیم سه متغیر پیش از اجرای Claude Code است:

export ANTHROPIC_BASE_URL="https://api.dana.expert"
export ANTHROPIC_AUTH_TOKEN="dn-live-..."
export ANTHROPIC_MODEL="dana-1"

claude

به ANTHROPIC_BASE_URL بدون /v1 دقت کنید. مسیر /v1/messages را خود کلاینت اضافه می‌کند و اگر /v1 را هم بنویسید، درخواست به /v1/v1/messages می‌رود و ۴۰۴ می‌گیرید.

متغیر سوم را دست‌کم نگیرید. Claude Code به‌صورت پیش‌فرض نام مدل‌های claude-* را می‌فرستد و دانا فقط dana-1 و dana-1-fast را می‌شناسد. بدون این متغیر، هر درخواست با خطای درخواست نامعتبر برمی‌گردد و پیام خطا هم دقیقا همان فیلد model را مقصر می‌داند. شناسه‌های معتبر در صفحه مدل‌ها فهرست شده‌اند.

برای ماندگار شدن، همین خط‌ها را در فایل پروفایل شل (~/.zshrc یا ~/.bashrc) بگذارید.

روش دوم: فایل settings.json

اگر ترجیح می‌دهید محیط شل تمیز بماند، همین مقادیر را در ~/.claude/settings.json بنویسید:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.dana.expert",
    "ANTHROPIC_AUTH_TOKEN": "dn-live-...",
    "ANTHROPIC_MODEL": "dana-1"
  }
}

این فایل برای همه پروژه‌ها اعمال می‌شود. برای یک پروژه خاص، همان بلوک env را در .claude/settings.json کنار مخزن بگذارید؛ تنظیم پروژه بر تنظیم خانگی می‌چربد. یک کلید جدا برای هر پروژه بسازید تا اگر لازم شد فقط همان را باطل کنید.

امتحان کنید

اول مسیر را بدون Claude Code بسنجید تا بدانید مشکل از کلید است یا از کلاینت:

curl https://api.dana.expert/v1/messages \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "dana-1",
    "max_tokens": 64,
    "messages": [{"role": "user", "content": "سلام دانا!"}]
  }'

پاسخ باید یک پاکت message با آرایه content باشد. حالا نوبت خود ابزار است:

claude "یک تابع پایتون برای معکوس کردن رشته بنویس"

جواب گرفتید؟ کار تمام است. مصرف توکن همین درخواست در بخش مصرف کنسول ثبت می‌شود.

وقتی جواب نمی‌دهد

سه خطای اول را از روی کد HTTP بشناسید:

  • 401 یعنی توکن به سرور نرسیده یا باطل شده. معمولا شل قدیمی هنوز export نشده است؛ یک ترمینال تازه باز کنید.
  • 400 با پیامی درباره فیلد model یعنی ANTHROPIC_MODEL را جا انداخته‌اید.
  • 429 چهار علت دارد: نرخ درخواست، ظرفیت، سقف توکن یا اعتبار. فیلد type را بخوانید و محدودیت‌ها را ببینید.

فهرست کامل کدها و شکل پاکت خطا در صفحه خطاها هست.

همین روش برای بقیه ابزارها

هر ابزاری که پاکت Anthropic یا OpenAI را می‌فرستد با همین دو تنظیم به دانا وصل می‌شود: آدرس پایه و کلید. برای کلاینت‌های OpenAI (مثل openai SDK یا litellm) آدرس پایه https://api.dana.expert/v1 است و مسیر Chat Completions را می‌گیرد. اگر می‌خواهید به جای ابزار آماده، خودتان چیزی روی همین API بسازید، ساخت ربات پشتیبانی فارسی نمونه کامل‌تری است.

دانا را امتحان کنید
همین الان ثبت‌نام کنید، یک کلید API بسازید و اولین درخواست را بفرستید. شروع رایگان است.