Champs IA
Sept types de champs calculent leur valeur avec un LLM à partir d'un ou plusieurs sourceFields. Tous partagent les propriétés de base des champs et un ensemble commun de contrôles IA.
| Type | Produit |
|---|---|
ai-generate |
Texte généré en forme libre à partir d'un modèle d'invite. |
ai-summary |
Un résumé des champs sources. |
ai-categorize |
Une catégorie unique choisie dans une liste prédéfinie. |
ai-extract |
Données structurées conformes à un JSON Schema. |
ai-sentiment |
Analyse de sentiment du texte source. |
ai-tag |
Plusieurs étiquettes choisies dans une liste d'autorisation. |
ai-translate |
Une traduction d'un champ source vers une langue cible. |
Propriétés IA communes
La plupart des champs IA acceptent ces propriétés partagées (en plus de leurs propriétés spécifiques au type) :
| Propriété | Description |
|---|---|
sourceFields |
Requis. Noms des champs utilisés comme contexte d'entrée. Au moins un (exactement un pour ai-translate). |
prompt |
Invite personnalisée pour guider l'IA. ai-generate utilise un modèle {{fieldName}} ; les autres se rabattent sur une valeur par défaut sensée lorsqu'omise. |
systemPrompt |
Invite système définissant la persona et le contexte de l'IA. |
model |
Remplacement du modèle IA (par ex. gpt-4o, claude-sonnet). Chaîne non vide. |
temperature |
Créativité de la sortie, de 0 à 1. |
Comment une valeur se résout, et comment le savoir
Un champ IA se résout en deux temps. Une valeur déterministe est calculée localement et stockée aussitôt, si bien que l'enregistrement n'est jamais laissé vide ; un affinage en arrière-plan la remplace ensuite par la réponse du modèle.
Lorsque l'affinage n'aboutit jamais, la valeur calculée localement demeure. C'est un contenu plausible et bien formé, qui se lit exactement comme un résultat de modèle : à elle seule, une valeur ne dit donc rien du niveau qui l'a produite. C'est pourquoi chaque valeur IA porte un statut d'affinage, et pourquoi la grille et le panneau d'enregistrement signalent les deux états qui ne sont pas stabilisés :
| Statut | Affichage |
|---|---|
refined |
Rien. Le modèle a répondu ; la valeur se suffit à elle-même. |
skipped |
Rien. Quelqu'un a modifié la valeur à la main et l'affinage a renoncé à l'écraser. |
pending |
Un marqueur … atténué, libellé Refining — l'affinage est encore en cours. |
failed |
Un marqueur ! rouge, libellé Not refined, qui explique que la valeur affichée est le repli calculé localement, cite la raison enregistrée du fournisseur et indique l'étape suivante : modifier la valeur pour la définir soi-même. |
Une valeur stabilisée reste délibérément non signalée. Signaler chaque valeur apprendrait à ignorer le marqueur, et une valeur modifiée à la main appartient déjà à la personne qui la lit : elle n'appelle aucun avertissement.
Modifier à la main une valeur non affinée est la sortie prévue : la modification est conservée et aucun affinage ultérieur ne l'écrase.
Toute écriture fournissant une valeur explicite pour la colonne enregistre skipped et efface la raison consignée : le marqueur disparaît avec elle. Une écriture qui ne touche pas à la colonne laisse son statut intact. Le champ conserve un statut skipped plutôt que de perdre son entrée, si bien qu'une valeur écrite à la main reste distinguable d'une valeur jamais calculée.
computeOn détermine le moment où un champ est recalculé — ai-generate, ai-summary et ai-sentiment acceptent create (par défaut), update ou both ; les quatre autres calculent toujours à la création — mais cela n'a ici aucune incidence. Une modification manuelle est respectée quel que soit le réglage.
Lire le statut via l'API
Les enregistrements d'une table comportant des champs IA portent un bloc _aiCompute à côté de fields, indexé par nom de champ :
{
"id": "42",
"fields": { "summary": "Coastal ecosystems face accelerating change." },
"_aiCompute": {
"summary": { "status": "failed", "error": "provider unavailable" }
}
}status vaut pending, refined, failed ou skipped ; error n'est présent que pour failed. Le bloc est entièrement omis pour une table ne déclarant aucun champ IA, ainsi que pour un enregistrement sans statut : il n'est jamais envoyé sous forme d'objet vide, si bien qu'une table sans IA ne coûte rien à lire.
ai-generate
Génère du texte en forme libre à partir d'un modèle d'invite.
| Propriété | Description |
|---|---|
prompt |
Modèle d'invite avec substitution de variables {{fieldName}}. (Recommandé pour les champs generate.) |
- id: 1
name: marketing_copy
type: ai-generate
sourceFields: [product_name, features]
prompt: 'Write a compelling 2-paragraph marketing description for {{product_name}}. Key features: {{features}}.'ai-summary
Résume les champs sources. Utilise une invite « Summarize the following » par défaut lorsque prompt est omis.
- { id: 2, name: ticket_summary, type: ai-summary, sourceFields: [body, thread] }ai-categorize
Classe la source dans exactement l'une d'une liste fixe de catégories.
| Propriété | Description |
|---|---|
categories |
Requis. Catégories prédéfinies parmi lesquelles l'IA doit choisir. Minimum 2, sans doublons. |
- {
id: 3,
name: ticket_category,
type: ai-categorize,
sourceFields: [subject, body],
categories: [billing, technical, account, general],
}ai-extract
Extrait des données structurées décrites par un JSON Schema. Prend en charge les objets et tableaux imbriqués.
| Propriété | Description |
|---|---|
schema |
Requis. Objet JSON Schema décrivant la structure des données extraites. |
- id: 4
name: invoice_data
type: ai-extract
sourceFields: [raw_text]
schema:
type: object
properties:
vendor_name: { type: string, description: Name of the vendor }
total_amount: { type: number, description: Total amount due }ai-sentiment
Analyse le sentiment du texte source. prompt peut ajuster la focalisation (par ex. urgence, satisfaction).
- { id: 5, name: review_sentiment, type: ai-sentiment, sourceFields: [review_text] }ai-tag
Attribue plusieurs étiquettes à partir d'une liste d'autorisation prédéfinie.
| Propriété | Description |
|---|---|
tags |
Requis. Étiquettes autorisées que l'IA peut attribuer. Minimum 2, sans doublons. |
maxTags |
Nombre maximal d'étiquettes à attribuer (entier positif). Aucune limite lorsqu'omis. |
- {
id: 6,
name: article_tags,
type: ai-tag,
sourceFields: [title, body],
tags: [technology, business, science, health, politics],
maxTags: 3,
}ai-translate
Traduit un champ source vers une langue cible.
| Propriété | Description |
|---|---|
sourceFields |
Requis. Exactement un nom de champ. |
targetLanguage |
Requis. Code de langue ISO 639-1, éventuellement suffixé par une région (par ex. fr, es, ja, zh-CN). |
prompt |
Invite personnalisée pour contrôler le ton, le registre et le style de la traduction. |
- {
id: 7,
name: description_fr,
type: ai-translate,
sourceFields: [description],
targetLanguage: fr,
}Routage des fournisseurs IA. Les champs IA passent par le résolveur de précédence de fournisseurs de Sovrium (contrôlé par variables d'environnement, local-first par défaut). La propriété optionnelle model remplace le modèle par défaut pour ce champ. Le rôle de connexion conditionne toujours l'exécution partout où la table est exposée via le serveur MCP.
Dernière mise à jour 11 août 2026
Cette documentation a été rédigée avec de l'IA : des erreurs ou du contenu obsolète sont donc possibles. Sovrium est en bêta. Les contributions et corrections sont les bienvenues.