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 بر اساس ناحیهٔ استخراجشده، و صوت بر اساس مدتزمان. قیمتِ هر مدل در صفحهٔ همان مدل و در
لیست مدلها به تومان نمایش داده میشود. هزینه همیشه دقیق و از روی
مصرفِ گزارششدهٔ ارائهدهنده محاسبه میشود، نه برآورد.
سؤالات متداول
آیا میتوانم چند نوع ورودی را با هم بفرستم؟
بله. یک پیام میتواند ترکیبی از متن، چند تصویر، PDF و صوت باشد؛ بهشرط آنکه مدلِ انتخابی شما همهٔ آن حالتها را پشتیبانی کند.
هزینهٔ ورودی تصویری چگونه محاسبه میشود؟
بر اساس تعداد «تیل» تصویر که بهاندازهٔ رزولوشن و گزینهٔ detail بستگی دارد؛ قیمت هر مدل در صفحهٔ همان مدل مشخص است.
آیا برای تحلیل ویدئو باید فایل را آپلود کنم؟
خیر. کافی است URL عمومی ویدئو را بفرستید؛ مدل آن را دانلود و تحلیل میکند.
خروجی تولید ویدئو از کجا میآید؟
تولید ویدئو ناهمگام است اما آشا این کار را ساده میکند: درخواست را به POST /v1/videos میفرستید و آشا تا رسیدن به وضعیت نهایی پیگیری میکند و همان پاسخ، کارِ تکمیلشده را با آدرسهای دانلود (unsigned_urls) برمیگرداند. جزئیات در «Video generation».
تبدیل گفتار به متن و متن به گفتار چطور است؟
با دو endpoint اختصاصی: رونویسی/ترجمه روی /v1/audio/transcriptions و تولید صوت روی /v1/audio/speech — سازگار با OpenAI.