Skip to content
تم إنشاء هذه الصفحة وترجمتها بمساعدة الذكاء الاصطناعي. إذا لاحظت أي أخطاء، لا تتردد في المساهمة في تحسينها. تعديل على GitHub

التعامل مع المحتوى متعدد الوسائط

يدعم PRX المحتوى متعدد الوسائط -- الصور والصوت والفيديو -- عبر قنواته ومزوّدي LLM. يتعامل نظام الوسائط المتعددة مع اكتشاف نوع المحتوى، والتحويل بين الصيغ، وفرض قيود الحجم، والتفاوض على القدرات بين القنوات والمزوّدين.

نظرة عامة

عندما يرسل المستخدم مرفق وسائط (صورة، رسالة صوتية، مستند) عبر قناة، فإن خط أنابيب الوسائط المتعددة:

  1. يكتشف نوع المحتوى باستخدام bytes السحرية وامتداد الملف
  2. يتحقق من المحتوى مقابل قيود الحجم والصيغة
  3. يحوّل المحتوى إذا كان المزوّد الهدف لا يدعم الصيغة المصدر
  4. يرسل المحتوى إلى مزوّد LLM كجزء من سياق المحادثة
  5. يتعامل مع الوسائط في الاستجابة إذا كان المزوّد يولّد صورًا أو صوتًا
Channel Input                    Provider Output
  │                                  │
  ▼                                  ▼
┌──────────────┐              ┌──────────────┐
│ Content Type │              │ Response     │
│ Detection    │              │ Media        │
└──────┬───────┘              └──────┬───────┘
       │                             │
       ▼                             ▼
┌──────────────┐              ┌──────────────┐
│ Validation   │              │ Transcoding  │
│ & Limits     │              │ (if needed)  │
└──────┬───────┘              └──────┬───────┘
       │                             │
       ▼                             ▼
┌──────────────┐              ┌──────────────┐
│ Transcoding  │              │ Channel      │
│ (if needed)  │              │ Delivery     │
└──────┬───────┘              └──────────────┘


┌──────────────┐
│ Provider     │
│ Dispatch     │
└──────────────┘

أنواع المحتوى المدعومة

الصور

FormatDetectionSend to ProviderReceive from Provider
JPEGMagic bytes FF D8 FFYesYes
PNGMagic bytes 89 50 4E 47YesYes
GIFMagic bytes 47 49 46Yes (first frame)No
WebPRIFF header + WEBPYesYes
BMPMagic bytes 42 4DTranscoded to PNGNo
TIFFMagic bytes 49 49 or 4D 4DTranscoded to PNGNo
SVGXML detectionRasterized to PNGNo

الصوت

FormatDetectionTranscriptionProvider Input
OGG/OpusOGG headerYes (via STT)Transcribed text
MP3ID3/sync headerYes (via STT)Transcribed text
WAVRIFF + WAVEYes (via STT)Transcribed text
M4A/AACftyp boxYes (via STT)Transcribed text
WebMEBML headerYes (via STT)Transcribed text

الفيديو

FormatDetectionProcessing
MP4ftyp boxExtract keyframes + audio track
WebMEBML headerExtract keyframes + audio track
MOVftyp boxExtract keyframes + audio track

يتم تفكيك ملفات الفيديو إلى صور keyframes ومسار صوتي. تُرسل keyframes كصور ويتم تفريغ الصوت إلى نص.

اكتشاف نوع المحتوى

يستخدم الاكتشاف أسلوبًا من مرحلتين:

  1. Magic bytes -- يتم فحص أول 16 بايت من الملف مقابل تواقيع معروفة
  2. File extension -- إذا كانت bytes السحرية غير حاسمة، يُستخدم امتداد الملف كخيار احتياطي
  3. MIME type header -- للمحتوى المستلَم عبر HTTP، يتم الرجوع إلى ترويسة Content-Type

تحدد نتيجة الاكتشاف خط المعالجة الذي سيتعامل مع المحتوى.

الإعدادات

toml
[multimodal]
enabled = true

[multimodal.images]
max_size_bytes = 20_971_520      # 20 MB
max_resolution = "4096x4096"     # maximum width x height
auto_resize = true               # resize images exceeding max_resolution
resize_quality = 85              # JPEG quality for resized images (1-100)
strip_exif = true                # remove EXIF metadata for privacy

[multimodal.audio]
max_size_bytes = 26_214_400      # 25 MB
max_duration_secs = 300          # 5 minutes
stt_provider = "whisper"         # "whisper", "deepgram", or "provider" (use LLM provider's STT)
stt_model = "whisper-1"
stt_language = "auto"            # "auto" for language detection, or ISO 639-1 code

[multimodal.video]
max_size_bytes = 104_857_600     # 100 MB
max_duration_secs = 120          # 2 minutes
keyframe_interval_secs = 5       # extract one keyframe every 5 seconds
max_keyframes = 20               # maximum keyframes to extract
extract_audio = true             # transcribe audio track

مرجع الإعدادات

الصور

FieldTypeDefaultDescription
max_size_bytesu6420971520Maximum image file size (20 MB)
max_resolutionString"4096x4096"Maximum image dimensions (WxH)
auto_resizebooltrueAutomatically resize oversized images
resize_qualityu885JPEG quality for resized images (1--100)
strip_exifbooltrueRemove EXIF metadata from images

الصوت

FieldTypeDefaultDescription
max_size_bytesu6426214400Maximum audio file size (25 MB)
max_duration_secsu64300Maximum audio duration (5 minutes)
stt_providerString"whisper"Speech-to-text provider
stt_modelString"whisper-1"STT model name
stt_languageString"auto"Language hint for transcription

الفيديو

FieldTypeDefaultDescription
max_size_bytesu64104857600Maximum video file size (100 MB)
max_duration_secsu64120Maximum video duration (2 minutes)
keyframe_interval_secsu645Seconds between extracted keyframes
max_keyframesusize20Maximum number of keyframes to extract
extract_audiobooltrueTranscribe the video's audio track

قدرات المزوّدين

لا تدعم كل مزوّدات LLM أنواع الوسائط نفسها. يقوم PRX بالتفاوض على القدرات تلقائيًا:

ProviderImage InputImage OutputAudio InputNative Multimodal
Anthropic (Claude)YesNoNo (transcribe first)Yes (vision)
OpenAI (GPT-4o)YesYes (DALL-E)Yes (Whisper)Yes
Google (Gemini)YesYes (Imagen)YesYes
Ollama (LLaVA)YesNoNoYes (vision)
AWS BedrockVaries by modelVariesNoVaries

عندما لا يدعم مزوّد نوع وسائط بشكل أصلي، يطبّق PRX معالجة احتياطية:

  • Image not supported -- يتم وصف الصورة باستخدام نموذج يدعم الرؤية، ثم يُرسل الوصف كنص
  • Audio not supported -- يتم تفريغ الصوت باستخدام مزوّد STT المُعد، ثم يُرسل النص المفرغ
  • Video not supported -- تُرسل keyframes وتفريغ الصوت كرسالة مركبة

حدود الوسائط في القنوات

كل قناة تفرض قيودها الخاصة على حجم الملفات والصيغ:

ChannelMax UploadMax DownloadSupported Formats
Telegram50 MB20 MBImages, audio, video, documents
Discord25 MB (free)25 MBImages, audio, video, documents
WhatsApp16 MB (media)16 MBJPEG, PNG, MP3, MP4, PDF
QQ20 MB20 MBImages, audio, documents
DingTalk20 MB20 MBImages, audio, documents
Lark25 MB25 MBImages, audio, video, documents
MatrixHomeserver dependentHomeserver dependentAll common formats
Email25 MB (typical)25 MBAll via MIME attachments
CLIFilesystem limitFilesystem limitAll formats

يفرض PRX حدود القناة قبل محاولة إرسال الاستجابة. إذا تجاوزت صورة أو ملف مولَّد حد القناة، يتم ضغطه أو تقديم رابط تنزيل بدلًا من ذلك.

خط أنابيب التحويل بين الصيغ

عند الحاجة إلى تحويل الصيغة، يستخدم PRX خط الأنابيب التالي:

  1. Image transcoding -- يتم التعامل معه بواسطة crate image (Rust خالص بلا تبعيات خارجية)
  2. Audio transcoding -- يتم التعامل معه بواسطة FFmpeg إذا كان مثبتًا، وإلا يرجع إلى مفككات أصلية للصيغ الشائعة
  3. Video keyframe extraction -- يتطلب FFmpeg

اكتشاف FFmpeg

يكتشف PRX وجود FFmpeg تلقائيًا عند بدء التشغيل:

bash
prx doctor multimodal

Output:

Multimodal Support:
  Images: OK (native)
  Audio transcoding: OK (ffmpeg 6.1 detected)
  Video processing: OK (ffmpeg 6.1 detected)
  STT provider: OK (whisper-1 via OpenAI)

إذا لم يكن FFmpeg مثبتًا، فسيكون تحويل الصوت ومعالجة الفيديو محدودين بالصيغ المدعومة أصلاً.

القيود

  • تتطلب معالجة الفيديو تثبيت FFmpeg على النظام
  • قد تزيد ملفات الوسائط الكبيرة استهلاك رموز LLM بشكل ملحوظ (خصوصًا عند تعدد keyframes)
  • بعض المزوّدين يفرضون رسومًا إضافية على استدعاءات واجهات الرؤية/متعددة الوسائط
  • البث الصوتي الآني (محادثة صوتية مباشرة) غير مدعوم بعد
  • الصور المولدة من المزوّدين (DALL-E, Imagen) تخضع لسياسة المحتوى الخاصة بالمزوّد
  • يستخدم تحويل SVG إلى صور نقطية مُصيّرًا أساسيًا؛ وقد لا تُعرض ملفات SVG المعقدة بدقة

صفحات ذات صلة

Released under the Apache-2.0 License.