Skip to content
Diese Seite wurde mit KI-Unterstützung erstellt und übersetzt. Falls Ihnen Ungenauigkeiten auffallen, helfen Sie gerne bei der Verbesserung. Auf GitHub bearbeiten

Multimodale Inhaltsverarbeitung

PRX unterstützt multimodale Inhalte -- Bilder, Audio und Video -- über seine Kanäle und LLM-Anbieter hinweg. Das multimodale Subsystem behandelt Inhaltstyperkennung, Formattranskodierung, Größenerzwingung und Fähigkeitsabstimmung zwischen Kanälen und Anbietern.

Überblick

Wenn ein Benutzer einen Medienanhang (Foto, Sprachnachricht, Dokument) über einen Kanal sendet, führt die multimodale Pipeline folgende Schritte aus:

  1. Erkennung des Inhaltstyps durch Magic Bytes und Dateierweiterung
  2. Validierung des Inhalts gegen Größen- und Formatbeschränkungen
  3. Transkodierung des Inhalts, wenn der Zielanbieter das Quellformat nicht unterstützt
  4. Weiterleitung des Inhalts an den LLM-Anbieter als Teil des Gesprächskontexts
  5. Verarbeitung von Medien in der Antwort, wenn der Anbieter Bilder oder Audio generiert
Channel Input                    Provider Output
  │                                  │
  ▼                                  ▼
┌──────────────┐              ┌──────────────┐
│ Content Type │              │ Response     │
│ Detection    │              │ Media        │
└──────┬───────┘              └──────┬───────┘
       │                             │
       ▼                             ▼
┌──────────────┐              ┌──────────────┐
│ Validation   │              │ Transcoding  │
│ & Limits     │              │ (if needed)  │
└──────┬───────┘              └──────┬───────┘
       │                             │
       ▼                             ▼
┌──────────────┐              ┌──────────────┐
│ Transcoding  │              │ Channel      │
│ (if needed)  │              │ Delivery     │
└──────┬───────┘              └──────────────┘


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

Unterstützte Inhaltstypen

Bilder

FormatErkennungAn Anbieter sendenVom Anbieter empfangen
JPEGMagic Bytes FF D8 FFJaJa
PNGMagic Bytes 89 50 4E 47JaJa
GIFMagic Bytes 47 49 46Ja (erstes Bild)Nein
WebPRIFF-Header + WEBPJaJa
BMPMagic Bytes 42 4DTranskodiert zu PNGNein
TIFFMagic Bytes 49 49 oder 4D 4DTranskodiert zu PNGNein
SVGXML-ErkennungGerastert zu PNGNein

Audio

FormatErkennungTranskriptionAnbietereingabe
OGG/OpusOGG-HeaderJa (über STT)Transkribierter Text
MP3ID3/Sync-HeaderJa (über STT)Transkribierter Text
WAVRIFF + WAVEJa (über STT)Transkribierter Text
M4A/AACftyp-BoxJa (über STT)Transkribierter Text
WebMEBML-HeaderJa (über STT)Transkribierter Text

Video

FormatErkennungVerarbeitung
MP4ftyp-BoxSchlüsselbilder + Audiospur extrahieren
WebMEBML-HeaderSchlüsselbilder + Audiospur extrahieren
MOVftyp-BoxSchlüsselbilder + Audiospur extrahieren

Videodateien werden in Schlüsselbilder und eine Audiospur zerlegt. Die Schlüsselbilder werden als Bilder gesendet und das Audio wird transkribiert.

Inhaltstyperkennung

Die Erkennung verwendet einen Zwei-Phasen-Ansatz:

  1. Magic Bytes -- die ersten 16 Bytes der Datei werden gegen bekannte Signaturen geprüft
  2. Dateierweiterung -- wenn Magic Bytes nicht eindeutig sind, wird die Dateierweiterung als Fallback verwendet
  3. MIME-Typ-Header -- bei über HTTP empfangenen Inhalten wird der Content-Type-Header konsultiert

Das Erkennungsergebnis bestimmt, welche Verarbeitungspipeline den Inhalt behandelt.

Konfiguration

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

Konfigurationsreferenz

Bilder

FeldTypStandardBeschreibung
max_size_bytesu6420971520Maximale Bilddateigröße (20 MB)
max_resolutionString"4096x4096"Maximale Bildabmessungen (BxH)
auto_resizebooltrueÜbergroße Bilder automatisch skalieren
resize_qualityu885JPEG-Qualität für skalierte Bilder (1--100)
strip_exifbooltrueEXIF-Metadaten aus Bildern entfernen

Audio

FeldTypStandardBeschreibung
max_size_bytesu6426214400Maximale Audiodateigröße (25 MB)
max_duration_secsu64300Maximale Audiodauer (5 Minuten)
stt_providerString"whisper"Sprache-zu-Text-Anbieter
stt_modelString"whisper-1"STT-Modellname
stt_languageString"auto"Sprachhinweis für die Transkription

Video

FeldTypStandardBeschreibung
max_size_bytesu64104857600Maximale Videodateigröße (100 MB)
max_duration_secsu64120Maximale Videodauer (2 Minuten)
keyframe_interval_secsu645Sekunden zwischen extrahierten Schlüsselbildern
max_keyframesusize20Maximale Anzahl zu extrahierender Schlüsselbilder
extract_audiobooltrueAudiospur des Videos transkribieren

Anbieterfähigkeiten

Nicht alle LLM-Anbieter unterstützen die gleichen Medientypen. PRX handelt die Fähigkeiten automatisch aus:

AnbieterBildeingabeBildausgabeAudioeingabeNatives Multimodal
Anthropic (Claude)JaNeinNein (zuerst transkribieren)Ja (Vision)
OpenAI (GPT-4o)JaJa (DALL-E)Ja (Whisper)Ja
Google (Gemini)JaJa (Imagen)JaJa
Ollama (LLaVA)JaNeinNeinJa (Vision)
AWS BedrockVariiert je nach ModellVariiertNeinVariiert

Wenn ein Anbieter einen Medientyp nicht nativ unterstützt, wendet PRX eine Fallback-Verarbeitung an:

  • Bild nicht unterstützt -- Bild wird mit einem visionsfähigen Modell beschrieben, und die Beschreibung wird als Text gesendet
  • Audio nicht unterstützt -- Audio wird mit dem konfigurierten STT-Anbieter transkribiert, und das Transkript wird als Text gesendet
  • Video nicht unterstützt -- Schlüsselbilder und Audio-Transkript werden als zusammengesetzte Nachricht gesendet

Kanal-Medienlimits

Jeder Kanal legt eigene Dateigrößen- und Formatbeschränkungen fest:

KanalMax UploadMax DownloadUnterstützte Formate
Telegram50 MB20 MBBilder, Audio, Video, Dokumente
Discord25 MB (kostenlos)25 MBBilder, Audio, Video, Dokumente
WhatsApp16 MB (Medien)16 MBJPEG, PNG, MP3, MP4, PDF
QQ20 MB20 MBBilder, Audio, Dokumente
DingTalk20 MB20 MBBilder, Audio, Dokumente
Lark25 MB25 MBBilder, Audio, Video, Dokumente
MatrixAbhängig vom HomeserverAbhängig vom HomeserverAlle gängigen Formate
E-Mail25 MB (typisch)25 MBAlle über MIME-Anhänge
CLIDateisystem-LimitDateisystem-LimitAlle Formate

PRX erzwingt die Limits des Kanals, bevor versucht wird, eine Antwort zu senden. Wenn ein generiertes Bild oder eine Datei das Kanallimit überschreitet, wird es komprimiert oder stattdessen ein Download-Link bereitgestellt.

Transkodierungs-Pipeline

Wenn eine Formatkonvertierung erforderlich ist, verwendet PRX die folgende Transkodierungs-Pipeline:

  1. Bildtranskodierung -- behandelt durch die image-Crate (reines Rust, keine externen Abhängigkeiten)
  2. Audiotranskodierung -- behandelt durch FFmpeg, falls installiert, andernfalls Fallback auf native Decoder für gängige Formate
  3. Video-Schlüsselbild-Extraktion -- erfordert FFmpeg

FFmpeg-Erkennung

PRX erkennt FFmpeg automatisch beim Start:

bash
prx doctor multimodal

Ausgabe:

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)

Wenn FFmpeg nicht installiert ist, sind Audiotranskodierung und Videoverarbeitung auf nativ unterstützte Formate beschränkt.

Einschränkungen

  • Videoverarbeitung erfordert, dass FFmpeg auf dem System installiert ist
  • Große Mediendateien können den LLM-Token-Verbrauch erheblich erhöhen (insbesondere mehrere Schlüsselbilder)
  • Einige Anbieter erheben zusätzliche Gebühren für Vision-/Multimodal-API-Aufrufe
  • Echtzeit-Audio-Streaming (Live-Sprachkonversation) wird noch nicht unterstützt
  • Von Anbietern generierte Bilder (DALL-E, Imagen) unterliegen den Inhaltsrichtlinien des Anbieters
  • SVG-Rasterung verwendet einen einfachen Renderer; komplexe SVGs werden möglicherweise nicht korrekt dargestellt

Verwandte Seiten

Released under the Apache-2.0 License.