Annexe : Formatage des Messages pour l'API
Annexe : Formatage des Messages pour l'API
Cette annexe détaille la structure attendue pour les messages envoyés à l'API de chat, avec des exemples concrets en PHP.
1. Structure Générale d'une Requête
1.1 Format PHP de Base
$request = [
// OBLIGATOIRE : soit "messages" soit "prompt"
'messages' => [...], // Array de messages (recommandé)
// OU
'prompt' => 'Votre prompt direct', // String simple
// Optionnel : modèle à utiliser
'model' => 'anthropic/claude-3.5-sonnet', // Par défaut : modèle utilisateur
// Paramètres de streaming
'stream' => true, // Pour activer le streaming
// Paramètres LLM
'max_tokens' => 1000,
'temperature' => 0.7, // Entre 0 et 2
'top_p' => 0.9, // Entre 0 et 1
// Contrôle du format de sortie
'response_format' => ['type' => 'json_object'], // Force JSON
// Mots d'arrêt
'stop' => ['```', 'FIN'], // String ou array de strings
];
2. Types de Messages
2.1 Message Utilisateur Simple
$userMessage = [
'role' => 'user',
'content' => 'Bonjour, comment allez-vous ?'
];
2.2 Message Système
$systemMessage = [
'role' => 'system',
'content' => 'Vous êtes un assistant spécialisé en développement web.'
];
2.3 Message Assistant
$assistantMessage = [
'role' => 'assistant',
'content' => 'Bonjour ! Je vais bien, merci. Comment puis-je vous aider ?'
];
2.4 Message avec Nom (Persona)
$namedMessage = [
'role' => 'user',
'content' => 'Quelle est la météo aujourd\'hui ?',
'name' => 'Alice' // Sera affiché comme "Alice: Quelle est la météo..."
];
3. Messages Multimodaux (Texte + Images)
3.1 Structure ContentPart
Pour les messages utilisateur avec images, le content devient un array de "parts" :
$multimodalMessage = [
'role' => 'user',
'content' => [
// Part texte
[
'type' => 'text',
'text' => 'Peux-tu analyser cette image ?'
],
// Part image
[
'type' => 'image_url',
'image_url' => [
'url' => 'https://example.com/image.jpg',
'detail' => 'high' // 'low', 'high', ou 'auto' (défaut)
]
]
]
];
3.2 Image Base64
$base64Message = [
'role' => 'user',
'content' => [
[
'type' => 'text',
'text' => 'Décris cette capture d\'écran'
],
[
'type' => 'image_url',
'image_url' => [
'url' => 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...',
'detail' => 'auto'
]
]
]
];
3.3 Plusieurs Images
$multipleImagesMessage = [
'role' => 'user',
'content' => [
[
'type' => 'text',
'text' => 'Compare ces deux images :'
],
[
'type' => 'image_url',
'image_url' => ['url' => 'https://example.com/image1.jpg']
],
[
'type' => 'image_url',
'image_url' => ['url' => 'https://example.com/image2.jpg']
]
]
];
4. Messages avec Tool Calling
4.1 Définition d'un Tool
$weatherTool = [
'type' => 'function',
'function' => [
'name' => 'get_weather',
'description' => 'Obtient la météo pour une ville donnée',
'parameters' => [
'type' => 'object',
'properties' => [
'city' => [
'type' => 'string',
'description' => 'Le nom de la ville'
],
'unit' => [
'type' => 'string',
'enum' => ['celsius', 'fahrenheit'],
'description' => 'L\'unité de température'
]
],
'required' => ['city']
]
]
];
4.2 Requête avec Tools
$requestWithTools = [
'messages' => [
[
'role' => 'system',
'content' => 'Vous êtes un assistant météo.'
],
[
'role' => 'user',
'content' => 'Quel temps fait-il à Paris ?'
]
],
'tools' => [$weatherTool],
'tool_choice' => 'auto' // 'none', 'auto', ou objet spécifique
];
4.3 Message Tool Response
$toolMessage = [
'role' => 'tool',
'content' => '{"temperature": 22, "condition": "ensoleillé", "humidity": 65}',
'tool_call_id' => 'call_abc123',
'name' => 'get_weather'
];
5. Exemples Complets de Conversations
5.1 Conversation Simple
$simpleConversation = [
'messages' => [
[
'role' => 'system',
'content' => 'Vous êtes un développeur PHP expert.'
],
[
'role' => 'user',
'content' => 'Comment faire une requête HTTP en PHP ?'
],
[
'role' => 'assistant',
'content' => 'Vous pouvez utiliser cURL ou file_get_contents()...'
],
[
'role' => 'user',
'content' => 'Peux-tu me donner un exemple avec cURL ?'
]
],
'model' => 'anthropic/claude-3.5-sonnet',
'temperature' => 0.7,
'max_tokens' => 1000,
'stream' => true
];
5.2 Conversation avec Images
$imageConversation = [
'messages' => [
[
'role' => 'system',
'content' => 'Vous analysez des interfaces utilisateur.'
],
[
'role' => 'user',
'content' => [
[
'type' => 'text',
'text' => 'Analyse cette maquette et donne-moi des suggestions d\'amélioration :'
],
[
'type' => 'image_url',
'image_url' => [
'url' => 'https://example.com/mockup.png',
'detail' => 'high'
]
]
]
]
],
'model' => 'anthropic/claude-3.5-sonnet',
'temperature' => 0.3
];
5.3 Conversation avec Tool Calling
$toolConversation = [
'messages' => [
[
'role' => 'system',
'content' => 'Vous êtes un assistant capable d\'effectuer des calculs.'
],
[
'role' => 'user',
'content' => 'Calcule 15% de 250 et convertis le résultat en euros.'
]
],
'tools' => [
[
'type' => 'function',
'function' => [
'name' => 'calculate',
'description' => 'Effectue des calculs mathématiques',
'parameters' => [
'type' => 'object',
'properties' => [
'expression' => [
'type' => 'string',
'description' => 'Expression mathématique à calculer'
]
],
'required' => ['expression']
]
]
],
[
'type' => 'function',
'function' => [
'name' => 'convert_currency',
'description' => 'Convertit une devise',
'parameters' => [
'type' => 'object',
'properties' => [
'amount' => ['type' => 'number'],
'from' => ['type' => 'string'],
'to' => ['type' => 'string']
],
'required' => ['amount', 'from', 'to']
]
]
]
],
'tool_choice' => 'auto'
];
