Partager via


AI_GENERATE_CHUNKS (Transact-SQL)

S’applique à : SQL Server 2025 (17.x) Azure SQL DatabaseSQL database in Microsoft Fabric

AI_GENERATE_CHUNKS est une fonction table qui crée des « blocs » ou des fragments de texte basés sur un type, une taille et une expression source.

Niveau de compatibilité 170

AI_GENERATE_CHUNKS nécessite que le niveau de compatibilité soit au moins 170. Lorsque le niveau est inférieur à 170, le moteur de base de données ne peut pas trouver la AI_GENERATE_CHUNKS fonction.

Pour modifier le niveau de compatibilité d’une base de données, reportez-vous à Afficher ou modifier le niveau de compatibilité d’une base de données.

Syntaxe

Conventions de la syntaxe Transact-SQL

AI_GENERATE_CHUNKS (source = text_expression
                    , chunk_type = FIXED
                   [ , chunk_size = numeric_expression ]
                   [ , overlap = numeric_expression ]
                   [ , enable_chunk_set_id = numeric_expression ]
)

Les arguments

source

Expression de n’importe quel type de caractère (par exemple, nvarchar, varchar, nchar ou char).

chunk_type

Littéral de chaîne nommant le type ou la méthode pour segmenter le texte/document et ne peut pas être NULL ou une valeur d’une colonne.

Valeurs acceptées pour cette version :

  • FIXED

chunk_size

Quand chunk_type c’est FIXEDle cas, ce paramètre définit la taille du nombre de caractères de chaque bloc spécifié sous la forme d’une variable, d’un littéral ou d’une expression scalaire de type tinyint, smallint, int ou bigint. chunk_size ne peut pas être NULL, négatif ou zéro (0). Ce paramètre est également requis lors de l’utilisation d’un chunk_type objet FIXED.

chevauchement

Le paramètre de chevauchement détermine le pourcentage du texte précédent qui doit être inclus dans le bloc actuel. Ce pourcentage est appliqué au chunk_size paramètre pour calculer la taille en caractères. La valeur de chevauchement peut être spécifiée sous la forme d’une variable, d’un littéral ou d’une expression scalaire de type tinyint, smallint, int ou bigint. Il doit s’agir d’un nombre entier compris entre zéro (0) et 50, inclus et ne peut pas être NULL ou négatif. La valeur par défaut est zéro (0).

enable_chunk_set_id

Expression int ou bit qui sert d’indicateur pour activer ou désactiver la chunk_set_id colonne de sortie ; colonne qui retourne un nombre pour aider le groupe à retourner des blocs appartenant au même source. Valeur d’activation de 1 la colonne. Si enable_chunk_set_id est omis, NULLou a une valeur de 0, la chunk_set_id colonne est désactivée et n’est pas retournée.

Types de retour

AI_GENERATE_CHUNKS retourne une table avec les colonnes suivantes :

Nom de colonne Type de données Descriptif
chunk Identique au type de données d’expression source Texte retourné qui a été segmenté à partir de l’expression source.
chunk_order bigint Séquence de nombres ordonnés qui concerne l’ordre de chaque bloc a été traitée à partir 1 de et d’augmentation par 1.
chunk_offset bigint Position du segment des données/documents sources par rapport au début du processus de segmentation.
chunk_length Int Longueur de caractère du bloc de texte retourné.
chunk_set_id bigint Colonne facultative qui contient un ID qui regroupe tous les blocs d’une expression source, d’un document ou d’une ligne. Si plusieurs documents ou lignes sont segmentés dans une seule transaction, ils reçoivent chacun une valeur différente chunk_set_id. La visibilité est contrôlée par le enable_chunk_set_id paramètre.

Exemple de retour

Voici un exemple des résultats de retour avec AI_GENERATE_CHUNKS les paramètres suivants :

  • Type de bloc de FIXED.

  • Taille de bloc de 50 caractères.

  • L’option « chunk_set_id » est activée.

  • Texte de bloc : All day long we seemed to dawdle through a country which was full of beauty of every kind. Sometimes we saw little towns or castles on the top of steep hills such as we see in old missals; sometimes we ran by rivers and streams which seemed from the wide stony margin on each side of them to be subject to great floods.

morceau chunk_order chunk_offset chunk_length chunk_set_id
All day long we seemed to dawdle through a country 1 1 50 1
which was full of beauty of every kind. Sometimes 2 51 50 1
we saw little towns or castles on the top of stee 3 101 50 1
p hills such as we see in old missals; sometimes w 4 151 50 1
e ran by rivers and streams which seemed from the 5 201 50 1
wide stony margin on each side of them to be subje 6 251 50 1
ct to great floods. 7 301 19 1

Remarques

AI_GENERATE_CHUNKS peut être utilisé sur une table avec plusieurs lignes. En fonction de la taille du bloc et de la quantité de texte en cours de segmentation, le jeu de résultats indique quand il démarre une nouvelle colonne ou un document avec la chunk_set_id colonne. Dans l’exemple suivant, les chunk_set_id modifications sont apportées lorsqu’elles terminent la segmentation du texte de la première ligne et se déplacent vers la seconde. Valeurs pour chunk_order et chunk_offset réinitialisation pour indiquer un nouveau point de départ.

CREATE TABLE textchunk (text_id INT IDENTITY(1,1) PRIMARY KEY, text_to_chunk nvarchar(max));
GO

INSERT INTO textchunk (text_to_chunk)
VALUES
('All day long we seemed to dawdle through a country which was full of beauty of every kind. Sometimes we saw little towns or castles on the top of steep hills such as we see in old missals; sometimes we ran by rivers and streams which seemed from the wide stony margin on each side of them to be subject to great floods.'),
('My Friend, Welcome to the Carpathians. I am anxiously expecting you. Sleep well to-night. At three to-morrow the diligence will start for Bukovina; a place on it is kept for you. At the Borgo Pass my carriage will await you and will bring you to me. I trust that your journey from London has been a happy one, and that you will enjoy your stay in my beautiful land. Your friend, DRACULA')
GO

SELECT c.*
FROM textchunk t
CROSS APPLY
   AI_GENERATE_CHUNKS(source = text_to_chunk, chunk_type = FIXED, chunk_size = 50, enable_chunk_set_id = 1) c
morceau chunk_order chunk_offset chunk_length chunk_set_id
All day long we seemed to dawdle through a country 1 1 50 1
which was full of beauty of every kind. Sometimes 2 51 50 1
we saw little towns or castles on the top of stee 3 101 50 1
p hills such as we see in old missals; sometimes w 4 151 50 1
e ran by rivers and streams which seemed from the 5 201 50 1
wide stony margin on each side of them to be subje 6 251 50 1
ct to great floods. 7 301 19 1
My Friend, Welcome to the Carpathians. I am anxi 1 1 50 2
ously expecting you. Sleep well to-night. At three 2 51 50 2
to-morrow the diligence will start for Bukovina; 3 101 50 2
a place on it is kept for you. At the Borgo Pass m 4 151 50 2
y carriage will await you and will bring you to me 5 201 50 2
. I trust that your journey from London has been a 6 251 50 2
happy one, and that you will enjoy your stay in m 7 301 50 2
y beautiful land. Your friend, DRACULA 8 351 38 2

Exemples

Un. Segmenter une colonne de texte avec un type fixe et une taille de 100 caractères

L’exemple suivant utilise AI_GENERATE_CHUNKS pour segmenter une colonne de texte. Il utilise une chunk_type valeur de FIXED 100 caractères et une chunk_size valeur de 100 caractères.

SELECT c.chunk
FROM docs_table AS t
CROSS APPLY
    AI_GENERATE_CHUNKS (SOURCE = text_column, CHUNK_TYPE = FIXED, CHUNK_SIZE = 100) AS c;

B. Segmenter une colonne de texte avec chevauchement

L’exemple suivant utilise AI_GENERATE_CHUNKS pour segmenter une colonne de texte à l’aide du chevauchement. Il utilise la chunk_type de FIXED, une chunk_size de 100 caractères et un chevauchement de 10 %.

SELECT c.chunk
FROM docs_table AS t
CROSS APPLY
    AI_GENERATE_CHUNKS (SOURCE = text_column, CHUNK_TYPE = FIXED, CHUNK_SIZE = 100, OVERLAP = 10) AS c;

Chapitre C. Utiliser AI_GENERATE_EMBEDDINGS avec AI_GENERATE_CHUNKS

Cet exemple utilise AI_GENERATE_EMBEDDINGS pour AI_GENERATE_CHUNKS créer des incorporations à partir de blocs de texte, puis insère les tableaux de vecteurs retournés à partir du point de terminaison d’inférence du modèle IA dans une table.

INSERT INTO my_embeddings (chunked_text, vector_embeddings)
SELECT c.chunk,
       AI_GENERATE_EMBEDDINGS(c.chunk USE MODEL MyAzureOpenAIModel)
FROM table_with_text AS t
CROSS APPLY
    AI_GENERATE_CHUNKS (SOURCE = t.text_to_chunk, CHUNK_TYPE = FIXED, CHUNK_SIZE = 100) AS c;