# OPENAICHAT

## Aperçu

L'application de workflow **OPENAICHAT** vous permet d'interagir avec un modèle de chat OpenAI.

## Mode de fonctionnement

* L'application vous permet d'interagir avec les modèles de complétion OpenAI.
* Des logs d'application sont disponibles. Ceux-ci peuvent être spécifiés en définissant la valeur du paramètre `OpenAIChatLogLevel` dans le fichier `web.config` sur `0` pour désactiver la journalisation, `1` pour les logs d'erreur, `2` pour des logs d'informations ou `3` pour les logs de débogage; la valeur par défaut est `0`.

## Paramètres requis

<table data-full-width="false"><thead><tr><th width="202" valign="top">Paramètre</th><th width="76" valign="top">Type</th><th width="125" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>MODEL</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">ID du modèle à utiliser<br><br>Vous pouvez trouver les modèles disponibles au lien suivant : <a href="https://platform.openai.com/docs/models/model-endpoint-compatibility">https://platform.openai.com/docs/models/model-endpoint-compatibility</a> (page disponible en anglais uniquement)</td></tr></tbody></table>

Vous pouvez utiliser l'une des configurations suivantes : avec des messages système/utilisateur, avec un numéro de message ou avec un tableau de messages JSON.

### Avec des messages système/utilisateur

<table data-full-width="false"><thead><tr><th width="202" valign="top">Paramètre</th><th width="76" valign="top">Type</th><th width="125" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>SYSTEM_MESSAGE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le contenu du message système</td></tr><tr><td valign="top"><code>USER_MESSAGE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le contenu du message utilisateur</td></tr></tbody></table>

### Avec un numéro de message

<table data-full-width="false"><thead><tr><th width="216" valign="top">Paramètre</th><th width="76" valign="top">Type</th><th width="125" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>MESSAGE_ROLEx</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le type du message, où <code>x</code> correspond au numéro du message ; le la valeur doit être <code>assistant</code>, <code>system</code> ou <code>user</code></td></tr><tr><td valign="top"><code>MESSAGE_CONTENTx</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le contenu du message utilisateur, où <code>x</code> correspond au numéro du message</td></tr></tbody></table>

### Avec un tableau de messages JSON

<table data-full-width="false"><thead><tr><th width="202" valign="top">Paramètre</th><th width="76" valign="top">Type</th><th width="125" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>MESSAGE_JSON</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>L'objet de message du tableau JSON ; la structure doit correspondre à ce qui suit :</p><pre class="language-json"><code class="lang-json">[
    {
        "role": "assistant/system/user",
        "content": "First message content"
    },
    {
        "role": "assistant/system/user",
        "content": "Second message content"
    }
]
</code></pre></td></tr></tbody></table>

## Paramètres facultatifs

<table data-full-width="false"><thead><tr><th width="319" valign="top">Paramètres</th><th width="111" valign="top">Type</th><th width="104" valign="top">Direction</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><code>API_KEY</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Clé API OpenAI</p><p><br>Par défaut, cette valeur provient du paramètre <code>OpenAIApiKey</code> du fichier <code>web.config</code>.</p></td></tr><tr><td valign="top"><code>URL</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Point de terminaison de l'API; cette valeur provient du paramètre <code>OpenAIChatApiUrl</code> dans le fichier <code>web.config</code>, s’il est défini</td></tr><tr><td valign="top"><code>TEMPERATURE</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Température d'échantillonnage, comprise entre <code>0</code> et <code>1</code>; la valeur par défaut est <code>1</code><br></p><p>Des valeurs plus élevées (par exemple <code>0.8</code>) rendront la sortie plus aléatoire, tandis que des valeurs plus faibles (par exemple <code>0.2</code>) la rendront plus ciblée et déterministe.</p></td></tr><tr><td valign="top"><code>TOP_P</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Une alternative à l'échantillonnage avec température, appelée échantillonnage de noyau, où le modèle prend en compte les résultats des jetons avec une masse de probabilité <code>top_p</code>. Ainsi, <code>0.1</code> signifie que seuls les jetons comprenant la masse de probabilité la plus élevée de 10 % sont pris en compte.</p><p>Par défaut : <code>1</code></p></td></tr><tr><td valign="top"><code>FREQUENCY_PENALTY</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Nombre compris entre <code>-2.0</code> et <code>2.0</code>. Les valeurs positives pénalisent les nouveaux jetons en fonction de leur fréquence existante dans le texte jusqu'à présent, réduisant ainsi la probabilité que le modèle répète mot pour mot la même ligne.</p><p>Par défaut : <code>0</code></p></td></tr><tr><td valign="top"><code>MAX_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Nombre maximum de jetons pouvant être générés dans la complétion de chat</p><p></p><p><strong>Par défaut :</strong> <code>256</code></p><p></p><p>✏️ <strong>Note :</strong> Pour les modèles de raisonnement (o1, o3, série GPT-5), utilisez <code>MAX_COMPLETION_TOKENS</code> à la place.<br>Si <code>MAX_TOKENS</code> et <code>MAX_COMPLETION_TOKENS</code> sont tous deux spécifiés, <code>MAX_COMPLETION_TOKENS</code> a priorité.</p></td></tr><tr><td valign="top"><code>MAX_COMPLETION_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Nombre maximum de jetons à générer dans la complétion</p><p></p><p>Ce paramètre est requis pour les modèles de raisonnement (o1, o3, série GPT-5) et a priorité sur <code>MAX_TOKENS</code> lorsque les deux sont spécifiés. Pour les modèles de raisonnement, cette valeur inclut à la fois les jetons de raisonnement et les jetons visibles de la complétion.</p></td></tr><tr><td valign="top"><code>REASONING_EFFORT</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Contrôle le niveau d’effort pour les modèles de raisonnement; applicable uniquement aux modèles de raisonnement (o1, o3, série GPT-5)</p><p></p><p><strong>Valeurs :</strong> <code>low</code>, <code>medium</code> ou <code>high</code></p><p></p><p>⚠️ <strong>Important :</strong> N’utilisez pas ce paramètre avec des modèles non orientés raisonnement (p.ex. GPT-4o, GPT-4-turbo), car cela provoquera une erreur de l’API.</p></td></tr><tr><td valign="top"><code>PRESENCE_PENALTY</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top"><p>Numéro compris entre <code>-2.0</code> et <code>2.0</code> ; la valeur par défaut est <code>0</code><br></p><p>Les valeurs positives pénalisent les nouveaux jetons selon qu'ils apparaissent ou non dans le texte jusqu'à présent, augmentant ainsi la probabilité du modèle de parler de nouveaux sujets.</p></td></tr><tr><td valign="top"><code>RESPONSE_FORMAT</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Format de réponse : <code>text</code> , <code>json_object</code> ou <code>json_schema</code><br></p><p>Lorsque la valeur est <code>json_object</code>, l'invite système doit contenir le mot-clé JSON.<br>Lorsque la valeur est <code>json_schema</code>, il faut renseigner le schema attendu dans le paramètre <code>RESPONSE_FORMAT_JSON_SCHEMA</code>.</p></td></tr><tr><td valign="top"><code>RESPONSE_FORMAT_JSON_SCHEMA</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le schema JSON qui sera utilisé par le modèle pour répondre.<br>Voir la section <a href="#response_format_json_schema"><code>RESPONSE_FORMAT_JSON_SCHEMA</code></a> ci-dessous pour un exemple.</td></tr><tr><td valign="top"><code>APP_RESPONSE_IGNORE_ERROR</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top"><p>Spécifie (<code>Y</code> ou <code>N</code>) si l'erreur doit être ignorée; la valeur par défaut est <code>N</code><br></p><p>En cas d'erreur, si le paramètre a <code>Y</code> comme valeur, l'erreur sera ignorée et les paramètres OUT définis (<code>APP_RESPONSE_STATUS</code> ou <code>APP_RESPONSE_CONTENT</code>) seront mappés. Sinon, une exception sera levée.</p></td></tr><tr><td valign="top"><code>TOOLS</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Listes des outils à dispositions du modèle, le format doit être en json et correspondre au format d'OpenAI : <a href="https://platform.openai.com/docs/api-reference/chat/create#chat-create-tools">https://platform.openai.com/docs/api-reference/chat/create#chat-create-tools</a><br>Voir la section <a href="#tools"><code>TOOLS</code></a> ci-dessous pour un exemple.</td></tr><tr><td valign="top"><code>TOOL_CHOICE_REQUIRED</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Spécifie si le modèle doit obligatoirement choisir un outil. Valeurs : <code>Y</code> ou <code>N</code> (par défaut)</td></tr><tr><td valign="top"><code>PARALLEL_TOOL</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Spécifie si le modèle peut choisir plusieurs outils. Valeurs : <code>Y</code> (par défaut) ou <code>N</code></td></tr><tr><td valign="top"><code>MESSAGE_HISTORY</code></td><td valign="top">TEXT</td><td valign="top">INOUT</td><td valign="top"><p>L'historique des messages au format JSON. La structure de référence est celle de la documentation d'OpenAI pour l'objet <code>messages</code> </p><p><a href="https://platform.openai.com/docs/api-reference/chat/create#chat-create-messages">https://platform.openai.com/docs/api-reference/chat/create#chat-create-messages</a></p></td></tr><tr><td valign="top"><code>SELECTED_TOOLS</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">La liste des noms d'outils qui ont été sélectionnés, séparé par une virgule</td></tr><tr><td valign="top"><code>SELECTED_TOOLS_PARAM</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Tableau JSON représentant la liste des outils sélectionnés avec leurs paramètres. Voir la section <a href="#selected_tools_params"><code>SELECTED_TOOLS_PARAMS</code></a> ci-dessous pour un exemple de rendu.</td></tr><tr><td valign="top"><code>SELECTED_TOOLS_COUNT</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Le nombre d'outils sélectionnés</td></tr><tr><td valign="top"><code>RESULT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Appel de résultat du chat</td></tr><tr><td valign="top"><code>RESULT_CONTENT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Contenu du message de l'assistant</td></tr><tr><td valign="top"><code>RESULT_TOTAL_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Total des jetons utilisés pour la génération</td></tr><tr><td valign="top"><code>RESULT_COMPLETION_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Total des jetons utilisés pour la génération</td></tr><tr><td valign="top"><code>RESULT_PROMPT_TOKENS</code></td><td valign="top">NUMERIC</td><td valign="top">OUT</td><td valign="top">Total des jetons utilisés pour l'invite</td></tr><tr><td valign="top"><code>APP_RESPONSE_STATUS</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Code d'état de la réponse</td></tr><tr><td valign="top"><code>APP_RESPONSE_CONTENT</code></td><td valign="top">TEXT</td><td valign="top">OUT</td><td valign="top">Charge utile de réponse ou message d'erreur</td></tr></tbody></table>

## Modèles de raisonnement

OpenAI propose des modèles de raisonnement (o1, o3, série GPT-5) qui utilisent un raisonnement interne avant de générer une réponse. Ces modèles ont des exigences spécifiques en matière de paramètres :

### Paramètres

<table><thead><tr><th valign="top">Paramètre</th><th>Description</th></tr></thead><tbody><tr><td valign="top"><code>MAX_COMPLETION_TOKENS</code> </td><td><strong>Requis pour les modèles de raisonnement.</strong> Spécifie le nombre maximum de jetons pour la complétion, incluant à la fois les jetons de raisonnement et les jetons de sortie visibles.</td></tr><tr><td valign="top"><code>REASONING_EFFORT</code></td><td><p><strong>Facultatif.</strong> Contrôle la profondeur du raisonnement : <code>low</code>, <code>medium</code> ou <code>high</code>.</p><p></p><p>Des valeurs plus élevées utilisent davantage de jetons de raisonnement, mais peuvent produire de meilleurs résultats.</p></td></tr></tbody></table>

{% hint style="warning" %}

* Utilisez `MAX_COMPLETION_TOKENS` au lieu de `MAX_TOKENS` pour les modèles de raisonnement. Le paramètre `MAX_TOKENS` est obsolète pour ces modèles.
* N’utilisez pas `REASONING_EFFORT` avec des modèles non orientés raisonnement (p.ex. GPT-4o, GPT-4-turbo). Ces modèles ne supportent pas ce paramètre et l’API renverra une erreur.
* Lorsque vous utilisez `REASONING_EFFORT`, définissez toujours `MAX_COMPLETION_TOKENS`. Si `REASONING_EFFORT` est spécifié sans `MAX_COMPLETION_TOKENS`, aucune limite de jetons n’est envoyée à l’API (l’API utilisera ses limites par défaut). Ce comportement est intentionnel, car les modèles de raisonnement rejettent le paramètre `MAX_TOKENS`.
* Les jetons de raisonnement ne sont pas visibles dans le contenu de la réponse, mais ils sont inclus dans le décompte des jetons et la facturation.
  {% endhint %}

### Paramètres de sortie

<table><thead><tr><th valign="top">Paramètre</th><th>Description</th></tr></thead><tbody><tr><td valign="top"><code>RESULT_REASONING_TOKENS</code></td><td><p>Nombre de jetons utilisés pour le raisonnement interne</p><p></p><p>Uniquement renseigné pour les modèles de raisonnement; renvoie <code>0</code> pour les autres modèles.</p></td></tr><tr><td valign="top"><code>RESULT_CACHED_TOKENS</code></td><td>Nombre de jetons de l’invite servis depuis le cache (s’applique à tous les modèles prenant en charge la mise en cache des invites)</td></tr></tbody></table>

### Exemple d’utilisation d’un modèle de raisonnement

```
MODEL = gpt-5-mini
USER_MESSAGE = "Solve this math problem: If a train travels 120 km in 2 hours, what is its average speed?"
MAX_COMPLETION_TOKENS = 500
REASONING_EFFORT = medium
```

#### Sortie

```
RESULT_CONTENT = "Average speed = distance ÷ time = 120 km ÷ 2 h = 60 km/h."
RESULT_TOTAL_TOKENS = 124
RESULT_COMPLETION_TOKENS = 95
RESULT_PROMPT_TOKENS = 29
RESULT_REASONING_TOKENS = 64
RESULT_CACHED_TOKENS = 0
```

## Cas d’utilisation du schéma JSON

En utilisation un schéma JSON comme format de réponse, cela force l'application à répondre de manière structuré pour correspondre au schéma.&#x20;

Vous avez la possibilité d'extraire directement les valeurs retournées pour les mettre dans une donnée; il suffit d'indiquer en nom de paramètre le nom de la propriété à extraire et de mettre en OUT la donnée cible.

## Exemples

### `TOOLS`

<pre class="language-json"><code class="lang-json"><strong>[
</strong>    {
        "name": "GET_STOCK_INFORMATION",
        "description": "Get stock information about a product. If the product is not found, return an error. If the stock is less than 10, return a warning and a purchase order should be done.",      
        "parameters": {
            "type": "object",
            "properties": {
                "product_name": {
                    "type": "string",
                    "description": "The product name"
                },
                "serial_number": {
                    "type": "string",
                    "description": "The product serial number"
                }
            },
            "additionalProperties": false,
            "required": ["serial_number"]
        }
    },
    {
        "name": "PURCHASE_ORDER",
        "description": "Make a purchase order for a product.",    
        "parameters": {
            "type": "object",
            "properties": {
                "product_name": {
                    "type": "string",
                    "description": "The product name"
                },
                "serial_number": {
                    "type": "string",
                    "description": "The product serial number"
                },
                "quantity": {
                    "type": "number",
                    "description": "The quantity of the product to purchase"
                }
            },
            "additionalProperties": false,
            "required": ["serial_number", "quantity"]
        }
    }
]
</code></pre>

### `SELECTED_TOOLS_PARAMS`

```json
[
    {
        "name": "GET_STOCK_INFORMATION",
        "id": "call_Vuc2Ga8jP7vUksxG9C0fwpY8",
        "parameters": {
            "product_name": "vis",
            "serial_number": "V45645"
        }
        
    },
    {
        "name": "GET_STOCK_INFORMATION",
        "id": "call_nq3SCVUk0FjAHCeqOZGNXpC8",
        "parameters": {
            "product_name": "boulons",
            "serial_number": "b456"
        }
    }
]
```

### `RESPONSE_FORMAT_JSON_SCHEMA`

```json
{
  "name": "schema",
  "schema": {
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
      "advice": {
        "type": "string"
      },
      "next_action": {
        "type": "string",
        "enum": ["expert","sales","support","logistics",null]
      },
      "confidence_level": {
        "type": "number"
      }
    },
    "required": ["advice", "next_action","confidence_level"]
  }
}
```

## **Fournisseurs compatibles OpenAI**

L’application **OPENAICHAT** peut être utilisée avec des fournisseurs compatibles OpenAI en spécifiant un point de terminaison d’API personnalisé via le paramètre `URL` ou le paramètre `OpenAIChatApiUrl` dans le fichier `web.config`.

### Fournisseurs compatibles

<table><thead><tr><th valign="top">Fournisseur</th><th valign="top">Type</th></tr></thead><tbody><tr><td valign="top">Azure OpenAI</td><td valign="top">Cloud</td></tr><tr><td valign="top">Ollama</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">vLLM</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">LocalAI</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">LM Studio</td><td valign="top">Auto-hébergé</td></tr><tr><td valign="top">Together AI</td><td valign="top">Cloud</td></tr><tr><td valign="top">Groq</td><td valign="top">Cloud</td></tr><tr><td valign="top">Mistral AI</td><td valign="top">Cloud</td></tr><tr><td valign="top">OpenRouter</td><td valign="top">Cloud</td></tr></tbody></table>

{% hint style="warning" %}

* N’utilisez pas `MAX_COMPLETION_TOKENS` ni `REASONING_EFFORT` avec des fournisseurs non-OpenAI, sauf si vous savez que le fournisseur supporte ces paramètres.
* Utilisez `MAX_TOKENS` pour définir les limites de jetons lorsque vous utilisez des fournisseurs non-OpenAI.
* Certains fournisseurs peuvent ignorer les paramètres non supportés, tandis que d’autres peuvent renvoyer une erreur.
  {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.workflowgen.com/admin-fr/9.6-admin-fr/applications-de-workflow/openai/openaichat.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
