Aller au contenu
PROJET WEB DYNAMIQUE

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'
];

Source