Skip to content
이 페이지는 AI의 도움으로 작성 및 번역되었습니다. 부정확한 내용이 있으면 개선에 참여해 주세요. GitHub에서 편집

멀티모달 콘텐츠 처리

PRX는 채널과 LLM 프로바이더에 걸쳐 멀티모달 콘텐츠 -- 이미지, 오디오, 비디오 --를 지원합니다. 멀티모달 서브시스템은 콘텐츠 유형 감지, 형식 트랜스코딩, 크기 제한, 채널과 프로바이더 간의 기능 협상을 처리합니다.

개요

사용자가 채널을 통해 미디어 첨부 (사진, 음성 메시지, 문서)를 보내면 멀티모달 파이프라인은:

  1. 매직 바이트와 파일 확장자를 사용하여 콘텐츠 유형을 감지합니다
  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     │
└──────────────┘

지원되는 콘텐츠 유형

이미지

형식감지프로바이더로 전송프로바이더에서 수신
JPEG매직 바이트 FF D8 FF
PNG매직 바이트 89 50 4E 47
GIF매직 바이트 47 49 46예 (첫 프레임)아니요
WebPRIFF 헤더 + WEBP
BMP매직 바이트 42 4DPNG로 트랜스코딩아니요
TIFF매직 바이트 49 49 또는 4D 4DPNG로 트랜스코딩아니요
SVGXML 감지PNG로 래스터화아니요

오디오

형식감지전사프로바이더 입력
OGG/OpusOGG 헤더예 (STT 경유)전사된 텍스트
MP3ID3/sync 헤더예 (STT 경유)전사된 텍스트
WAVRIFF + WAVE예 (STT 경유)전사된 텍스트
M4A/AACftyp box예 (STT 경유)전사된 텍스트
WebMEBML 헤더예 (STT 경유)전사된 텍스트

비디오

형식감지처리
MP4ftyp box키프레임 + 오디오 트랙 추출
WebMEBML 헤더키프레임 + 오디오 트랙 추출
MOVftyp box키프레임 + 오디오 트랙 추출

비디오 파일은 키프레임 이미지와 오디오 트랙으로 분해됩니다. 키프레임은 이미지로 전송되고 오디오는 전사됩니다.

콘텐츠 유형 감지

감지는 2단계 접근 방식을 사용합니다:

  1. 매직 바이트 -- 파일의 처음 16바이트를 알려진 시그니처와 비교합니다
  2. 파일 확장자 -- 매직 바이트가 결정적이지 않으면 파일 확장자를 폴백으로 사용합니다
  3. MIME 유형 헤더 -- HTTP를 통해 수신된 콘텐츠의 경우 Content-Type 헤더를 참조합니다

감지 결과에 따라 어떤 처리 파이프라인이 콘텐츠를 처리할지 결정됩니다.

설정

toml
[multimodal]
enabled = true

[multimodal.images]
max_size_bytes = 20_971_520      # 20 MB
max_resolution = "4096x4096"     # 최대 너비 x 높이
auto_resize = true               # max_resolution을 초과하는 이미지 자동 리사이즈
resize_quality = 85              # 리사이즈된 이미지의 JPEG 품질 (1-100)
strip_exif = true                # 개인정보 보호를 위해 EXIF 메타데이터 제거

[multimodal.audio]
max_size_bytes = 26_214_400      # 25 MB
max_duration_secs = 300          # 5분
stt_provider = "whisper"         # "whisper", "deepgram" 또는 "provider" (LLM 프로바이더의 STT 사용)
stt_model = "whisper-1"
stt_language = "auto"            # 언어 자동 감지는 "auto", 또는 ISO 639-1 코드

[multimodal.video]
max_size_bytes = 104_857_600     # 100 MB
max_duration_secs = 120          # 2분
keyframe_interval_secs = 5       # 5초마다 키프레임 하나 추출
max_keyframes = 20               # 추출할 최대 키프레임 수
extract_audio = true             # 오디오 트랙 전사

설정 레퍼런스

이미지

필드타입기본값설명
max_size_bytesu6420971520최대 이미지 파일 크기 (20 MB)
max_resolutionString"4096x4096"최대 이미지 해상도 (WxH)
auto_resizebooltrue크기 초과 이미지 자동 리사이즈
resize_qualityu885리사이즈된 이미지의 JPEG 품질 (1--100)
strip_exifbooltrue이미지에서 EXIF 메타데이터 제거

오디오

필드타입기본값설명
max_size_bytesu6426214400최대 오디오 파일 크기 (25 MB)
max_duration_secsu64300최대 오디오 길이 (5분)
stt_providerString"whisper"음성-텍스트 변환 프로바이더
stt_modelString"whisper-1"STT 모델명
stt_languageString"auto"전사 언어 힌트

비디오

필드타입기본값설명
max_size_bytesu64104857600최대 비디오 파일 크기 (100 MB)
max_duration_secsu64120최대 비디오 길이 (2분)
keyframe_interval_secsu645키프레임 추출 간격 (초)
max_keyframesusize20추출할 최대 키프레임 수
extract_audiobooltrue비디오의 오디오 트랙 전사

프로바이더 기능

모든 LLM 프로바이더가 동일한 미디어 유형을 지원하는 것은 아닙니다. PRX는 기능을 자동으로 협상합니다:

프로바이더이미지 입력이미지 출력오디오 입력네이티브 멀티모달
Anthropic (Claude)아니요아니요 (먼저 전사)예 (비전)
OpenAI (GPT-4o)예 (DALL-E)예 (Whisper)
Google (Gemini)예 (Imagen)
Ollama (LLaVA)아니요아니요예 (비전)
AWS Bedrock모델에 따라 다름다름아니요다름

프로바이더가 미디어 유형을 네이티브로 지원하지 않을 때 PRX는 폴백 처리를 적용합니다:

  • 이미지 미지원 -- 비전 지원 모델을 사용하여 이미지를 설명하고, 설명을 텍스트로 전송합니다
  • 오디오 미지원 -- 설정된 STT 프로바이더로 오디오를 전사하고, 전사본을 텍스트로 전송합니다
  • 비디오 미지원 -- 키프레임과 오디오 전사본을 복합 메시지로 전송합니다

채널 미디어 제한

각 채널은 자체 파일 크기 및 형식 제한을 부과합니다:

채널최대 업로드최대 다운로드지원 형식
Telegram50 MB20 MB이미지, 오디오, 비디오, 문서
Discord25 MB (무료)25 MB이미지, 오디오, 비디오, 문서
WhatsApp16 MB (미디어)16 MBJPEG, PNG, MP3, MP4, PDF
QQ20 MB20 MB이미지, 오디오, 문서
DingTalk20 MB20 MB이미지, 오디오, 문서
Lark25 MB25 MB이미지, 오디오, 비디오, 문서
Matrix홈서버에 따라 다름홈서버에 따라 다름모든 일반 형식
Email25 MB (일반적)25 MBMIME 첨부로 모두
CLI파일시스템 제한파일시스템 제한모든 형식

PRX는 응답 전송을 시도하기 전에 채널의 제한을 적용합니다. 생성된 이미지나 파일이 채널 제한을 초과하면 압축되거나 다운로드 링크가 대신 제공됩니다.

트랜스코딩 파이프라인

형식 변환이 필요할 때 PRX는 다음 트랜스코딩 파이프라인을 사용합니다:

  1. 이미지 트랜스코딩 -- image 크레이트로 처리됩니다 (순수 Rust, 외부 종속성 없음)
  2. 오디오 트랜스코딩 -- FFmpeg가 설치된 경우 사용하고, 그렇지 않으면 일반 형식용 네이티브 디코더로 폴백합니다
  3. 비디오 키프레임 추출 -- FFmpeg가 필요합니다

FFmpeg 감지

PRX는 시작 시 FFmpeg를 자동으로 감지합니다:

bash
prx doctor multimodal

출력:

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 토큰 사용량을 크게 증가시킬 수 있습니다 (특히 여러 키프레임)
  • 일부 프로바이더는 비전/멀티모달 API 호출에 대해 추가 요금을 부과합니다
  • 실시간 오디오 스트리밍 (라이브 음성 대화)은 아직 지원되지 않습니다
  • 프로바이더에서 생성된 이미지 (DALL-E, Imagen)는 프로바이더의 콘텐츠 정책의 적용을 받습니다
  • SVG 래스터화는 기본 렌더러를 사용합니다; 복잡한 SVG는 정확하게 렌더링되지 않을 수 있습니다

관련 페이지

Released under the Apache-2.0 License.