Multimodal
Envoyez des images, captures d'écran et audio avec du texte à votre LLM. Orka AI supporte les entrées multimodales nativement via les adaptateurs OpenAI et Anthropic.
Comment Ça Marche
Le support multimodal dans Orka AI repose sur les types ChatMessage et ContentPart. Au lieu d'envoyer un prompt texte simple, vous composez des messages avec des parties de contenu mixtes : texte, images (URL ou base64) et audio.
🧩 Types de Contenu
- text — Contenu texte simple
- image_url — Image depuis une URL (avec niveau de détail : auto, low, high)
- image_base64 — Image encodée en base64 (PNG, JPEG, GIF, WebP)
- audio — Données audio au format WAV ou MP3 (OpenAI uniquement)
# Analyse d'Image (URL)
La façon la plus simple d'analyser une image est de passer son URL. Le LLM téléchargera et traitera l'image automatiquement. Cela fonctionne avec OpenAI (GPT-4o, GPT-4o-mini) et Anthropic (Claude 3.5 Sonnet, Claude 3 Opus).
import { createOrka } from 'orkajs/core';import { OpenAIAdapter } from 'orkajs/adapters'; const orka = createOrka({ llm: new OpenAIAdapter({ apiKey: process.env.OPENAI_API_KEY!, model: 'gpt-4o' // Must use a vision-capable model })}); const result = await orka.getLLM().generate('', { messages: [ { role: 'user', content: [ { type: 'text', text: 'What do you see in this image? Describe it in detail.' }, { type: 'image_url', image_url: { url: 'https://example.com/photo.jpg', detail: 'high' // 'auto' | 'low' | 'high' } } ] } ]}); console.log(result.content);// "The image shows a sunset over the ocean with..."auto
Le modèle décide du niveau de détail en fonction de la taille de l'image. Meilleur choix par défaut.
low
Plus rapide et moins cher. Utilise une miniature 512×512. Bon pour la classification simple.
high
Analyse en pleine résolution. Idéal pour l'OCR, les descriptions détaillées et la lecture de petits textes.
# Analyse d'Image (Base64)
Pour les fichiers locaux ou les images générées dynamiquement, encodez-les en base64. Cela évite le besoin d'une URL publique et fonctionne avec OpenAI et Anthropic.
import { readFileSync } from 'fs'; // Read local image fileconst imageBuffer = readFileSync('./screenshot.png');const base64Image = imageBuffer.toString('base64'); const result = await orka.getLLM().generate('', { messages: [ { role: 'user', content: [ { type: 'text', text: 'Extract all text from this screenshot.' }, { type: 'image_base64', data: base64Image, mimeType: 'image/png' // 'image/png' | 'image/jpeg' | 'image/gif' | 'image/webp' } ] } ]}); console.log(result.content);# Images Multiples
Vous pouvez envoyer plusieurs images dans un seul message pour la comparaison, l'analyse ou le traitement de documents multi-pages.
const result = await orka.getLLM().generate('', { messages: [ { role: 'user', content: [ { type: 'text', text: 'Compare these two UI designs. Which one is better and why?' }, { type: 'image_url', image_url: { url: 'https://example.com/design-a.png', detail: 'high' } }, { type: 'image_url', image_url: { url: 'https://example.com/design-b.png', detail: 'high' } } ] } ]});# Entrée Audio (OpenAI)
Les modèles GPT-4o d'OpenAI supportent l'entrée audio. Envoyez des données audio au format WAV ou MP3 pour la transcription, l'analyse ou l'interaction vocale.
import { readFileSync } from 'fs'; const audioBuffer = readFileSync('./recording.wav');const base64Audio = audioBuffer.toString('base64'); const result = await orka.getLLM().generate('', { messages: [ { role: 'user', content: [ { type: 'text', text: 'Transcribe this audio and summarize the key points.' }, { type: 'audio', data: base64Audio, format: 'wav' // 'wav' | 'mp3' } ] } ]}); console.log(result.content);// "The speaker discusses three main topics: ..."⚠️ Limitations Audio
- L'entrée audio est actuellement supportée uniquement par OpenAI (modèles GPT-4o)
- Anthropic (Claude) supporte l'entrée audio à partir de Calude 4.6 Sonnet
- Les meilleurs modèles Gemini pour l'audio sont (3.1 Pro) & (3 Flash)
- La durée maximale de l'audio dépend du modèle et de votre plan API
# Avec System Prompt
Combinez le contenu multimodal avec des system prompts pour des tâches d'analyse spécialisées.
const result = await orka.getLLM().generate('', { messages: [ { role: 'system', content: 'You are an expert radiologist. Analyze medical images with precision and provide structured reports.' }, { role: 'user', content: [ { type: 'text', text: 'Please analyze this X-ray image.' }, { type: 'image_url', image_url: { url: 'https://example.com/xray.jpg', detail: 'high' } } ] } ]});# Conversations Multi-tours
Construisez des conversations multi-tours qui font référence aux images partagées précédemment.
const result = await orka.getLLM().generate('', { messages: [ { role: 'user', content: [ { type: 'text', text: 'Here is a photo of my living room.' }, { type: 'image_url', image_url: { url: 'https://example.com/room.jpg' } } ] }, { role: 'assistant', content: 'I can see a modern living room with a gray sofa, wooden coffee table...' }, { role: 'user', content: 'What color should I paint the walls to complement the furniture?' } ]});Compatibilité des Fournisseurs
| Fonctionnalité | OpenAI | Anthropic | Mistral | Ollama |
|---|---|---|---|---|
| Image (URL) | ✅ | ✅ | ❌ | ❌ |
| Image (Base64) | ✅ | ✅ | ❌ | ❌ |
| Audio | ✅ | ✅ | ❌ | ❌ |
| Images multiples | ✅ | ✅ | ❌ | ❌ |
Cas d'Usage
📸 OCR de Documents
Extraire du texte de documents scannés, reçus, factures et notes manuscrites.
🎨 Analyse UI/UX
Analyser des captures d'écran pour les problèmes d'accessibilité, le feedback design et l'identification de composants.
📊 Extraction de Graphiques & Données
Extraire des données de graphiques, diagrammes et tableaux dans les images pour un traitement ultérieur.
🎙️ Transcription Vocale
Transcrire des réunions, interviews et mémos vocaux avec résumé contextuel.
Types TypeScript
import type { ChatMessage, ContentPart } from 'orkajs'; // ChatMessageinterface ChatMessage { role: 'system' | 'user' | 'assistant'; content: string | ContentPart[];} // ContentPart — union typetype ContentPart = | { type: 'text'; text: string } | { type: 'image_url'; image_url: { url: string; detail?: 'auto' | 'low' | 'high' } } | { type: 'image_base64'; data: string; mimeType: 'image/png' | 'image/jpeg' | 'image/gif' | 'image/webp' } | { type: 'audio'; data: string; format: 'wav' | 'mp3' };Bonnes Pratiques
1. Choisissez le Bon Niveau de Détail
Utilisez 'low' pour les tâches de classification simples pour économiser des tokens et des coûts. Utilisez 'high' pour l'OCR et l'analyse détaillée.
2. Optimisez la Taille des Images
Redimensionnez les grandes images avant l'envoi pour réduire l'utilisation de tokens. La plupart des modèles fonctionnent bien avec des images de moins de 2048×2048.
3. Utilisez Base64 pour les Données Sensibles
Pour les images privées ou sensibles, utilisez l'encodage base64 au lieu des URLs pour éviter d'exposer les données publiquement.