OrkaJS
Orka.JS

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

  • textContenu texte simple
  • image_urlImage depuis une URL (avec niveau de détail : auto, low, high)
  • image_base64Image encodée en base64 (PNG, JPEG, GIF, WebP)
  • audioDonné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 file
const 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éOpenAIAnthropicMistralOllama
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';
 
// ChatMessage
interface ChatMessage {
role: 'system' | 'user' | 'assistant';
content: string | ContentPart[];
}
 
// ContentPart — union type
type 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.