Les fonctions d’IA sont expérimentales. Définissez
allow_experimental_ai_functions pour les activer.Les fonctions d’IA peuvent produire des résultats imprévisibles. Le résultat dépendra fortement de la qualité du prompt et du modèle utilisés.- Application des quotas : limites par requête sur les tokens (
ai_function_max_input_tokens_per_query,ai_function_max_output_tokens_per_query) et sur les appels d’API (ai_function_max_api_calls_per_query). - Nouvelle tentative avec backoff : les échecs temporaires sont réessayés (
ai_function_max_retries) avec un backoff exponentiel (ai_function_retry_initial_delay_ms).
Configuration
aiGenerate, aiClassify, aiFilter, aiExtract, aiTranslate, aiRedact), et une autre pour les fonctions d’embedding (aiEmbed, aiSimilarity), qui nécessitent des points de terminaison différents et utilisent généralement des modèles différents.
Exemple d’instruction pour créer une collection nommée avec les identifiants du fournisseur, l’une avec un point de terminaison de chat et l’autre avec un point de terminaison d’embedding :
Paramètres de la collection nommée
Toute API compatible OpenAI (par ex. vLLM, Ollama, LiteLLM) peut être utilisée en définissant
provider = 'openai' et en pointant endpoint vers votre service.Sélection des identifiants
- la clé
credentialsde sa map de paramètres, lorsqu’elle est présente ; - sinon, le paramètre d’identifiant par défaut applicable :
ai_function_text_default_credentialspour les fonctions de texte (aiGenerate,aiClassify,aiFilter,aiExtract,aiTranslate,aiRedact) ;ai_function_embedding_default_credentialspour les fonctions d’embedding (aiEmbed,aiSimilarity).
aiFilter, qui renvoie un UInt8 et peut être utilisée directement dans WHERE :
Map de paramètres
Map(String, String) de paramètres. Toutes les valeurs sont des chaînes de caractères (mettez les nombres entre apostrophes, par ex. '0.2'). Les clés inconnues sont rejetées. Une clé présente remplace la valeur correspondante de la collection nommée ; une clé absente se rabat sur la collection nommée (pour model/max_tokens) ou sur la valeur par défaut intégrée. Les exceptions sont les fonctions d’embedding (aiEmbed, aiSimilarity), qui prennent model comme argument positionnel obligatoire (par ex. aiEmbed(text, model[, params]), aiSimilarity(text1, text2, model[, params])) et renvoient une erreur si celui-ci est défini à la place dans la map de paramètres ou la collection nommée. Cela permet de garantir des embeddings reproductibles.
Les paramètres suivants sont communs à toutes les fonctions d’IA :
Certaines fonctions acceptent des paramètres supplémentaires qui leur sont propres (tels que
max_tokens, temperature, system_prompt, instructions et dimensions). Consultez la référence de chaque fonction ci-dessous pour connaître les paramètres qu’elle accepte ainsi que leurs valeurs par défaut.
Paramètres au niveau de la requête
ai_function_.
Restreindre les hôtes de point de terminaison
endpoint d’une collection nommée d’IA est une destination sortante à laquelle le serveur se connecte avec sa propre identité, en transmettant potentiellement (si elle est spécifiée) l’api_key de la collection nommée dans les en-têtes de requête. Par défaut, ClickHouse autorise n’importe quel hôte. Pour limiter les fonctions à un ensemble spécifique de fournisseurs, configurez remote_url_allow_hosts dans la configuration du serveur, par exemple :
Sécurité du transport (HTTP vs HTTPS)
endpoint. Il n’existe aucun chiffrement du corps de la requête au niveau de l’application ; la protection des données en transit dépend entièrement du schéma :
https://— la connexion utilise TLS. Le corps de la requête (texte d’entrée, prompts) et l’api_keydans les en-têtes de la requête sont chiffrés en transit, et le certificat du fournisseur est validé. Utilisez cette option pour tout fournisseur distant.http://— la connexion n’est pas chiffrée. Le corps de la requête et l’api_keysont envoyés en clair. Utilisez cette option uniquement pour un fournisseur de confiance sur un réseau privé (par exemple, une instance localevLLMouOllama).
endpoint qui enverrait des données en clair à un hôte distant : tout point de terminaison non HTTPS dont l’hôte n’est pas une adresse de bouclage lève une exception. Les hôtes de bouclage (localhost, 127.0.0.0/8, ::1) sont exemptés, de sorte qu’un serveur de modèle local http://localhost fonctionne immédiatement. Pour autoriser un point de terminaison http:// en clair sur un hôte distant, définissez ai_function_allow_insecure_endpoint sur 1. Cette vérification est indépendante de remote_url_allow_hosts : ce paramètre est une liste d’hôtes autorisés et n’inspecte pas le schéma de l’URL, si bien qu’un point de terminaison http:// pointant vers un hôte autorisé est quand même accepté.
Notez que, dans les deux cas, le fournisseur reçoit les données d’entrée en clair après la terminaison TLS ; TLS protège les données uniquement sur le trajet réseau entre le serveur et le fournisseur.
Fournisseurs pris en charge
Observabilité
Interrogez ces événements :
aiClassify
credentials de la map de paramètres optionnelle, ou depuis le paramètre
ai_function_text_default_credentials lorsque la map l’omet.
Syntaxe
AIClassify
Arguments
text— Texte à classifier.Stringcategories— Liste constante des libellés des catégories candidates.Array(String)params—Map(String, String)constant facultatif contenant des paramètres. Clés spécifiques à la fonction :temperature(température d’échantillonnage contrôlant l’aléa ; par défaut0.0),max_tokens(nombre maximal de tokens de sortie par appel ; par défaut1024). Les paramètres communscredentialsetmodels’appliquent également (voir Fonctions d’IA).Map(String, String)
ai_function_throw_on_error est désactivé. String
Exemples
Classifier le sentiment
Query
Response
Query
aiEmbed
Array(Float32).
Dans un même block de rows, les entrées sont regroupées en batches de
ai_function_embedding_max_batch_size
entrées maximum par requête HTTP afin de réduire le surcoût de chaque appel.
Les identifiants (une collection nommée indiquant le fournisseur, le point de terminaison et, éventuellement, une clé API)
sont récupérées à partir de la clé credentials de la map de paramètres, ou du
paramètre ai_function_embedding_default_credentials lorsque la map ne la contient pas. Notez que aiEmbed utilise un
paramètre d’identifiant par défaut distinct de celui des fonctions de texte, car un point de terminaison d’embeddings diffère
d’un point de terminaison de chat.
Le model est un argument positionnel obligatoire (un String constant). Contrairement aux fonctions de texte,
aiEmbed ne lit pas model à partir de la collection nommée ni de la map de paramètres. Une collection nommée
qui définit model est rejetée.
Le paramètre facultatif dimensions, lorsqu’il est pris en charge par le modèle (par exemple les text-embedding-3-* d’OpenAI),
demande un vecteur de la taille indiquée ; sinon, la taille native du modèle est renvoyée.
Syntaxe
AIEmbed
Arguments
text— Texte à encoder.Stringmodel— Nom du modèle d’embedding.const Stringparams—Map(String, String)constante facultative de paramètres. Clé propre à la fonction :dimensions(dimension cible du vecteur de sortie ;0ou l’absence de valeur signifie la taille native du modèle). Le paramètre communcredentialss’applique également (voir Fonctions d’IA).Map(String, String)
ai_function_throw_on_error est désactivé, ou si un quota a été dépassé et que ai_function_throw_on_quota_exceeded est désactivé. Array(Float32)
Exemples
Encoder une seule chaîne (credentials peut être omis si le paramètre ai_function_embedding_default_credentials est défini)
Query
Query
Query
aiExtract
'the main complaint'), soit un
schéma au format JSON de la forme '{"field_a": "description of field a", "field_b": "description of field b"}'.
En mode instruction, la fonction renvoie la valeur extraite sous la forme d’une simple chaîne de caractères, ou une chaîne vide si rien n’a été trouvé.
En mode schéma, la fonction renvoie une chaîne JSON représentant un objet dont les clés correspondent au schéma demandé ; les champs manquants sont null.
Les identifiants (une collection nommée qui spécifie le fournisseur, le modèle, le point de terminaison et, éventuellement, une clé API)
sont pris dans la clé credentials de la map de paramètres facultative, ou dans le
paramètre ai_function_text_default_credentials lorsque la map l’omet.
Syntaxe
AIExtract
Arguments
text— Texte à partir duquel extraire des informations.Stringinstruction_or_schema— Instruction d’extraction en texte libre, ou objet JSON constant décrivant les champs à extraire.const Stringparams—Map(String, String)constant optionnel de paramètres. Clés spécifiques à la fonction :temperature(température d’échantillonnage qui contrôle le caractère aléatoire ; valeur par défaut :0.0),max_tokens(nombre maximal de tokens de sortie par appel ; valeur par défaut :1024). Les paramètres communscredentialsetmodels’appliquent également (voir Fonctions d’IA).Map(String, String)
ai_function_throw_on_error est désactivé. String
Exemples
Instruction en texte libre
Query
Response
Query
aiFilter
UInt8) utilisable dans WHERE, PREWHERE et JOIN ... ON.
La fonction demande au modèle de répondre uniquement par true ou false en minuscules. Les requêtes échouées (lorsque
ai_function_throw_on_error est désactivé) et les réponses non reconnues sont mappées sur 0, de sorte que la ligne est filtrée.
Avertissement : Ne vous fiez pas aux résultats d’aiFilter sans les examiner attentivement. Les prédicats basés sur des LLM peuvent être incorrects
ou incohérents ; utilisez-les uniquement lorsque les faux positifs et les faux négatifs sont acceptables.
Les identifiants (une collection nommée spécifiant le fournisseur, le modèle, le point de terminaison et, éventuellement, une clé API)
sont extraits de la clé credentials de la map de paramètres facultative ou du paramètre
ai_function_text_default_credentials lorsque la map ne la contient pas.
Remarque : l’utilisation d’aiFilter dans JOIN ... ON évalue le LLM une fois par paire candidate et peut être coûteuse.
Syntaxe
AIFilter
Arguments
text— Texte à évaluer.Stringcondition— Condition constante, exprimée en langage naturel, à laquelle le texte doit répondre.Stringparams—Map(String, String)constant facultatif de paramètres. Clés propres à la fonction :temperature(température d’échantillonnage contrôlant l’aléa ; valeur par défaut :0.0),max_tokens(nombre maximal de tokens de sortie par appel ; valeur par défaut :1024). Les paramètres communscredentialsetmodels’appliquent également (voir Fonctions d’IA).Map(String, String)
1 si le texte répond à la condition, 0 sinon. Renvoie la valeur par défaut (0) si la requête échoue et que ai_function_throw_on_error est désactivé. UInt8
Exemples
Filtrer les avis négatifs
Query
Query
aiGenerate
credentials de la map de paramètres facultative, ou du
paramètre ai_function_text_default_credentials lorsque la map ne la contient pas.
La map de paramètres facultative peut également définir system_prompt (une instruction qui guide le
comportement du modèle, par ex. le ton, le format ou le rôle), temperature, max_tokens et model. Si system_prompt n’est
pas défini, la valeur par défaut est : You are a helpful assistant. Provide a clear and concise response.
Syntaxe
AIGenerate
Arguments
prompt— Le prompt ou la question de l’utilisateur à envoyer au modèle.Stringparams—Map(String, String)constant facultatif de paramètres. Clés propres à la fonction :temperature(température d’échantillonnage qui contrôle l’aléa ; valeur par défaut :0.7),max_tokens(nombre maximal de tokens de sortie par appel ; valeur par défaut :1024),system_prompt(instruction système constante guidant le comportement du modèle ; valeur par défaut : un prompt d’assistant générique). Les paramètres communscredentialsetmodels’appliquent également (voir Fonctions d’IA).Map(String, String)
ai_function_throw_on_error est désactivé. String
Exemples
Question simple
Query
Response
Query
Query
aiRedact
[REDACTED] par défaut, configurable via le
paramètre replacement). Le tableau categories limite les types de PII à masquer ; un tableau vide
utilise un ensemble par défaut de catégories courantes (nom, e-mail, numéro de téléphone, adresse, carte de crédit, adresse IP).
aiRedact demande au modèle de modifier uniquement les occurrences de PII détectées, mais la préservation du texte environnant reste
approximative : le modèle peut tout de même le modifier (voir l’avertissement ci-dessus). Les caractères de contrôle autres que la tabulation,
le saut de ligne et le retour chariot sont également remplacés par des espaces avant la requête ; la sortie n’est donc pas
identique octet pour octet aux entrées qui en contiennent.
Étant donné que aiRedact renvoie l’intégralité du texte d’entrée avec les PII remplacées, la sortie est environ aussi longue que l’entrée.
Définissez max_tokens (valeur par défaut : 1024) sur une valeur supérieure à la longueur de l’entrée en tokens ; une réponse tronquée en raison d’une limite trop basse
sera incomplète.
Syntaxe
AIRedact
Arguments
text— Texte à masquer.Stringcategories— Liste constante de catégories d’informations personnelles identifiables à masquer (par ex.['name', 'ssn', 'credit_card']). Un tableau vide utilise un ensemble par défaut de catégories courantes (nom, e-mail, numéro de téléphone, adresse, carte de crédit, adresse IP).Array(String)params—Map(String, String)constant facultatif de paramètres. Clés spécifiques à la fonction :temperature(température d’échantillonnage contrôlant le caractère aléatoire ; valeur par défaut :0.0),max_tokens(nombre maximal de tokens de sortie par appel ; valeur par défaut :1024— commeaiRedactrenvoie l’intégralité du texte, définissez cette valeur au-dessus de la longueur de l’entrée en tokens, faute de quoi la réponse risque d’être tronquée et incomplète),replacement(jeton qui remplace chaque span d’informations personnelles identifiables détecté ; valeur par défaut :[REDACTED]). Les paramètres communscredentialsetmodels’appliquent également (voir Fonctions d’IA).Map(String, String)
ai_function_throw_on_error est désactivé. String
Exemples
Masquer des catégories spécifiques
Query
Response
Query
aiSimilarity
-1 est attribué à des
vecteurs d’embedding opposés ; sur le plan sémantique, cela signifie que les textes dont les scores approchent -1 ont un sens opposé.
Un score de 0 signifie que les vecteurs sont orthogonaux : ils ne sont pas liés sémantiquement. Enfin, un score de 1
signifie que les vecteurs d’embedding pointent dans la même direction ; les textes dont les scores approchent 1 ont un sens
similaire. Il s’agit du complément de cosineDistance pour les mêmes embeddings
(aiSimilarity = 1 - cosineDistance(embedding1, embedding2)).
Le batching, les identifiants et le paramètre dimensions sont identiques à ceux d’aiEmbed, y compris le
paramètre d’identifiant par défaut ai_function_embedding_default_credentials.
Comme pour aiEmbed, model est un argument positionnel obligatoire (un String constant) et n’est pas lu depuis la
collection nommée ni la map de paramètres.
Syntaxe
AISimilarity
Arguments
text1— Premier texte.Stringtext2— Deuxième texte.Stringmodel— Nom du modèle d’embedding.const Stringparams—Map(String, String)constant facultatif de paramètres. Clé propre à la fonction :dimensions(dimension cible des embeddings ;0ou l’absence de valeur utilise la taille native du modèle). Le paramètre communcredentialss’applique également (voir Fonctions d’IA).Map(String, String)
[-1, 1], ou NULL si l’un des textes est NULL ou vide, si une requête d’embedding a échoué alors que ai_function_throw_on_error est désactivé, ou si un quota a été dépassé alors que ai_function_throw_on_quota_exceeded est désactivé. Nullable(Float32)
Exemples
Comparer deux chaînes (credentials peut être omis si le paramètre ai_function_embedding_default_credentials est défini)
Query
Query
Query
aiTranslate
instructions de la map de paramètres (par exemple, 'keep technical terms untranslated').
Les identifiants (une collection nommée spécifiant le fournisseur, le modèle, le point de terminaison et, éventuellement, une clé API)
sont extraits de la clé credentials de la map de paramètres facultative, ou du
paramètre ai_function_text_default_credentials lorsque la map ne la contient pas.
Syntaxe
AITranslate
Arguments
text— Texte à traduire.Stringtarget_language— Nom de la langue cible ou code BCP-47 (par ex.'French','es-MX').Stringparams—Map(String, String)constant facultatif de paramètres. Clés propres à la fonction :temperature(température d’échantillonnage contrôlant l’aléa ; valeur par défaut :0.3),max_tokens(nombre maximal de tokens de sortie par appel ; valeur par défaut :1024),instructions(instructions supplémentaires de style ou de dialecte pour le traducteur). Les paramètres communscredentialsetmodels’appliquent également (voir Fonctions d’IA).Map(String, String)
ai_function_throw_on_error est désactivé. String
Exemples
Traduire en français
Query
Response
Query