آموزش استفاده از OpenRouter API برای توسعه‌دهندگان

۸ تیر ۱۴۰۵ · به‌روزرسانی ۸ تیر ۱۴۰۵ · ۳۳ دقیقه مطالعه

گندم کریمی
گندم کریمی

5 سال تجربه

متخصص هوش مصنوعی و تولید محتوا در Axeto. روی Prompt Engineering، Flux، ComfyUI و workflowهای تصویر/ویدیو AI تمرکز دارد.

نکات کلیدی

  • OpenRouter API به شما اجازه می‌دهد تا از یک API واحد برای دسترسی به صدها مدل هوش مصنوعی مختلف (مانند GPT-4, Claude, Llama) استفاده کنید و پیچیدگی‌های ادغام با APIهای متعدد را کاهش دهید.
  • این پلتفرم انعطاف‌پذیری بالایی در انتخاب مدل‌ها، بهینه‌سازی هزینه و مدیریت اعتبارنامه‌ها ارائه می‌دهد، که زمان توسعه را کاهش داده و امکان آزمایش سریع مدل‌ها را فراهم می‌کند.
  • برای شروع کار، نیاز به ایجاد حساب کاربری در OpenRouter، دریافت کلید API، و آشنایی اولیه با برنامه‌نویسی پایتون و مفاهیم API دارید.
  • OpenRouter علاوه بر مدل‌های متنی، از مدل‌های کد، چندوجهی و تولید تصویر نیز پشتیبانی می‌کند و امکاناتی مانند کشینگ پاسخ‌ها و نظارت بر مصرف را ارائه می‌دهد.
  • برای کاربران ایرانی، ممکن است نیاز به استفاده از ابزارهای تغییر IP برای دسترسی به وب‌سایت و API OpenRouter باشد.

همین حالا در Axeto امتحان کنید

مقاله را خواندید — حالا با ابزار واقعی Axeto خروجی بگیرید.

تصویری از یک دروازه دیجیتالی درخشان که نمادهای هوش مصنوعی و کد را نمایش می‌دهد، نشان‌دهنده دسترسی به مدل‌های متنوع AI از طریق OpenRouter API.

آموزش OpenRouter API: دروازه‌ای به مدل‌های هوش مصنوعی پیشرفته

OpenRouter یک پلتفرم نوآورانه است که دسترسی یکپارچه به مجموعه‌ای وسیع از مدل‌های هوش مصنوعی (AI) را از طریق یک رابط برنامه‌نویسی کاربردی (API) یکپارچه فراهم می‌کند. این پلتفرم به توسعه‌دهندگان و شرکت‌ها امکان می‌دهد تا به راحتی از قدرت مدل‌های پیشرو مانند GPT-4، Claude، Llama و بسیاری دیگر در کاربردهای خود استفاده کنند. با OpenRouter، پیچیدگی‌های ادغام با APIهای متعدد مدل‌ها از بین می‌رود و یک نقطه دسترسی واحد برای انواع مدل‌های زبانی بزرگ (LLM) و مدل‌های چندوجهی (Multimodal) ارائه می‌شود.

این مقاله به شما کمک می‌کند تا با OpenRouter API آشنا شوید و نحوه استفاده از آن را در پروژه‌های خود بیاموزید. ما گام به گام از راه‌اندازی اولیه تا پیاده‌سازی کد نمونه و رفع خطاهای رایج را پوشش خواهیم داد. هدف این آموزش، توانمندسازی شما برای بهره‌برداری حداکثری از این ابزار قدرتمند در جهت تولید محتوای هوشمند، تولید تصویر با هوش مصنوعی، و خودکارسازی وظایف پیچیده است.

با OpenRouter، می‌توانید به سرعت نمونه‌های اولیه بسازید، مدل‌های مختلف را آزمایش کنید و بهترین گزینه را برای نیازهای خاص خود بیابید، بدون اینکه نگران مدیریت اعتبارنامه‌ها یا محدودیت‌های نرخ برای هر API باشید. این پلتفرم نه تنها زمان توسعه را کاهش می‌دهد، بلکه انعطاف‌پذیری بی‌نظیری را در انتخاب مدل‌ها و بهینه‌سازی هزینه‌ها ارائه می‌دهد.

مقدمه

در دنیای امروز که هوش مصنوعی با سرعت نور در حال پیشرفت است، دسترسی به مدل‌های پیشرفته و توانمند برای توسعه‌دهندگان و کسب‌وکارها از اهمیت حیاتی برخوردار است. شرکت‌های مختلفی مدل‌های هوش مصنوعی را توسعه می‌دهند و هر کدام API، مستندات و مدل قیمت‌گذاری خاص خود را دارند. این تنوع، در عین مفید بودن، می‌تواند چالش‌برانگیز باشد، به خصوص زمانی که نیاز به آزمایش و مقایسه چندین مدل مختلف برای یک کاربرد خاص وجود دارد.

OpenRouter به عنوان یک راه‌حل جامع برای این چالش‌ها ظهور کرده است. این پلتفرم با ارائه یک لایه انتزاعی بر روی APIهای متعدد مدل‌های هوش مصنوعی، فرآیند دسترسی و استفاده از آن‌ها را به شدت ساده می‌کند. به جای اینکه مجبور باشید با APIهای OpenAI، Anthropic، Google، Meta و دیگران به صورت جداگانه کار کنید، OpenRouter یک API یکپارچه ارائه می‌دهد که از طریق آن می‌توانید به تمامی این مدل‌ها دسترسی پیدا کنید.

چرا OpenRouter؟

  • دسترسی یکپارچه: یک API واحد برای صدها مدل هوش مصنوعی.
  • انعطاف‌پذیری: به راحتی بین مدل‌های مختلف جابجا شوید و بهترین را برای پروژه خود پیدا کنید. این امکان به شما اجازه می‌دهد تا به سرعت پرامپت‌های خود را بهینه کنید.
  • کاهش پیچیدگی: نیازی به مدیریت کلیدهای API متعدد یا یادگیری مستندات مختلف برای هر مدل نیست.
  • بهینه‌سازی هزینه: OpenRouter اغلب قیمت‌های رقابتی‌تری نسبت به دسترسی مستقیم به برخی مدل‌ها ارائه می‌دهد و امکان مقایسه و انتخاب اقتصادی‌ترین گزینه را فراهم می‌کند.
  • پشتیبانی از مدل‌های متنوع: از مدل‌های متنی (مانند GPT-4، Claude 3)، مدل‌های کد (مانند Code Llama)، تا مدل‌های چندوجهی (مانند LLaVA) و حتی مدل‌های تولید تصویر را پوشش می‌دهد.
  • ویژگی‌های اضافی: امکاناتی مانند کشینگ پاسخ‌ها، نظارت بر مصرف و ابزارهای توسعه.

این آموزش به شما کمک می‌کند تا نه تنها با OpenRouter آشنا شوید، بلکه توانایی استفاده عملی از آن را در پروژه‌های خود با Axeto پیدا کنید. ما بر روی جنبه‌های کلیدی تمرکز خواهیم کرد که برای یک توسعه‌دهنده ایرانی که به دنبال استفاده از قدرت هوش مصنوعی است، کاربردی و مرتبط باشد.

پیش‌نیازها

قبل از شروع کار با OpenRouter API، اطمینان حاصل کنید که پیش‌نیازهای زیر را دارید:

1. حساب کاربری OpenRouter:

* ابتدا باید یک حساب کاربری در OpenRouter ایجاد کنید. به وب‌سایت openrouter.ai مراجعه کرده و ثبت‌نام کنید.

* پس از ثبت‌نام، به بخش "Keys" در پنل کاربری خود بروید و یک کلید API جدید ایجاد کنید. این کلید برای احراز هویت درخواست‌های شما به API لازم است. این کلید را در مکانی امن نگهداری کنید و هرگز آن را به صورت عمومی به اشتراک نگذارید.

* نکته مهم برای کاربران ایرانی: ممکن است برای دسترسی به وب‌سایت و API نیاز به استفاده از ابزارهای تغییر IP داشته باشید.

2. دانش برنامه‌نویسی:

* آشنایی با یک زبان برنامه‌نویسی مانند Python، JavaScript، Node.js یا Go. در این آموزش، ما از Python به عنوان زبان اصلی برای مثال‌ها استفاده خواهیم کرد، اما مفاهیم به سایر زبان‌ها نیز قابل تعمیم هستند.

* توانایی نصب و مدیریت پکیج‌ها (مانند pip برای Python).

3. محیط توسعه:

* نصب Python (نسخه 3.8 یا بالاتر) بر روی سیستم خود.

* یک ویرایشگر کد (مانند VS Code، Sublime Text یا PyCharm).

* ترمینال یا خط فرمان برای اجرای دستورات.

4. اعتبار (Credit) در OpenRouter:

* برای استفاده از مدل‌های هوش مصنوعی، نیاز به اعتبار (credit) در حساب OpenRouter خود دارید. OpenRouter یک مقدار اعتبار رایگان اولیه ارائه می‌دهد، اما برای استفاده گسترده‌تر باید اعتبار خریداری کنید.

* می‌توانید مدل‌های مختلف و قیمت‌های آن‌ها را در صفحه قیمت‌گذاری OpenRouter مشاهده کنید. این امکان به شما کمک می‌کند تا بودجه خود را برای AI بهینه کنید.

5. آشنایی با مفاهیم API:

* درک اولیه از نحوه عملکرد APIها، درخواست‌های HTTP (GET, POST)، فرمت JSON و احراز هویت (API Key).

با آماده‌سازی این پیش‌نیازها، شما آماده‌اید تا گام‌های بعدی را برای ادغام OpenRouter API در پروژه‌های خود بردارید.

گام ۱: نصب کتابخانه‌های مورد نیاز و تنظیم محیط

اولین گام برای شروع کار با OpenRouter API، نصب کتابخانه‌های مورد نیاز در محیط برنامه‌نویسی شما است. برای Python، معمولاً از کتابخانه requests برای ارسال درخواست‌های HTTP استفاده می‌شود.

۱.۱. ایجاد محیط مجازی (اختیاری اما توصیه شده)

توصیه می‌شود برای هر پروژه Python یک محیط مجازی (virtual environment) ایجاد کنید تا وابستگی‌های پروژه از سایر پروژه‌ها جدا شوند.

# ایجاد محیط مجازی
python -m venv venv

# فعال‌سازی محیط مجازی (ویندوز)
venv\Scripts\activate

# فعال‌سازی محیط مجازی (مک/لینوکس)
source venv/bin/activate

پس از فعال‌سازی محیط مجازی، نام آن (معمولاً (venv)) در ابتدای خط فرمان شما ظاهر می‌شود.

۱.۲. نصب کتابخانه requests

کتابخانه requests یکی از محبوب‌ترین کتابخانه‌ها برای ارسال درخواست‌های HTTP در Python است.

pip install requests

۱.۳. تنظیم کلید API

هرگز کلید API خود را مستقیماً در کد قرار ندهید. این یک آسیب‌پذیری امنیتی بزرگ است. بهترین روش، استفاده از متغیرهای محیطی (environment variables) است.

روش ۱: تنظیم موقت در ترمینال (برای تست)

  • ویندوز (Command Prompt):

```cmd

set OPENROUTER_API_KEY="YOUR_OPENROUTER_API_KEY"

```

  • ویندوز (PowerShell):

```powershell

$env:OPENROUTER_API_KEY="YOUR_OPENROUTER_API_KEY"

```

  • مک/لینوکس:

```bash

export OPENROUTER_API_KEY="YOUR_OPENROUTER_API_KEY"

```

روش ۲: استفاده از فایل .env (توصیه شده برای پروژه‌ها)

1. کتابخانه python-dotenv را نصب کنید:

```bash

pip install python-dotenv

```

2. یک فایل با نام .env در ریشه پروژه خود ایجاد کنید و کلید API را در آن قرار دهید:

```

OPENROUTER_API_KEY="YOUR_OPENROUTER_API_KEY"

```

3. در کد Python خود، آن را بارگذاری کنید:

```python

import os

from dotenv import load_dotenv

load_dotenv() # بارگذاری متغیرها از فایل .env

OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")

if OPENROUTER_API_KEY is None:

raise ValueError("OPENROUTER_API_KEY not found in environment variables or .env file.")

print("API Key loaded successfully.")

```

با این تنظیمات، محیط شما آماده است تا درخواست‌هایی را به OpenRouter API ارسال کند. در گام بعدی، نحوه ارسال اولین درخواست را بررسی خواهیم کرد.

گام ۲: ارسال اولین درخواست به OpenRouter API

حالا که محیط را تنظیم کرده‌اید، زمان آن رسیده که اولین درخواست خود را به OpenRouter API ارسال کنید. ما از مدل‌های متنی استفاده خواهیم کرد که برای تولید محتوا و پاسخ به سوالات بسیار مفید هستند.

OpenRouter از یک رابط کاربری مشابه OpenAI API استفاده می‌کند، که مهاجرت از OpenAI به OpenRouter را آسان می‌کند. نقطه پایانی (endpoint) اصلی برای چت /api/v1/chat/completions است.

۲.۱. انتخاب مدل

OpenRouter صدها مدل را پشتیبانی می‌کند. برای شروع، می‌توانید از یک مدل رایگان یا ارزان‌قیمت استفاده کنید تا با API آشنا شوید. برخی از مدل‌های محبوب عبارتند از:

  • openai/gpt-4o: جدیدترین و قدرتمندترین مدل OpenAI.
  • anthropic/claude-3-opus: مدل با کیفیت بالا از Anthropic.
  • mistralai/mistral-7b-instruct: یک مدل کوچکتر و سریعتر.
  • nousresearch/nous-hermes-2-mixtral-8x7b-dpo: یک مدل Mixtral قدرتمند.

لیست کامل مدل‌ها را می‌توانید در صفحه مدل‌های OpenRouter مشاهده کنید. برای تست اولیه، می‌توانید از mistralai/mistral-7b-instruct یا nousresearch/nous-hermes-2-mixtral-8x7b-dpo استفاده کنید که معمولاً کم‌هزینه‌تر هستند.

۲.۲. ساختار درخواست

درخواست به API OpenRouter یک درخواست HTTP POST با بدنه JSON است. ساختار اصلی به شرح زیر است:

  • URL: https://openrouter.ai/api/v1/chat/completions
  • Headers:

* Authorization: Bearer YOUR_OPENROUTER_API_KEY

* Content-Type: application/json

* HTTP-Referer: YOUR_APP_URL (اختیاری اما توصیه می‌شود، به OpenRouter کمک می‌کند تا مصرف شما را ردیابی کند. می‌توانید از https://axeto.ai یا آدرس سایت خود استفاده کنید.)

* X-Title: YOUR_APP_NAME (اختیاری، نام برنامه شما).

  • Body (JSON):

* model: نام مدل انتخابی (مثال: openai/gpt-4o).

* messages: آرایه‌ای از اشیاء پیام، هر شیء شامل role (نقش: system, user, assistant) و content (متن پیام).

۲.۳. کد نمونه (Python)

فایلی به نام openrouter_example.py ایجاد کنید و کد زیر را در آن قرار دهید:

import os
import requests
from dotenv import load_dotenv

# بارگذاری متغیرهای محیطی از فایل .env
load_dotenv()

OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")

if OPENROUTER_API_KEY is None:
    raise ValueError("OPENROUTER_API_KEY not found in environment variables or .env file.")

# تنظیمات درخواست API
API_URL = "https://openrouter.ai/api/v1/chat/completions"
# می‌توانید مدل را تغییر دهید.
# برای تست، از یک مدل ارزان‌تر مانند 'mistralai/mistral-7b-instruct' استفاده کنید.
# یا برای کیفیت بالاتر از 'openai/gpt-4o'
MODEL_NAME = "openai/gpt-4o" # یا 'mistralai/mistral-7b-instruct'

headers = {
    "Authorization": f"Bearer {OPENROUTER_API_KEY}",
    "Content-Type": "application/json",
    # توصیه می‌شود: Referer و Title برای ردیابی بهتر توسط OpenRouter
    "HTTP-Referer": "https://axeto.ai/topics/openrouter", # آدرس سایت یا پروژه شما
    "X-Title": "Axeto OpenRouter Tutorial", # نام پروژه شما
}

# پیام‌ها برای مدل
messages = [
    {"role": "user", "content": "سلام، من یک توسعه‌دهنده ایرانی هستم. OpenRouter چگونه می‌تواند به من کمک کند؟"},
    {"role": "system", "content": "شما یک دستیار هوش مصنوعی مفید و متخصص در OpenRouter هستید."},
]

# بدنه درخواست
data = {
    "model": MODEL_NAME,
    "messages": messages,
    "temperature": 0.7, # خلاقیت مدل (۰.۰ برای دقت، ۱.۰ برای خلاقیت بیشتر)
    "max_tokens": 500, # حداکثر تعداد توکن در پاسخ
}

print(f"Sending request to model: {MODEL_NAME}...")

try:
    response = requests.post(API_URL, headers=headers, json=data)
    response.raise_for_status() # برای بررسی خطاهای HTTP

    result = response.json()

    print("\nAPI Response:")
    # چاپ پاسخ اصلی
    # print(json.dumps(result, indent=2, ensure_ascii=False))

    # استخراج و چاپ محتوای پاسخ
    if result and "choices" in result and result["choices"]:
        assistant_message = result["choices"][0]["message"]["content"]
        print(f"Assistant: {assistant_message}")
        print("\n---")
        if "usage" in result:
            print(f"Usage: Prompt tokens: {result['usage']['prompt_tokens']}, Completion tokens: {result['usage']['completion_tokens']}, Total tokens: {result['usage']['total_tokens']}")
    else:
        print("No response from assistant.")

except requests.exceptions.HTTPError as http_err:
    print(f"HTTP error occurred: {http_err}")
    print(f"Response content: {response.text}")
except Exception as err:
    print(f"Other error occurred: {err}")

۲.۴. اجرای کد

فایل Python خود را اجرا کنید:

python openrouter_example.py

شما باید پاسخی از مدل هوش مصنوعی دریافت کنید که توضیح می‌دهد OpenRouter چگونه می‌تواند به شما کمک کند.

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

گام ۳: پارامترهای پیشرفته و بهینه‌سازی

OpenRouter API، مانند بسیاری از APIهای مدل‌های هوش مصنوعی، پارامترهای مختلفی را برای کنترل رفتار مدل ارائه می‌دهد. درک و استفاده صحیح از این پارامترها می‌تواند به شما کمک کند تا بهترین نتایج را برای کاربردهای خاص خود به دست آورید و کیفیت پرامپت‌های خود را بهبود بخشید.

۳.۱. پارامترهای اصلی (مرور)

  • model: (اجباری) نام مدل هوش مصنوعی که می‌خواهید استفاده کنید. مثال: openai/gpt-4o.
  • messages: (اجباری) آرایه‌ای از اشیاء پیام، شامل role (نقش: system, user, assistant) و content (متن). نقش system برای تنظیم رفتار کلی مدل است، user برای سوالات کاربر و assistant برای پاسخ‌های قبلی مدل.
  • temperature: (اختیاری، پیش‌فرض: 0.7) یک عدد بین 0.0 تا 1.0 (یا گاهی تا 2.0 بسته به مدل). کنترل‌کننده "خلاقیت" یا "تصادفی بودن" پاسخ مدل.

* 0.0: پاسخ‌های بسیار قطعی، تکراری و متمرکز. مناسب برای تولید کد، خلاصه‌سازی و وظایف دقیق.

* 1.0: پاسخ‌های خلاقانه‌تر، متنوع‌تر و گاهی غیرمنتظره. مناسب برای تولید محتوای خلاقانه، ایده‌پردازی و داستان‌نویسی.

  • max_tokens: (اختیاری) حداکثر تعداد توکن (کلمات یا بخش‌هایی از کلمات) که مدل در پاسخ خود تولید می‌کند. تنظیم این پارامتر می‌تواند به کنترل طول پاسخ و همچنین مدیریت هزینه‌ها کمک کند.
  • top_p: (اختیاری، پیش‌فرض: 1.0) یک عدد بین 0.0 تا 1.0. این پارامتر روش نمونه‌برداری را کنترل می‌کند. با top_p=0.1، مدل تنها کلماتی را در نظر می‌گیرد که مجموع احتمال آن‌ها به 10% برسد. این می‌تواند برای تولید پاسخ‌های متنوع‌تر از temperature استفاده شود، در حالی که هنوز کیفیت را حفظ می‌کند.
  • seed: (اختیاری) یک عدد صحیح. اگر می‌خواهید پاسخ مدل در شرایط یکسان (مدل، پرامپت، پارامترها) تکرارپذیر باشد، از این پارامتر استفاده کنید. این برای تست و دیباگ کردن بسیار مفید است.

۳.۲. پارامترهای پیشرفته‌تر

  • stream: (اختیاری، پیش‌فرض: false) اگر true باشد، پاسخ مدل به صورت جریان (stream) و تکه تکه ارسال می‌شود، که برای رابط‌های کاربری بلادرنگ (real-time) مفید است.
  • stop: (اختیاری) یک آرایه از رشته‌ها. مدل پس از تولید هر یک از این رشته‌ها متوقف می‌شود. این برای کنترل پایان پاسخ مدل در سناریوهای خاص مفید است.
  • frequency_penalty: (اختیاری، پیش‌فرض: 0) یک عدد بین -2.0 و 2.0. این پارامتر احتمال تکرار کلمات را کاهش می‌دهد. مقادیر مثبت باعث کاهش تکرار و مقادیر منفی باعث افزایش آن می‌شوند.
  • presence_penalty: (اختیاری، پیش‌فرض: 0) یک عدد بین -2.0 و 2.0. این پارامتر احتمال صحبت در مورد موضوعات جدید را افزایش می‌دهد یا کاهش می‌دهد، بدون توجه به اینکه کلمات قبلاً در متن ظاهر شده‌اند یا خیر.
  • logit_bias: (اختیاری) یک نقشه (dictionary) از توکن‌ها به بایاس‌ها (اعداد بین -100 تا 100). این پارامتر به شما اجازه می‌دهد تا احتمال تولید توکن‌های خاص را افزایش یا کاهش دهید. این برای هدایت مدل به سمت کلمات خاص یا جلوگیری از آن‌ها مفید است.
  • route: (اختیاری) به OpenRouter اجازه می‌دهد تا درخواست شما را به مدل‌های خاصی هدایت کند، مثلاً مدل‌هایی که ارزان‌تر هستند یا دارای ویژگی‌های خاصی هستند.
  • transforms: (اختیاری) لیستی از تبدیل‌ها (transforms) که قبل یا بعد از پردازش مدل اعمال می‌شوند. مثال: ['strip_whitespace', 'remove_line_breaks'].

۳.۳. مثال عملی: استفاده از stream و seed برای تولید محتوای تکرارپذیر

فرض کنید می‌خواهید یک داستان کوتاه تولید کنید و می‌خواهید مطمئن شوید که هر بار با پارامترهای یکسان، همان داستان را دریافت می‌کنید. همچنین می‌خواهید پاسخ را به صورت جریان دریافت کنید.

import os
import requests
import json
from dotenv import load_dotenv

load_dotenv()

OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")

if OPENROUTER_API_KEY is None:
    raise ValueError("OPENROUTER_API_KEY not found in environment variables or .env file.")

API_URL = "https://openrouter.ai/api/v1/chat/completions"
MODEL_NAME = "openai/gpt-4o" # یا هر مدل دیگری که می‌خواهید

headers = {
    "Authorization": f"Bearer {OPENROUTER_API_KEY}",
    "Content-Type": "application/json",
    "HTTP-Referer": "https://axeto.ai/learn-ai",
    "X-Title": "Axeto Advanced OpenRouter",
}

messages = [
    {"role": "system", "content": "شما یک داستان‌نویس خلاق هستید که داستان‌های کوتاه با پایان غیرمنتظره می‌نویسید."},
    {"role": "user", "content": "یک داستان کوتاه در مورد یک مسافر زمان بنویسید که سعی می‌کند گذشته را تغییر دهد."},
]

data = {
    "model": MODEL_NAME,
    "messages": messages,
    "temperature": 0.8,
    "max_tokens": 300,
    "stream": True, # فعال کردن حالت جریان
    "seed": 42, # برای تکرارپذیری
    "stop": ["پایان داستان"], # مدل پس از دیدن این عبارت متوقف می‌شود
}

print(f"Sending streaming request to model: {MODEL_NAME} with seed: {data['seed']}...")
print("Generated story (streaming):")

try:
    with requests.post(API_URL, headers=headers, json=data, stream=True) as response:
        response.raise_for_status()
        full_response_content = ""
        for chunk in response.iter_lines():
            if chunk:
                # OpenRouter chunks are prefixed with "data: "
                if chunk.decode('utf-8').startswith("data: "):
                    try:
                        json_chunk = json.loads(chunk.decode('utf-8')[6:])
                        # بررسی برای پایان جریان (برخی مدل‌ها یک پیام پایان ارسال می‌کنند)
                        if json_chunk.get("choices") and json_chunk["choices"][0].get("delta") and json_chunk["choices"][0]["delta"].get("content"):
                            content_part = json_chunk["choices"][0]["delta"]["content"]
                            full_response_content += content_part
                            print(content_part, end="", flush=True) # چاپ تکه به تکه
                        elif json_chunk.get("choices") and json_chunk["choices"][0].get("finish_reason"):
                            break # پایان جریان
                    except json.JSONDecodeError:
                        # گاهی اوقات ممکن است یک chunk کامل JSON نباشد.
                        # این اتفاق کمتر می‌افتد اما برای مدیریت خطاهای احتمالی خوب است.
                        pass
        print("\n---")
        print(f"Full story length: {len(full_response_content)} characters.")

except requests.exceptions.HTTPError as http_err:
    print(f"HTTP error occurred: {http_err}")
    if response:
        print(f"Response content: {response.text}")
except Exception as err:
    print(f"Other error occurred: {err}")

با اجرای این کد، داستان به صورت تدریجی در ترمینال شما ظاهر می‌شود. اگر چندین بار این کد را با seed=42 اجرا کنید (و بقیه پارامترها ثابت باشند)، باید هر بار همان داستان را دریافت کنید. این قابلیت برای تست و مقایسه مدل‌ها بسیار ارزشمند است.

تست Axeto

در این بخش، ما OpenRouter API را با استفاده از پرامپت‌های فارسی مختلف آزمایش می‌کنیم تا عملکرد آن را در سناریوهای رایج برای کاربران Axeto ارزیابی کنیم. هدف، بررسی کیفیت پاسخ‌ها، درک زبان فارسی و توانایی مدل در تولید محتوای مرتبط و مفید است.

ما از مدل openai/gpt-4o از طریق OpenRouter استفاده خواهیم کرد، زیرا این مدل یکی از قدرتمندترین و چندوظیفه‌ای‌ترین مدل‌های موجود است که توانایی بالایی در درک و تولید زبان‌های مختلف از جمله فارسی دارد.

سناریوهای تست

ما سه سناریوی رایج را برای تست انتخاب کرده‌ایم:

1. تولید محتوای متنی خلاقانه: تولید یک شعر کوتاه یا یک داستانک.

2. خلاصه‌سازی متن: خلاصه‌سازی یک متن فارسی بلند.

3. پاسخ به سوالات تخصصی: پاسخ به یک سوال در زمینه هوش مصنوعی یا برنامه‌نویسی.

جدول نتایج تست

سناریو تستپرامپت (فارسی)مدل استفاده شدهکیفیت پاسختوضیحات
تولید محتوای خلاقانه"یک شعر کوتاه در مورد پاییز در تهران بنویسید."openai/gpt-4oعالیشعر با وزن و قافیه مناسب، توصیفات زیبا و مرتبط با تهران.
خلاصه‌سازی متن"لطفاً متن زیر را در حدود ۵۰ کلمه خلاصه کنید: هوش مصنوعی (AI) شاخه‌ای از علوم کامپیوتر است که به توسعه ماشین‌هایی می‌پردازد که می‌توانند همانند انسان‌ها فکر کرده، یاد بگیرند و عمل کنند. این فناوری در حوزه‌های مختلفی از جمله پردازش زبان طبیعی، بینایی ماشینی، رباتیک و یادگیری ماشین کاربرد دارد. هدف اصلی AI، ایجاد سیستم‌هایی است که قادر به انجام وظایفی هستند که به طور سنتی نیاز به هوش انسانی دارند، مانند حل مسئله، تصمیم‌گیری و درک زبان. پیشرفت‌های اخیر در یادگیری عمیق، به ویژه در شبکه‌های عصبی، منجر به انقلاب بزرگی در این حوزه شده و کاربردهای AI را در زندگی روزمره ما گسترش داده است."openai/gpt-4oبسیار خوبخلاصه دقیق، جامع و در محدوده کلمات درخواستی. نکات اصلی به خوبی پوشش داده شده‌اند.
پاسخ به سوال تخصصی"تفاوت اصلی بین یادگیری نظارت شده (Supervised Learning) و یادگیری تقویت شده (Reinforcement Learning) چیست؟"openai/gpt-4oعالیپاسخ کامل، دقیق و با مثال‌های واضح. تفاوت‌ها به خوبی تشریح شده‌اند.
تولید محتوای بازاریابی"یک عنوان جذاب برای یک مقاله وبلاگی با موضوع 'چگونه با Axeto تصاویر هوش مصنوعی خیره‌کننده بسازیم؟' پیشنهاد دهید."openai/gpt-4oعالی"Axeto: خلق تصاویر AI شگفت‌انگیز تنها با چند کلیک! (راهنمای جامع)"

تحلیل نتایج

  • کیفیت زبان فارسی: مدل openai/gpt-4o از طریق OpenRouter عملکرد بسیار خوبی در درک و تولید زبان فارسی از خود نشان داد. پاسخ‌ها روان، طبیعی و بدون خطاهای گرامری یا املایی قابل توجه بودند.
  • خلاقیت: در سناریوی تولید شعر، مدل توانست یک شعر زیبا و مرتبط با موضوع ارائه دهد که نشان‌دهنده توانایی آن در تولید محتوای خلاقانه فارسی است.
  • دقت و خلاصه‌سازی: در خلاصه‌سازی متن و پاسخ به سوالات تخصصی، مدل دقت بالایی داشت و اطلاعات را به صورت مختصر و مفید ارائه کرد. این قابلیت برای تولید محتوای آموزشی بسیار مفید است.
  • چندوجهی بودن (Multimodality): اگرچه در این تست‌ها فقط از قابلیت‌های متنی استفاده شد، اما gpt-4o یک مدل چندوجهی است و از طریق OpenRouter می‌توان به قابلیت‌های تولید تصویر و پردازش تصویر آن نیز دسترسی پیدا کرد.

نتیجه‌گیری برای کاربران Axeto:

OpenRouter با فراهم کردن دسترسی به مدل‌های قدرتمندی مانند gpt-4o، ابزاری فوق‌العاده برای توسعه‌دهندگان و خالقان محتوای ایرانی است. شما می‌توانید با اطمینان خاطر از این پلتفرم برای تولید متون فارسی با کیفیت بالا، خلاصه‌سازی، پاسخ به سوالات، ایده‌پردازی و حتی تولید پرامپت‌های خلاقانه استفاده کنید. عملکرد مدل در زبان فارسی بسیار رضایت‌بخش است و می‌تواند به شما در خلق محتوای جذاب و کارآمد کمک کند.

کد نمونه

در این بخش، یک کد نمونه کامل و کاربردی برای تعامل با OpenRouter API در Python ارائه می‌دهیم. این کد شامل مدیریت خطا، استفاده از متغیرهای محیطی و یک تابع کمکی برای ارسال درخواست‌ها است که می‌تواند به راحتی در پروژه‌های شما ادغام شود.

openrouter_client.py

import os
import requests
import json
from dotenv import load_dotenv

# --- تنظیمات اولیه ---
load_dotenv() # بارگذاری متغیرها از فایل .env

OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions"

if OPENROUTER_API_KEY is None:
    raise ValueError("OPENROUTER_API_KEY not found in environment variables or .env file.")

# --- تابع کمکی برای ارسال درخواست ---
def call_openrouter_api(
    messages: list,
    model: str = "openai/gpt-4o", # مدل پیش‌فرض
    temperature: float = 0.7,
    max_tokens: int = 500,
    stream: bool = False,
    seed: int = None,
    stop: list = None,
    referer: str = "https://axeto.ai/topics/openrouter", # مرجع برنامه شما
    title: str = "Axeto OpenRouter Client", # نام برنامه شما
    **kwargs # برای پارامترهای اضافی که مستقیماً در تابع نیستند
):
    """
    تابع برای ارسال درخواست به OpenRouter Chat Completions API.

    Args:
        messages (list): لیستی از دیکشنری‌های پیام‌ها.
                         مثال: [{"role": "user", "content": "سلام"}]
        model (str): نام مدل هوش مصنوعی برای استفاده.
        temperature (float): کنترل‌کننده خلاقیت مدل (0.0 تا 1.0).
        max_tokens (int): حداکثر تعداد توکن در پاسخ.
        stream (bool): اگر True باشد، پاسخ به صورت جریان (stream) دریافت می‌شود.
        seed (int): برای تکرارپذیری پاسخ.
        stop (list): لیستی از رشته‌ها که مدل پس از تولید آن‌ها متوقف می‌شود.
        referer (str): HTTP Referer برای ردیابی در OpenRouter.
        title (str): X-Title برای ردیابی در OpenRouter.
        **kwargs: پارامترهای اضافی که مستقیماً به API ارسال می‌شوند.

    Returns:
        dict or generator: اگر stream=False باشد، یک دیکشنری JSON از پاسخ API.
                           اگر stream=True باشد، یک ژنراتور برای تکه‌های پاسخ.
    Raises:
        requests.exceptions.RequestException: در صورت بروز خطای شبکه یا HTTP.
        ValueError: در صورت عدم وجود کلید API.
    """

    headers = {
        "Authorization": f"Bearer {OPENROUTER_API_KEY}",
        "Content-Type": "application/json",
        "HTTP-Referer": referer,
        "X-Title": title,
    }

    data = {
        "model": model,
        "messages": messages,
        "temperature": temperature,
        "max_tokens": max_tokens,
        "stream": stream,
    }

    if seed is not None:
        data["seed"] = seed
    if stop is not None:
        data["stop"] = stop

    # اضافه کردن پارامترهای اضافی
    data.update(kwargs)

    try:
        if stream:
            response = requests.post(OPENROUTER_API_URL, headers=headers, json=data, stream=True)
            response.raise_for_status() # بررسی خطاهای HTTP
            return stream_response_parser(response)
        else:
            response = requests.post(OPENROUTER_API_URL, headers=headers, json=data)
            response.raise_for_status()
            return response.json()
    except requests.exceptions.HTTPError as http_err:
        print(f"HTTP error occurred: {http_err}")
        if response:
            print(f"Response content: {response.text}")
        raise
    except requests.exceptions.ConnectionError as conn_err:
        print(f"Connection error occurred: {conn_err}")
        raise
    except requests.exceptions.Timeout as timeout_err:
        print(f"Timeout error occurred: {timeout_err}")
        raise
    except requests.exceptions.RequestException as req_err:
        print(f"An unexpected request error occurred: {req_err}")
        raise

def stream_response_parser(response):
    """
    ژنراتور برای تجزیه و تحلیل پاسخ‌های استریم شده از OpenRouter.
    """
    for chunk in response.iter_lines():
        if chunk:
            decoded_chunk = chunk.decode('utf-8')
            if decoded_chunk.startswith("data: "):
                try:
                    json_chunk = json.loads(decoded_chunk[6:])
                    # OpenRouter ممکن است یک پیام پایان (done) یا یک پیام خالی ارسال کند
                    if json_chunk.get("choices") and json_chunk["choices"][0].get("delta") and json_chunk["choices"][0]["delta"].get("content"):
                        yield json_chunk["choices"][0]["delta"]["content"]
                    elif json_chunk.get("choices") and json_chunk["choices"][0].get("finish_reason"):
                        break # پایان جریان
                except json.JSONDecodeError:
                    # این chunk ممکن است کامل نباشد یا فرمت JSON نداشته باشد
                    continue

# --- مثال‌های استفاده ---
if __name__ == "__main__":
    print("--- مثال ۱: درخواست ساده (غیر استریم) ---")
    user_message_1 = "یک جمله انگیزشی کوتاه به زبان فارسی بنویسید."
    messages_1 = [{"role": "user", "content": user_message_1}]

    try:
        response_1 = call_openrouter_api(messages_1, model="openai/gpt-4o", max_tokens=50)
        if response_1 and "choices" in response_1 and response_1["choices"]:
            print(f"پاسخ مدل: {response_1['choices'][0]['message']['content']}")
            if "usage" in response_1:
                print(f"Usage: {response_1['usage']['total_tokens']} tokens.")
        else:
            print("پاسخی از مدل دریافت نشد.")
    except Exception as e:
        print(f"خطا در مثال ۱: {e}")

    print("\n--- مثال ۲: درخواست استریم ---")
    user_message_2 = "یک داستان کوتاه در مورد یک روبات که عاشق یک پرنده می‌شود، بنویسید."
    messages_2 = [{"role": "user", "content": user_message_2}]

    try:
        print("داستان در حال تولید (استریم):")
        full_story = ""
        for chunk_content in call_openrouter_api(messages_2, model="openai/gpt-4o", stream=True, max_tokens=300):
            print(chunk_content, end="", flush=True)
            full_story += chunk_content
        print("\n--- پایان داستان ---")
        print(f"طول کل داستان: {len(full_story)} کاراکتر.")
    except Exception as e:
        print(f"خطا در مثال ۲: {e}")

    print("\n--- مثال ۳: استفاده از پارامتر seed برای تکرارپذیری ---")
    user_message_3 = "سه کلمه تصادفی فارسی تولید کنید."
    messages_3 = [{"role": "user", "content": user_message_3}]

    print("اجرای اول با seed=123:")
    try:
        response_3a = call_openrouter_api(messages_3, model="openai/gpt-4o", seed=123, temperature=1.0, max_tokens=30)
        if response_3a and "choices" in response_3a:
            print(f"پاسخ: {response_3a['choices'][0]['message']['content']}")
    except Exception as e:
        print(f"خطا در مثال ۳a: {e}")

    print("\nاجرای دوم با seed=123:")
    try:
        response_3b = call_openrouter_api(messages_3, model="openai/gpt-4o", seed=123, temperature=1.0, max_tokens=30)
        if response_3b and "choices" in response_3b:
            print(f"پاسخ: {response_3b['choices'][0]['message']['content']}")
    except Exception as e:
        print(f"خطا در مثال ۳b: {e}")

    print("\n--- مثال ۴: تغییر مدل به یک مدل ارزان‌تر (مثال: Mistral) ---")
    user_message_4 = "فواید یادگیری برنامه‌نویسی چیست؟"
    messages_4 = [{"role": "user", "content": user_message_4}]

    try:
        # مطمئن شوید که مدل 'mistralai/mistral-7b-instruct' در OpenRouter موجود است
        response_4 = call_openrouter_api(messages_4, model="mistralai/mistral-7b-instruct", max_tokens=100)
        if response_4 and "choices" in response_4:
            print(f"پاسخ مدل Mistral: {response_4['choices'][0]['message']['content']}")
        else:
            print("پاسخی از مدل Mistral دریافت نشد.")
    except Exception as e:
        print(f"خطا در مثال ۴: {e}")

نحوه استفاده

1. ذخیره فایل: کد بالا را در فایلی به نام openrouter_client.py ذخیره کنید.

2. فایل .env: مطمئن شوید که فایل .env با کلید OPENROUTER_API_KEY در همان دایرکتوری وجود دارد.

3. اجرا: اسکریپت را از طریق ترمینال اجرا کنید: python openrouter_client.py

این کد نمونه قابلیت‌های اصلی OpenRouter API را پوشش می‌دهد و به عنوان یک نقطه شروع قوی برای توسعه برنامه‌های مبتنی بر هوش مصنوعی شما عمل می‌کند. با استفاده از این تابع، می‌توانید به راحتی مدل‌ها را تغییر دهید، پارامترها را تنظیم کنید و از قابلیت‌های استریمینگ بهره‌مند شوید.

مثال عملی: تولید پرامپت برای تولید تصویر با Axeto

OpenRouter نه تنها برای تولید متن، بلکه برای ایده‌پردازی و تولید پرامپت‌های پیچیده برای تولید تصویر با هوش مصنوعی نیز می‌تواند بسیار مفید باشد. در این مثال، ما از OpenRouter برای تولید یک پرامپت دقیق و هنری استفاده می‌کنیم که سپس می‌توانیم آن را در Axeto یا هر پلتفرم تولید تصویر دیگری به کار ببریم.

فرض کنید می‌خواهید تصویری از "یک شهر فانتزی در آینده با معماری الهام گرفته از ایران باستان و نورپردازی نئونی" بسازید. یک پرامپت ساده ممکن است نتایج خوبی ندهد. با OpenRouter، می‌توانید از یک مدل LLM بخواهید تا یک پرامپت غنی و توصیفی برای شما ایجاد کند.

کد نمونه برای تولید پرامپت تصویر

import os
import requests
import json
from dotenv import load_dotenv

load_dotenv()

OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
OPENROUTER_API_URL = "https://openrouter.ai/api/v1/chat/completions"

if OPENROUTER_API_KEY is None:
    raise ValueError("OPENROUTER_API_KEY not found in environment variables or .env file.")

def generate_image_prompt(
    description: str,
    model: str = "openai/gpt-4o",
    language: str = "English", # برای پرامپت‌های تصویری، معمولاً انگلیسی بهتر عمل می‌کند
    style_guide: str = "جزئیات بالا، سبک هنری سایبرپانک، با الهام از هنر مینیاتور ایرانی و معماری دوران ساسانی، رنگ‌های زنده، نورپردازی دراماتیک، کیفیت سینمایی 8K.",
    max_tokens: int = 200,
    temperature: float = 0.9,
    referer: str = "https://axeto.ai/generate/image",
    title: str = "Axeto Image Prompt Generator"
):
    """
    تولید یک پرامپت دقیق برای تولید تصویر با هوش مصنوعی.

    Args:
        description (str): توضیح کلی از تصویری که می‌خواهید.
        model (str): مدل OpenRouter برای تولید پرامپت.
        language (str): زبان پرامپت خروجی (معمولاً انگلیسی برای مدل‌های تصویری).
        style_guide (str): راهنمای سبک هنری برای پرامپت.
        max_tokens (int): حداکثر طول پرامپت.
        temperature (float): کنترل‌کننده خلاقیت.
        referer (str): HTTP Referer.
        title (str): X-Title.

    Returns:
        str: پرامپت تولید شده برای تصویر.
    """

    messages = [
        {"role": "system", "content": f"شما یک متخصص تولید پرامپت برای هوش مصنوعی هستید. پرامپت‌های دقیق، هنری و با جزئیات بالا برای تولید تصویر ایجاد کنید. زبان خروجی: {language}."},
        {"role": "user", "content": f"یک پرامپت برای تولید تصویر از: '{description}'. با در نظر گرفتن راهنمای سبک: '{style_guide}'"}
    ]

    headers = {
        "Authorization": f"Bearer {OPENROUTER_API_KEY}",
        "Content-Type": "application/json",
        "HTTP-Referer": referer,
        "X-Title": title,
    }

    data = {
        "model": model,
        "messages": messages,
        "temperature": temperature,
        "max_tokens": max_tokens,
    }

    try:
        response = requests.post(OPENROUTER_API_URL, headers=headers, json=data)
        response.raise_for_status()
        result = response.json()
        if result and "choices" in result and result["choices"]:
            return result["choices"][0]["message"]["content"]
        return "Failed to generate prompt."
    except requests.exceptions.HTTPError as http_err:
        print(f"HTTP error occurred: {http_err}")
        if response:
            print(f"Response content: {response.text}")
        return f"Error: {http_err}"
    except Exception as err:
        print(f"Other error occurred: {err}")
        return f"Error: {err}"

if __name__ == "__main__":
    conceptual_description = "یک شهر فانتزی در آینده با معماری الهام گرفته از ایران باستان و نورپردازی نئونی."
    
    print("در حال تولید پرامپت تصویر با OpenRouter...")
    generated_prompt = generate_image_prompt(conceptual_description)
    
    print("\n--- پرامپت تولید شده ---")
    print(generated_prompt)
    print("------------------------")

    print("\nحالا می‌توانید این پرامپت را در Axeto برای تولید تصویر استفاده کنید:")
    print(f"به [صفحه تولید تصویر Axeto]({os.getenv('AXETO_IMAGE_GEN_URL', 'https://axeto.ai/generate/image')}) بروید و پرامپت را وارد کنید.")

نحوه استفاده در Axeto

1. اجرای کد: کد بالا را اجرا کنید. OpenRouter یک پرامپت انگلیسی دقیق برای شما تولید خواهد کرد.

2. کپی پرامپت: پرامپت تولید شده را کپی کنید.

3. رفتن به Axeto: به صفحه تولید تصویر Axeto بروید.

4. ورود پرامپت: پرامپت کپی شده را در فیلد مربوطه وارد کنید.

5. تنظیمات اضافی (اختیاری): می‌توانید پارامترهایی مانند نسبت ابعاد، سبک، تعداد تصاویر و غیره را در Axeto تنظیم کنید.

6. تولید تصویر: بر روی دکمه "تولید" کلیک کنید.

با این روش، می‌توانید از قدرت مدل‌های زبانی OpenRouter برای ساخت پرامپت‌های خلاقانه و دقیق استفاده کنید و سپس آن‌ها را در پلتفرم‌های تولید تصویر مانند Axeto به کار ببرید تا نتایج بصری خیره‌کننده‌ای خلق کنید. این یک جریان کاری قدرتمند برای خالقان محتوا است که به دنبال افزایش کیفیت و کارایی در تولیدات خود هستند.

خطاهای رایج

هنگام کار با هر API، مواجه شدن با خطاها اجتناب‌ناپذیر است. درک خطاهای رایج OpenRouter API و نحوه رفع آن‌ها می‌تواند زمان توسعه شما را به شدت کاهش دهد.

۱. خطاهای احراز هویت (Authentication Errors)

  • کد خطا: 401 Unauthorized
  • پیام خطا (معمولا): Invalid API key یا Authentication failed
  • علت:

* کلید API اشتباه، منقضی شده یا نامعتبر است.

* کلید API در هدر Authorization به درستی ارسال نشده است (مثلاً فرمت Bearer رعایت نشده).

* متغیر محیطی OPENROUTER_API_KEY به درستی بارگذاری نشده است.

  • راه حل:

* مطمئن شوید که کلید API خود را از پنل کاربری OpenRouter به درستی کپی کرده‌اید.

* بررسی کنید که کلید API به صورت Bearer YOUR_API_KEY در هدر Authorization ارسال شده باشد (فاصله بین Bearer و کلید API).

* مطمئن شوید که متغیر محیطی به درستی بارگذاری شده و در زمان ارسال درخواست در دسترس است. به بخش پیش‌نیازها مراجعه کنید.

۲. خطاهای اعتبار (Credit/Billing Errors)

  • کد خطا: 402 Payment Required
  • پیام خطا (معمولا): Insufficient funds یا You have run out of credits
  • علت:

* اعتبار حساب OpenRouter شما تمام شده است.

* استفاده از مدل‌های گران‌قیمت بدون اعتبار کافی.

  • راه حل:

* اعتبار حساب OpenRouter خود را شارژ کنید. می‌توانید صفحه قیمت‌گذاری OpenRouter را بررسی کنید.

* برای تست، از مدل‌های ارزان‌تر یا رایگان استفاده کنید.

۳. خطاهای درخواست نامعتبر (Invalid Request Errors)

  • کد خطا: 400 Bad Request
  • پیام خطا (معمولا): Invalid parameter, Missing required field, Invalid JSON
  • علت:

* بدنه درخواست JSON به درستی فرمت نشده است.

* پارامترهای اجباری (مانند model یا messages) در درخواست وجود ندارند.

* مقادیر پارامترها نامعتبر هستند (مثلاً temperature خارج از محدوده مجاز).

* نام مدل اشتباه تایپ شده یا وجود ندارد.

  • راه حل:

* مطمئن شوید که JSON ارسالی شما معتبر است. می‌توانید از ابزارهای آنلاین JSON validator استفاده کنید.

* بررسی کنید که تمام پارامترهای اجباری در درخواست شما وجود دارند.

* مقادیر پارامترها را با مستندات OpenRouter مقایسه کنید.

* از نام دقیق مدل استفاده کنید.

۴. خطاهای محدودیت نرخ (Rate Limit Errors)

  • کد خطا: 429 Too Many Requests
  • پیام خطا (معمولا): Rate limit exceeded
  • علت:

* تعداد درخواست‌های شما در یک بازه زمانی مشخص از حد مجاز فراتر رفته است.

  • راه حل:

* پیاده‌سازی مکانیزم "عقب‌نشینی تصاعدی" (Exponential Backoff) در کد خود. یعنی پس از دریافت این خطا، برای مدت زمان کوتاهی صبر کرده و سپس دوباره تلاش کنید، و در صورت تکرار خطا، زمان انتظار را افزایش دهید.

* مصرف API خود را بهینه کنید و درخواست‌های غیرضروری را کاهش دهید.

۵. خطاهای سرور (Server Errors)

  • کد خطا: 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout
  • پیام خطا (معمولا): An unexpected error occurred, Service temporarily unavailable
  • علت:

* مشکلی در سرورهای OpenRouter یا مدل‌های هوش مصنوعی زیربنایی رخ داده است.

* مدل در حال حاضر در دسترس نیست یا تحت نگهداری است.

  • راه حل:

* این خطاها معمولاً از سمت شما نیستند. می‌توانید پس از مدتی دوباره تلاش کنید.

* وضعیت سرویس OpenRouter یا ارائه‌دهنده مدل را بررسی کنید (اگر در دسترس باشد).

* پیاده‌سازی مکانیزم تلاش مجدد (Retry Mechanism) در کد خود.

۶. خطاهای اتصال (Connection Errors)

  • پیام خطا (معمولا): requests.exceptions.ConnectionError, Max retries exceeded with url
  • علت:

* مشکل شبکه در سمت شما یا در مسیر به سرور OpenRouter.

* فایروال یا پروکسی که اتصال را مسدود می‌کند.

* (برای کاربران ایرانی) عدم استفاده از ابزار تغییر IP یا مشکل در ابزار تغییر IP.

  • راه حل:

* اتصال اینترنت خود را بررسی کنید.

* تنظیمات فایروال یا پروکسی خود را بررسی کنید.

* مطمئن شوید که ابزار تغییر IP شما فعال و به درستی کار می‌کند.

نکات عمومی برای دیباگ کردن

  • چاپ کامل پاسخ خطا: همیشه سعی کنید محتوای کامل پاسخ خطا را چاپ کنید (مثلاً response.text). این اطلاعات می‌تواند سرنخ‌های مهمی برای رفع مشکل ارائه دهد.
  • بررسی مستندات: مستندات رسمی OpenRouter را برای جزئیات بیشتر در مورد پارامترها و کدها بررسی کنید.
  • تست با ابزارهای دیگر: از ابزارهایی مانند Postman یا curl برای ارسال درخواست‌های API استفاده کنید تا مطمئن شوید مشکل از کد شماست یا از تنظیمات API.

با رعایت این نکات و درک خطاهای رایج، می‌توانید به طور موثرتری با OpenRouter API کار کرده و پروژه‌های AI خود را با موفقیت بیشتری پیش ببرید.

تحلیل Axeto

Axeto به عنوان یک پلتفرم پیشرو در تولید محتوای هوش مصنوعی و تولید تصویر برای کاربران ایرانی، همواره به دنبال ارائه بهترین ابزارها و تجربیات است. ادغام و استفاده از OpenRouter API در اکوسیستم Axeto می‌تواند مزایای قابل توجهی برای کاربران ما به ارمغان آورد.

مزایای OpenRouter برای کاربران Axeto

1. دسترسی به مدل‌های متنوع و پیشرفته: OpenRouter دروازه‌ای به صدها مدل هوش مصنوعی از جمله جدیدترین و قدرتمندترین مدل‌ها مانند GPT-4o، Claude 3 Opus، Llama 3 و مدل‌های Mistral است. این تنوع به کاربران Axeto اجازه می‌دهد تا برای هر نیاز خاصی، از تولید متن‌های خلاقانه گرفته تا خلاصه‌سازی‌های دقیق و حتی تولید پرامپت‌های پیچیده برای تصاویر، مدل بهینه را انتخاب کنند.

2. انعطاف‌پذیری و آزمایش: با OpenRouter، کاربران Axeto می‌توانند به راحتی مدل‌های مختلف را برای یک کار خاص آزمایش کنند و بهترین عملکرد را با کمترین هزینه پیدا کنند. این قابلیت برای بهینه‌سازی هزینه‌های AI و افزایش کیفیت خروجی‌ها بسیار حیاتی است. به عنوان مثال، برای تولید محتوای عمومی، شاید یک مدل ارزان‌تر Mistral کافی باشد، در حالی که برای محتوای تخصصی، GPT-4o یا Claude 3 Opus ترجیح داده شود.

3. کاهش پیچیدگی فنی: OpenRouter با ارائه یک API یکپارچه، پیچیدگی‌های کار با APIهای متعدد از ارائه‌دهندگان مختلف را از بین می‌برد. این به توسعه‌دهندگان Axeto (و کاربران پیشرفته‌ای که از API استفاده می‌کنند) اجازه می‌دهد تا به جای صرف وقت برای مدیریت APIهای مختلف، بر روی ارائه ویژگی‌های نوآورانه و بهبود تجربه کاربری تمرکز کنند.

4. کاهش ریسک وابستگی به یک ارائه‌دهنده: با OpenRouter، Axeto به یک ارائه‌دهنده مدل خاص وابسته نیست. اگر یک مدل خاص دچار مشکل شود یا قیمت‌های آن تغییر کند، می‌توان به سرعت به مدل دیگری از طریق OpenRouter سوییچ کرد. این انعطاف‌پذیری، پایداری سرویس‌های Axeto را افزایش می‌دهد.

5. مدیریت متمرکز اعتبار و هزینه‌ها: OpenRouter یک داشبورد متمرکز برای نظارت بر مصرف و هزینه‌ها ارائه می‌دهد. این به Axeto کمک می‌کند تا مصرف منابع هوش مصنوعی را بهینه کند و در نهایت، قیمت‌گذاری رقابتی‌تری را به کاربران خود ارائه دهد.

توصیه‌های عملی برای کاربران Axeto

  • برای تولید متن:

* محتوای عمومی و سریع: از مدل‌هایی مانند mistralai/mistral-7b-instruct یا google/gemini-pro استفاده کنید که سرعت بالا و هزینه کمتری دارند. مناسب برای تولید ایده‌ها، پیش‌نویس‌های اولیه و پاسخ به سوالات ساده.

* محتوای تخصصی و با کیفیت بالا: برای مقالات وبلاگی، گزارش‌های فنی، داستان‌نویسی و هر محتوایی که نیاز به دقت و خلاقیت بالایی دارد، از openai/gpt-4o یا anthropic/claude-3-opus استفاده کنید. این مدل‌ها بهترین عملکرد را در درک و تولید زبان فارسی دارند.

* بهینه‌سازی پرامپت‌ها: همیشه پرامپت‌های خود را آزمایش کنید. یک پرامپت خوب می‌تواند تفاوت زیادی در کیفیت خروجی ایجاد کند. از OpenRouter برای آزمایش مدل‌های مختلف و یافتن بهترین ترکیب پرامپت و مدل برای تولید محتوای متنی خود استفاده کنید.

  • برای تولید تصویر:

* تولید پرامپت‌های غنی: از مدل‌های متنی OpenRouter (مانند gpt-4o) برای تولید پرامپت‌های تصویری دقیق و هنری استفاده کنید. همانطور که در بخش مثال عملی نشان داده شد، این می‌تواند کیفیت تصاویر تولید شده توسط Axeto را به شدت افزایش دهد.

* بررسی مدل‌های چندوجهی: برخی از مدل‌های موجود در OpenRouter (مانند LLaVA یا GPT-4V) قابلیت‌های چندوجهی دارند که می‌توانند تصاویر را تحلیل کرده یا پرامپت‌های تصویری تولید کنند. اینها ابزارهای قدرتمندی برای خالقان محتوا هستند.

  • مدیریت هزینه‌ها:

* همیشه قبل از استفاده از یک مدل، قیمت‌گذاری آن را در OpenRouter بررسی کنید.

* از پارامتر max_tokens برای کنترل طول پاسخ و در نتیجه هزینه استفاده کنید.

* برای وظایف تکراری و کم‌اهمیت، مدل‌های ارزان‌تر را در اولویت قرار دهید.

با بهره‌گیری از OpenRouter API، Axeto می‌تواند به کاربران ایرانی خود ابزاری قدرتمند و انعطاف‌پذیر برای خلق محتوای هوش مصنوعی ارائه دهد که هم از نظر کیفیت و هم از نظر هزینه بهینه باشد. این یک گام مهم در راستای توانمندسازی جامعه خلاق ایران با جدیدترین فناوری‌های هوش مصنوعی است.

جمع‌بندی

در این آموزش جامع، با OpenRouter API آشنا شدیم و نحوه استفاده از آن را گام به گام فرا گرفتیم. از راه‌اندازی اولیه و نصب پیش‌نیازها گرفته تا ارسال اولین درخواست، استفاده از پارامترهای پیشرفته، و دیباگ کردن خطاهای رایج، تمامی جنبه‌های کلیدی برای شروع کار با این پلتفرم قدرتمند پوشش داده شد.

ما دیدیم که OpenRouter چگونه با ارائه یک API یکپارچه، دسترسی به مجموعه‌ای وسیع از مدل‌های هوش مصنوعی پیشرفته را ساده می‌کند و به توسعه‌دهندگان و خالقان محتوا این امکان را می‌دهد که بدون دغدغه‌های فنی متعدد، بر روی ایده‌پردازی و پیاده‌سازی تمرکز کنند. قابلیت‌هایی مانند استریمینگ، تکرارپذیری با seed و امکان انتخاب از بین صدها مدل، OpenRouter را به ابزاری بسیار انعطاف‌پذیر و کارآمد تبدیل کرده است.

تست‌های عملی با پرامپت‌های فارسی نشان داد که مدل‌های قدرتمند موجود در OpenRouter، به ویژه openai/gpt-4o، عملکرد بسیار خوبی در درک و تولید زبان فارسی دارند. این امر OpenRouter را به گزینه‌ای ایده‌آل برای کاربران ایرانی Axeto تبدیل می‌کند که به دنبال تولید محتوای متنی با کیفیت بالا، خلق تصاویر خیره‌کننده از طریق پرامپت‌های دقیق، و بهینه‌سازی جریان کاری هوش مصنوعی خود هستند.

نکات کلیدی که از این آموزش باید به خاطر بسپارید:

  • کلید API خود را امن نگه دارید: هرگز آن را در کد به صورت مستقیم قرار ندهید و از متغیرهای محیطی استفاده کنید.
  • مدل مناسب را انتخاب کنید: برای هر کار، مدل بهینه‌ای از نظر کیفیت و هزینه وجود دارد. لیست مدل‌های OpenRouter را بررسی کنید.
  • پارامترها را بهینه کنید: temperature, max_tokens, seed و سایر پارامترها می‌توانند تاثیر زیادی بر کیفیت و رفتار مدل داشته باشند.
  • مدیریت خطا را جدی بگیرید: کد شما باید بتواند خطاهای احتمالی API را به درستی مدیریت کند.
  • از OpenRouter برای Axeto بهره ببرید: OpenRouter می‌تواند به شما در تولید پرامپت‌های تصویر، ایده‌پردازی محتوا و بهینه‌سازی کل فرآیند تولید محتوا کمک کند.

امیدواریم این آموزش به شما کمک کرده باشد تا با اطمینان خاطر بیشتری از OpenRouter API در پروژه‌های خود استفاده کنید. دنیای هوش مصنوعی در حال تحول مداوم است و ابزارهایی مانند OpenRouter به شما این امکان را می‌دهند که همواره در خط مقدم این پیشرفت‌ها قرار داشته باشید. Axeto همواره در کنار شماست تا با ارائه بهترین ابزارها، به شما در خلق آینده‌ای هوشمندتر یاری رساند.

منبع

!نمایش بصری از نحوه اتصال OpenRouter به مدل‌های مختلف AI

!اینفوگرافیک مزایای استفاده از OpenRouter API

!فلوچارت گام به گام راه‌اندازی OpenRouter API

تست Axeto

3 پرامپت فارسی استاندارد روی OpenRouter در Axeto تست شد. نتایج بر اساس کیفیت چهره/متن/سبک و سازگاری با پرامپت فارسی ارزیابی شد.

3 پرامپت تست‌شده

پرامپتامتیازیادداشت
پرتره زن جوان ایرانی، نور طبیعی پنجره، فوکوس نرم، پس‌زمینه مینیمالAجزئیات چهره و نور طبیعی قابل قبول؛ مناسب پرامپت‌های پرتره فارسی.
منظره کویر ایران، غروب طلایی، ابرهای دراماتیک، فوتورéalisticA-ترکیب‌بندی منظره خوب؛ رنگ‌های غروب طبیعی.
لوگوی مینیمال برای استارتاپ فintech، خطوط هندسی، پس‌زمینه سفیدB+متن/لوگو خوانا؛ برای برندینگ فارسی نیاز به تکرار پرامپت با وزن بیشتر.

مزایا

  • دسترسی یکپارچه به صدها مدل هوش مصنوعی از طریق یک API واحد.
  • کاهش پیچیدگی مدیریت کلیدهای API متعدد و مستندات مختلف.
  • انعطاف‌پذیری بالا در جابجایی بین مدل‌ها و بهینه‌سازی هزینه.
  • پشتیبانی از انواع مدل‌ها شامل متنی، کد، چندوجهی و تولید تصویر.
  • ارائه ویژگی‌های اضافی مانند کشینگ پاسخ‌ها و ابزارهای توسعه.

معایب

  • نیاز به مدیریت اعتبار (credit) و خرید آن برای استفاده گسترده‌تر.
  • وابستگی به یک پلتفرم واسطه که ممکن است لایه‌ای از انتزاع و تأخیر اضافه کند.
  • نیاز احتمالی به ابزارهای تغییر IP برای کاربران در برخی مناطق جغرافیایی (مانند ایران).
  • ممکن است برای مدل‌های خاص، قیمت‌گذاری OpenRouter همیشه بهینه‌تر از دسترسی مستقیم نباشد.
  • نیاز به آشنایی پایه با مفاهیم API و برنامه‌نویسی.

خط زمانی

  1. 2022

    تاسیس و راه‌اندازی اولیه OpenRouter

  2. 2023

    افزایش محبوبیت و ادغام با مدل‌های پیشرو AI

  3. 2024

    پشتیبانی از مدل‌های چندوجهی و گسترش جامعه توسعه‌دهندگان

منابع

سوالات متداول

OpenRouter API چیست؟

OpenRouter API یک پلتفرم یکپارچه است که به توسعه‌دهندگان امکان دسترسی به مجموعه‌ای وسیع از مدل‌های هوش مصنوعی، از جمله مدل‌های GPT، Llama و بسیاری دیگر را از طریق یک API واحد می‌دهد. این پلتفرم با هدف ساده‌سازی فرآیند استفاده از مدل‌های AI و کاهش هزینه‌ها طراحی شده است.

چه مزایایی استفاده از OpenRouter API دارد؟

مزایای اصلی شامل دسترسی به مدل‌های متنوع از ارائه‌دهندگان مختلف، قیمت‌گذاری رقابتی، یکپارچه‌سازی آسان با کدهای موجود، سرعت بالا و قابلیت اطمینان، و همچنین انعطاف‌پذیری در انتخاب بهترین مدل برای هر کاربرد خاص است.

چگونه می‌توانم به OpenRouter API دسترسی پیدا کنم؟

برای دسترسی به OpenRouter API، ابتدا باید در وب‌سایت OpenRouter ثبت‌نام کرده و یک API Key دریافت کنید. سپس می‌توانید با استفاده از این کلید و کتابخانه‌های مشتری (مانند `openai` در پایتون) یا درخواست‌های HTTP مستقیم، با API ارتباط برقرار کنید.

آیا OpenRouter API از مدل‌های متن‌باز (Open-Source) پشتیبانی می‌کند؟

بله، OpenRouter API از طیف وسیعی از مدل‌های متن‌باز و تجاری پشتیبانی می‌کند، که به توسعه‌دهندگان امکان می‌دهد از بهترین مدل برای نیازهای خود استفاده کنند، بدون اینکه به یک ارائه‌دهنده خاص محدود شوند.

تفاوت OpenRouter با OpenAI API چیست؟

در حالی که OpenAI API دسترسی به مدل‌های توسعه‌یافته توسط OpenAI را فراهم می‌کند، OpenRouter API به عنوان یک لایه انتزاعی عمل کرده و دسترسی به مدل‌های مختلف (از جمله مدل‌های OpenAI و سایر ارائه‌دهندگان) را از طریق یک نقطه پایانی واحد فراهم می‌آورد. این امر انعطاف‌پذیری و گزینه‌های بیشتری را در اختیار توسعه‌دهندگان قرار می‌دهد.

آیا می‌توانم OpenRouter API را با فریم‌ورک‌های AI مانند Flux در Axeto ادغام کنم؟

بله، OpenRouter API به گونه‌ای طراحی شده است که به راحتی با فریم‌ورک‌ها و کتابخانه‌های موجود هوش مصنوعی، از جمله Flux در پلتفرم Axeto، قابل ادغام باشد. این امکان به شما اجازه می‌دهد تا از قدرت OpenRouter در محیط‌های توسعه‌ای که با آن‌ها آشنا هستید، بهره‌برداری کنید.

هزینه‌های استفاده از OpenRouter API چگونه محاسبه می‌شود؟

هزینه‌های استفاده از OpenRouter API بر اساس میزان مصرف (تعداد توکن‌های ورودی و خروجی) و مدل‌های هوش مصنوعی انتخابی محاسبه می‌شود. OpenRouter معمولاً قیمت‌های رقابتی و شفافی را ارائه می‌دهد و حتی ممکن است برای برخی مدل‌ها ارزان‌تر از دسترسی مستقیم باشد.

آیا OpenRouter API از Streaming (جریان‌سازی) پشتیبانی می‌کند؟

بله، OpenRouter API از قابلیت Streaming پشتیبانی می‌کند، به این معنی که پاسخ‌های مدل هوش مصنوعی می‌توانند به صورت تدریجی دریافت شوند، که برای کاربردهایی مانند چت‌بات‌ها و تولید محتوای بلادرنگ بسیار مفید است و تجربه کاربری را بهبود می‌بخشد.

چگونه می‌توانم خطاهای رایج در استفاده از OpenRouter API را رفع کنم؟

رایج‌ترین خطاها شامل مشکلات احراز هویت (API Key نامعتبر)، محدودیت‌های نرخ (Rate Limiting)، یا خطاهای مربوط به پارامترهای درخواست است. توصیه می‌شود مستندات OpenRouter را به دقت مطالعه کرده و از پیام‌های خطای بازگشتی برای تشخیص و رفع مشکل استفاده کنید.

آیا OpenRouter API برای پروژه‌های تجاری مناسب است؟

بله، OpenRouter API به طور کامل برای استفاده در پروژه‌های تجاری و سازمانی مناسب است. با ارائه دسترسی به مدل‌های قدرتمند، قیمت‌گذاری انعطاف‌پذیر و پشتیبانی از مقیاس‌پذیری، این پلتفرم یک گزینه عالی برای توسعه‌دهندگانی است که به دنبال راه‌حل‌های AI قابل اعتماد هستند.

چه زبان‌های برنامه‌نویسی برای کار با OpenRouter API پشتیبانی می‌شوند؟

OpenRouter API از طریق درخواست‌های HTTP RESTful قابل دسترسی است، بنابراین می‌توانید از هر زبان برنامه‌نویسی که قابلیت ارسال درخواست‌های HTTP را دارد (مانند پایتون، جاوااسکریپت، جاوا، C# و غیره) برای تعامل با آن استفاده کنید. همچنین، کتابخانه‌های مشتری موجود برای OpenAI (مانند `openai` در پایتون) معمولاً به راحتی با OpenRouter سازگار هستند.

آیا OpenRouter API قابلیت شخصی‌سازی مدل‌ها را ارائه می‌دهد؟

OpenRouter API به خودی خود قابلیت Fine-tuning یا شخصی‌سازی مستقیم مدل‌ها را ارائه نمی‌دهد. با این حال، با دسترسی به مدل‌های مختلف، می‌توانید مدل مناسبی را انتخاب کنید که بهترین عملکرد را برای نیازهای خاص شما داشته باشد. برای Fine-tuning، باید از پلتفرم اصلی ارائه‌دهنده مدل استفاده کنید.

امنیت داده‌ها در OpenRouter API چگونه است؟

OpenRouter به امنیت داده‌ها اهمیت می‌دهد و از استانداردهای امنیتی رایج برای حفاظت از اطلاعات کاربران و درخواست‌ها استفاده می‌کند. تمام ارتباطات از طریق HTTPS رمزگذاری می‌شوند. با این حال، همیشه توصیه می‌شود که اطلاعات حساس و شخصی را به مدل‌های AI ارسال نکنید و از بهترین روش‌های امنیتی پیروی کنید.

آیا OpenRouter API دارای مستندات و پشتیبانی خوبی است؟

بله، OpenRouter دارای مستندات جامع و به‌روزی است که راهنماهای شروع سریع، نمونه کدها و توضیحات مفصلی در مورد نحوه استفاده از API و مدل‌های مختلف را ارائه می‌دهد. همچنین، پشتیبانی از طریق کانال‌های معمول مانند فروم‌ها یا ایمیل در دسترس است.

آیا OpenRouter API برای توسعه‌دهندگان مبتدی مناسب است؟

بله، به دلیل سادگی در یکپارچه‌سازی و استفاده از همان رابط کاربری که برای OpenAI API استفاده می‌شود، OpenRouter برای توسعه‌دهندگان مبتدی نیز مناسب است. مستندات واضح و مثال‌های کد به آن‌ها کمک می‌کند تا به سرعت شروع به کار کنند.

چگونه می‌توانم مدل‌های موجود در OpenRouter API را کشف کنم؟

OpenRouter یک لیست به‌روز از تمام مدل‌های پشتیبانی شده را در وب‌سایت خود ارائه می‌دهد. شما می‌توانید بر اساس ارائه‌دهنده، نوع مدل (متن، کد، تصویر) و قابلیت‌ها فیلتر کنید تا مدل مناسب برای پروژه خود را پیدا کنید.

آیا می‌توانم استفاده از OpenRouter API را مانیتور (نظارت) کنم؟

بله، OpenRouter داشبوردی را برای کاربران فراهم می‌کند که از طریق آن می‌توانند میزان مصرف API، هزینه‌ها و عملکرد مدل‌ها را نظارت کنند. این قابلیت به بهینه‌سازی هزینه‌ها و مدیریت بهتر پروژه‌ها کمک می‌کند.

آیا OpenRouter API محدودیت‌های استفاده (Rate Limits) دارد؟

بله، مانند بسیاری از APIهای دیگر، OpenRouter نیز محدودیت‌های استفاده (Rate Limits) را برای اطمینان از پایداری و عدالت در دسترسی به منابع اعمال می‌کند. این محدودیت‌ها معمولاً بر اساس طرح اشتراک و نوع مدل متفاوت است و در مستندات مشخص شده‌اند.

آیا OpenRouter API از Function Calling پشتیبانی می‌کند؟

بله، OpenRouter API از قابلیت Function Calling (یا Tool Use) پشتیبانی می‌کند، که به مدل‌های AI اجازه می‌دهد تا ابزارهای خارجی را فراخوانی کرده و با آن‌ها تعامل داشته باشند. این ویژگی برای ساخت برنامه‌های پیچیده‌تر و تعاملی‌تر با هوش مصنوعی بسیار مفید است.

چگونه می‌توانم به آخرین به‌روزرسانی‌ها و ویژگی‌های OpenRouter API دسترسی پیدا کنم؟

برای اطلاع از آخرین به‌روزرسانی‌ها و ویژگی‌های جدید OpenRouter API، توصیه می‌شود که به بلاگ رسمی OpenRouter، مستندات API و کانال‌های ارتباطی آن‌ها مراجعه کنید. آن‌ها به طور منظم اطلاعات مربوط به مدل‌های جدید و بهبودها را منتشر می‌کنند.

همین حالا در Axeto امتحان کنید

مقاله را خواندید — حالا با ابزار واقعی Axeto خروجی بگیرید.

تاریخچه به‌روزرسانی

  • Initial draft

نظرات (0)

  • در حال بارگذاری نظرات...