# 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="true"><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/développeur/utilisateur

<table data-full-width="true"><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>DEVELOPER_MESSAGE</code></td><td valign="top">TEXT</td><td valign="top">IN</td><td valign="top">Le contenu du message développeur</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="true"><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> <code>user</code> ou <code>developer</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="true"><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 à l'exemple qui suit :</p><pre class="language-json"><code class="lang-json">[
    {
        "role": "assistant",
        "content": "Contenu du premier message"
    },
    {
        "role": "system",
        "content": "Contenu du deuxième message"
    }
]
</code></pre></td></tr></tbody></table>

## Paramètres facultatifs

<table data-full-width="true"><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">Nombre maximum de jetons pouvant être générés lors de la fin du chat; la valeur par défaut est <code>256</code></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><tr><td valign="top"><code>TRIM_SIZE</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top">Nombre de messages à conserver depuis la fin de l’historique de conversation</td></tr><tr><td valign="top"><code>TRIM_SKIP</code></td><td valign="top">NUMERIC</td><td valign="top">IN</td><td valign="top">Nombre de messages à conserver depuis le début de l’historique de conversation</td></tr></tbody></table>

## 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"]
  }
}
```


---

# 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.2/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.
