Multimodal — نمای کلی

مدل‌های آشا نه فقط متن، بلکه تصویر، سند (PDF)، صدا و ویدئو را هم می‌فهمند؛ و برخی–مانند مدل‌های گوگل و استبل‌دیفیوژن–تصویر و ویدئو تولید می‌کنند. این صفحه نمای کلی قابلیت‌های چندرسانه‌ای است؛ جزئیات هر حالت را در صفحات اختصاصی آن ببینید.

هر آنچه در OpenRouter به‌عنوان «حالت‌های چندرسانه‌ای» سراغ دارید، در آشا با همین ساختار در دسترس است: image_url برای تصویر، file برای PDF و ویدئو، و input_audio برای صوت ورودی؛ همگی داخل پیام‌های /v1/chat/completions. تولید تصویر و ویدئو و گفتار هم سرویس‌های مستقل خودشان را دارند.

قابلیت‌ها در یک نگاه

قابلیتشرحراهنما
فهم تصویر تحلیل محتوای تصویر؛ از تشخیص اشیا تا خواندن متن داخل عکس Image understanding
تولید تصویر ساخت تصویر از متن با مدل‌هایی مانند Flux و Stable Diffusion Image generation
درک ویدئو تحلیل ویدئو از طریق پیوند (URL) بدون دانلود فایل Video understanding
تولید ویدئو ساخت ویدئو از متن با مدل‌های اختصاصی ویدئو Video generation
PDF و سند پرس‌وجو روی متن کتاب‌ها و مقالات PDF با همهٔ مدل‌های multimodal PDFs
ورودی صوتی پرس‌وجو روی فایل صوتی با مدل‌های پشتیبانی‌کننده Audio
تبدیل گفتار به متن رونویسی و ترجمهٔ ضبط‌شده با /v1/audio/transcriptions Speech-to-text
تبدیل متن به گفتار تولید صدا از متن با /v1/audio/speech Text-to-speech

شروع با چندرسانه‌ای

ارسال یک تصویر به مدل فقط یک کلید دیگر در داخل پیام افزوده می‌شود. همهٔ ورودی‌های چندرسانه‌ای به‌صورت فهرستی از اشیای content داخل پیام کاربر ارسال می‌شوند؛ محتوای متنی (type: "text") را می‌توانید با تصویر قاطی کنید یا حتی فقط تصویر بفرستید.

انواع محتوای پشتیبانی‌شده:

نوع ورودیفرمتمثال کاربرد
text رشته متنی متن سؤال یا دستور
image_url URL یا Data URI (base64) فهم تصویر، تحلیل عکس
file URL فایل (PDF / ویدئو) پرس‌وجو روی PDF، تحلیل ویدئو
input_audio base64 یا Data URI (audio/*) پرس‌وجو روی فایل صوتی

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

یک درخواست نمونهٔ «فهم تصویر» به /v1/chat/completions در چهار زبان. تنها تفاوت با درخواستِ متنی، ساختار آرایه‌ای محتوای پیام است: هر عنصر محتوا type و دادهٔ متناظر خودش را دارد.

import os

from openai import OpenAI

client = OpenAI(
    base_url="https://app.asha-ai.ir/v1/",
    api_key=os.environ["ASHA_API_KEY"],
)

response = client.chat.completions.create(
    model="~google/gemini-flash-latest",  # any multimodal model from the catalogue
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://asha-ai.ir/assets/architecture.jpg",
                        "detail": "high",
                    },
                },
                {"type": "text", "text": "What is shown in this image?"},
            ],
        }
    ],
)

print(response.choices[0].message.content)
package main

import (
	"context"
	"fmt"
	"os"

	openai "github.com/sashabaranov/go-openai"
)

func main() {
	ai := openai.NewClientWithConfig(openai.DefaultConfig(os.Getenv("ASHA_API_KEY")))
	ai.BaseURL = "https://app.asha-ai.ir/v1"

	reply, err := ai.CreateChatCompletion(context.Background(), openai.ChatCompletionRequest{
		Model: "~google/gemini-flash-latest",
		Messages: []openai.ChatCompletionMessage{
			{
				Role: openai.ChatMessageRoleUser,
				MultiContent: []openai.ChatMessagePart{
					{
						Type: openai.ChatMessagePartTypeImageURL,
						ImageURL: &openai.ChatMessageImageURL{
							URL:    "https://asha-ai.ir/assets/architecture.jpg",
							Detail: openai.ImageURLDetailHigh,
						},
					},
					{Type: openai.ChatMessagePartTypeText, Text: "What is shown in this image?"},
				},
			},
		},
	})
	if err != nil {
		panic(err)
	}

	fmt.Println(reply.Choices[0].Message.Content)
}
import OpenAI from "openai";

const openai = new OpenAI({
  baseURL: "https://app.asha-ai.ir/v1/",
  apiKey: process.env.ASHA_API_KEY!,
});

const response = await openai.chat.completions.create({
  model: "~google/gemini-flash-latest",
  messages: [
    {
      role: "user",
      content: [
        {
          type: "image_url",
          image_url: {
            url: "https://asha-ai.ir/assets/architecture.jpg",
            detail: "high",
          },
        },
        { type: "text", text: "What is shown in this image?" },
      ],
    },
  ],
});

console.log(response.choices[0].message.content);
curl https://app.asha-ai.ir/v1/chat/completions 
  -H "Authorization: Bearer $ASHA_API_KEY" 
  -H "Content-Type: application/json" 
  -d '{
    "model": "~google/gemini-flash-latest",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "image_url",
            "image_url": {
              "url": "https://asha-ai.ir/assets/architecture.jpg",
              "detail": "high"
            }
          },
          { "type": "text", "text": "What is shown in this image?" }
        ]
      }
    ]
  }'

URL یا Base64؟

مدل‌های مختلف، فرمت‌های متفاوتی را می‌پذیرند؛ آشا ورودیِ درست را بسته به مدل به ارائه‌دهنده منتقل می‌کند. اما برای خودتان این قاعدهٔ کلی را به‌یاد بسپارید:

  • تصویر: بیشتر مدل‌ها هم URL و هم base64 را می‌پذیرند. برای پایین‌آوردن حجم درخواست، URL را ترجیح بدهید و detail را روی "low" بگذارید.
  • PDF و ویدئو: فقط با URL. فایل باید به‌صورت عمومی قابل دریافت باشد (CDN یا سرویس میزبانی فایل)؛ دادهٔ <file> با base64 برای این دو نوع پشتیبانی نمی‌شود.
  • صوت: با base64 یا Data URI در input_audio. هیچ کدگذاری دیگری لازم نیست و format آن اختیاری است.

سازگاری مدل و قیمت‌گذاری

اینکه کدام مدل کدام حالت را پشتیبانی می‌کند، در کاتالوگ مدل‌ها مشخص است: هر مدل فیلدِ input_modalities و output_modalities خودش را دارد که حالت‌های پشتیبانی‌شده (مثل text و image) را فهرست می‌کند. قبل از ارسال ورودی چندرسانه‌ای، از پشتیبانی مدل مطمئن شوید.

قیمت‌گذاری ویژن: تصاویر بر اساس تعداد و ابعاد «تیل» (tile) — که با detail تعیین می‌شود — صورت‌حساب می‌شوند؛ ویدئو بر اساس فریم، PDF بر اساس ناحیهٔ استخراج‌شده، و صوت بر اساس مدت‌زمان. قیمتِ هر مدل در صفحهٔ همان مدل و در لیست مدل‌ها به تومان نمایش داده می‌شود. هزینه همیشه دقیق و از روی مصرفِ گزارش‌شدهٔ ارائه‌دهنده محاسبه می‌شود، نه برآورد.

نکته: تمام ورودی‌های چندرسانه‌ای — حتی یک تصویر کوچک — به‌صورت توکن مصرف می‌شوند و در هر درخواست به‌همراه متنِ پیام از حساب کیف پول کسر می‌شوند. تیزر تصویر در درخواست (thumbnail) شما را ارزان‌تر نمی‌کند؛ مگر اینکه خودتان تصویر را قبل از ارسال کوچک کنید.

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

آیا می‌توانم چند نوع ورودی را با هم بفرستم؟

بله. یک پیام می‌تواند ترکیبی از متن، چند تصویر، PDF و صوت باشد؛ به‌شرط آن‌که مدلِ انتخابی شما همهٔ آن حالت‌ها را پشتیبانی کند.

هزینهٔ ورودی تصویری چگونه محاسبه می‌شود؟

بر اساس تعداد «تیل» تصویر که به‌اندازهٔ رزولوشن و گزینهٔ detail بستگی دارد؛ قیمت هر مدل در صفحهٔ همان مدل مشخص است.

آیا برای تحلیل ویدئو باید فایل را آپلود کنم؟

خیر. کافی است URL عمومی ویدئو را بفرستید؛ مدل آن را دانلود و تحلیل می‌کند.

خروجی تولید ویدئو از کجا می‌آید؟

تولید ویدئو ناهمگام است اما آشا این کار را ساده می‌کند: درخواست را به POST /v1/videos می‌فرستید و آشا تا رسیدن به وضعیت نهایی پیگیری می‌کند و همان پاسخ، کارِ تکمیل‌شده را با آدرس‌های دانلود (unsigned_urls) برمی‌گرداند. جزئیات در «Video generation».

تبدیل گفتار به متن و متن به گفتار چطور است؟

با دو endpoint اختصاصی: رونویسی/ترجمه روی /v1/audio/transcriptions و تولید صوت روی /v1/audio/speech — سازگار با OpenAI.