Aller au contenu principal

Brick Appel IA

transform/ai_call — une ligne = un appel. Quatre questions, et rien d'autre :

  1. Quelle connexion — elle porte le fournisseur et la clé d'API ;
  2. quel modèle — vide = celui par défaut de la connexion ;
  3. qu'est-ce que j'envoie — un prompt, et éventuellement une colonne d'entrée ;
  4. où ranger la réponse — une colonne, ai_response par défaut.

La brick ne connaît aucun fournisseur. C'est le backend de la connexion qui sait comment attacher un document à une requête ou imposer un schéma JSON — ajouter un fournisseur ne crée aucune brick. Même principe que pour le stockage, où e_file_input ignore s'il parle à S3, à un FTP ou au disque local.

Le modèle décide de la route​

Certains fournisseurs servent l'océrisation par un endpoint distinct, avec une famille de modèles dédiée. Ce n'est pas un réglage de plus : c'est le modèle choisi qui le désigne.

Chez Mistral, mistral-ocr-latest part vers l'endpoint d'océrisation et rend le texte du document ; mistral-large-latest part vers la complétion et lit le document en voyant sa mise en page. Même colonne d'entrée, deux traitements — le choix se fait là où tu le faisais déjà.

Océrisation ou lecture par le modèle

L'océrisation aplatit le document en texte et perd la mise en page : les colonnes d'un tableau, les alignements, ce qui distingue un montant d'un numéro de dossier. Pour extraire des données, un modèle qui voit la page fait mieux, et en un appel. Réserve l'océrisation au cas où c'est le texte lui-même que tu veux : recherche plein texte, archivage.

Générer avec l'IA​

extract/e_ai_generate — une source, pas une transformation : elle n'a pas d'entrée et fabrique des lignes.

ParamètreDéfautDescription
prompt_template—Ce qu'on demande au modèle.
output_columnai_responseColonne qui reçoit la réponse.
runs1Une ligne par génération — chacune est un appel facturé.
temperature0.7Monter pour varier d'une génération à l'autre.

Deux usages : ouvrir un flux sur une génération, ou fabriquer un jeu d'essai. Dans ce second cas la température compte — à 0, un même prompt rend la même réponse et les N lignes seront identiques. La brick le signale.

Un modèle d'océrisation y est refusé : cette brick ne fournit aucun document, et l'erreur arrive avant le premier appel plutôt qu'à chaque génération.

Connexion IA​

La connexion se crée comme les autres, dans Connexions → Nouvelle connexion → Intelligence artificielle. Voir Créer une connexion.

C'est elle qui porte le fournisseur — Mistral aujourd'hui — sa clé d'API et son modèle par défaut. Les paramètres ci-dessous sont ceux du connecteur Mistral.

ParamètreDéfautDescription
api_key—Clé API Mistral (console.mistral.ai). Stockée chiffrée.
base_urlhttps://api.mistral.aiÀ changer uniquement pour passer par une passerelle.
default_modelmistral-large-latestModèle utilisé quand la brick n'en impose pas.
timeout120Délai maximum par appel, en secondes.
max_retries3Reprises sur erreur réseau, quota (429) ou 5xx.
retry_delay2Délai de base entre tentatives, doublé à chaque essai.
verify_ssltrueVérification du certificat TLS.

Le bouton Tester vérifie la clé en listant les modèles du compte.

Paramètres​

ParamètreDéfautDescription
connection_id—Connexion IA utilisée.
model(vide)Vide = modèle par défaut de la connexion. Le bouton à droite du champ liste les modèles du compte.
document_column(vide)Colonne d'entrée. Vide = on n'envoie que le prompt.
prompt_template(vide)Insère une valeur de colonne avec {{nom_de_colonne}}.
output_columnai_responseColonne qui reçoit la réponse du modèle.
system_prompt(une consigne)Cadre le rôle du modèle, identique pour toutes les lignes.
temperature00 pour une extraction reproductible.
max_tokens00 = laisser le fournisseur décider.
skip_when_column(vide)Colonne booléenne : les lignes vraies ne sont pas envoyées.
max_parallel4Lignes traitées en parallèle.
on_errorfailfail arrête au premier échec, continue laisse la ligne vide.
error_columnai_errorRenseignée en mode continue.

L'entrée n'a rien à déclarer​

Un modèle prend du texte. Mais un document ne se met pas dans du texte : les API le passent par un champ dédié, et l'y forcer fait répondre une erreur qui parle du format d'entrée sans jamais nommer la colonne.

La brick tranche donc sur la valeur, ligne par ligne :

Valeur de la colonneCe qui se passe
commence par httpjointe comme document, via son URL
encodée en base64jointe comme document
autre choseenvoyée en texte, à la suite du prompt

Le type du document se déduit de même — signature des premiers octets pour du base64, extension pour une URL : PDF, PNG, JPEG, GIF, TIFF. Une image et un PDF n'entrent pas par la même porte de l'API, et un type mal deviné fait répondre au modèle qu'il n'a rien reçu, sans erreur HTTP. C'est pour ça que la déduction se fait sur le contenu, et non sur une déclaration qu'on peut oublier de mettre à jour.

Une colonne peut donc mélanger les deux : chaque ligne suit sa nature.

Océriser puis interroger

Enchaîner deux appels — l'un qui océrise, l'autre qui interprète le texte — fonctionne : la colonne de réponse du premier devient la colonne d'entrée du second. Mais un seul appel avec un modèle qui voit la page fait souvent mieux, et coûte moitié moins.

Document hybride

Sur un PDF Factur-X, la colonne content porte du XML, pas un document encodé. Aiguille sur has_embedded_xml avant la brick, ou renseigne skip_when_column : les données XML sont exactes et n'ont rien à faire dans un modèle.

Sortie​

Une colonne, ai_response par défaut, qui reçoit la réponse du modèle telle quelle. Les colonnes d'entrée traversent la brick. En mode continue, une colonne d'erreur s'ajoute.

Le nom est réglable : deux appels IA à la suite écriraient sinon dans la même colonne, le second effaçant le premier.

Le schéma de sortie est connu sans appeler le modèle : les bricks en aval voient la colonne dès la conception.

Pour obtenir des champs​

La brick appelle, elle n'interprète pas. Demande du JSON dans le prompt, puis découpe-le avec Depuis JSON :

Réponds uniquement en JSON : {"numero": …, "total_ttc": …, "date": …}
attention

Sans schéma imposé au modèle, rien ne garantit que la réponse soit du JSON valide. Fais suivre d'une vérification — Qualité ou Validation de format — sur ce qui est vérifiable : cohérence HT + TVA = TTC, format de SIRET, plage de dates.

Coût et débit​

La brick parallélise ses appels (max_parallel), car le temps est dominé par l'attente réseau. Trois réflexes :

  • préférer un modèle qui voit la page quand tu veux des données : un appel au lieu de deux, et un meilleur résultat qu'une océrisation suivie d'une interprétation ;
  • réduire max_parallel en cas d'erreurs 429 (quota dépassé) — les reprises sont automatiques mais coûtent du temps ;
  • filtrer en amont ce qui n'a pas besoin du modèle (skip_when_column, un Router sur has_embedded_xml) : un appel évité est un appel gratuit.