Compartir a través de


AI_GENERATE_CHUNKS (Transact-SQL) (versión preliminar)

Se aplica a: VERSIÓN PRELIMINAR de SQL Server 2025 (17.x)

Nota:

AI_GENERATE_CHUNKS en SQL Server 2025 está actualmente en versión preliminar.

AI_GENERATE_CHUNKS es una función con valores de tabla que crea "fragmentos" o fragmentos de texto basados en un tipo, tamaño y expresión de origen.

Nivel de compatibilidad 170

AI_GENERATE_CHUNKS requiere que el nivel de compatibilidad sea al menos 170. Cuando el nivel es inferior a 170, el motor de base de datos no puede encontrar la AI_GENERATE_CHUNKS función.

Para cambiar el nivel de compatibilidad de una base de datos, consulte Ver o cambiar el nivel de compatibilidad de una base de datos.

Sintaxis

Convenciones de sintaxis de Transact-SQL

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

Argumentos

de origen

Expresión de cualquier tipo de carácter (por ejemplo, nvarchar, varchar, nchar o char).

chunk_type

Literal de cadena que denomina el tipo o método para fragmentar el texto o documento y no puede ser NULL ni un valor de una columna.

Valores aceptados para esta versión:

  • FIXED

chunk_size

Cuando chunk_type es FIXED, este parámetro establece el tamaño de recuento de caracteres y palabras de cada fragmento especificado como una variable, un literal o una expresión escalar de tipo tinyint, smallint, int o bigint. chunk_size no puede ser NULL, negativo o cero (0).

solapar

El parámetro de superposición determina el porcentaje del texto anterior que se debe incluir en el fragmento actual. Este porcentaje se aplica al chunk_size parámetro para calcular el tamaño en caracteres. El valor de superposición se puede especificar como una variable, un literal o una expresión escalar de tipo tinyint, smallint, int o bigint. Debe ser un número entero entre cero (0) y 50, ambos incluidos, y no puede ser NULL o negativo. El valor predeterminado es cero (0).

enable_chunk_set_id

Expresión int o bit que actúa como una marca para habilitar o deshabilitar la chunk_set_id columna de salida; una columna que devuelve un número para ayudar al grupo a devolver fragmentos que pertenecen al mismo origen. Un valor de 1 habilita la columna. Si enable_chunk_set_id se omite, NULL o tiene un valor de 0, la chunk_set_id columna está deshabilitada y no se devuelve.

Tipos de retorno

AI_GENERATE_CHUNKS devuelve una tabla con las columnas siguientes:

Nombre de la columna Tipo de dato Descripción
chunk Igual que el tipo de datos de expresión de origen Texto devuelto que se ha fragmentado de la expresión de origen.
chunk_order Int Secuencia de números ordenados relacionados con el orden en que se procesó cada fragmento a partir 1 de y aumentando por 1.
chunk_offset Int Posición del fragmento del documento o datos de origen en relación con el inicio del proceso de fragmentación.
chunk_length Int Longitud de caracteres del fragmento de texto devuelto.
chunk_set_id Int Columna opcional que contiene un identificador que agrupa todos los fragmentos de una expresión de origen, un documento o una fila. Si varios documentos o filas se fragmentan en una sola transacción, cada uno recibe un valor diferente chunk_set_id. La visibilidad se controla mediante el enable_chunk_set_id parámetro .

Ejemplo de devolución

Este es un ejemplo de los resultados devueltos de AI_GENERATE_CHUNKS con los parámetros siguientes:

  • Tipo de fragmento de FIXED.

  • Tamaño de fragmento de 50 caracteres.

  • La opción "chunk_set_id" está habilitada.

  • Texto de fragmento: 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.

fragmento 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

Observaciones

AI_GENERATE_CHUNKS se puede usar en una tabla con varias filas. Según el tamaño del fragmento y la cantidad de texto fragmentado, el conjunto de resultados indica cuándo inicia una nueva columna o documento con la chunk_set_id columna. En el ejemplo siguiente, cambia chunk_set_id cuando termina de fragmentar el texto de la primera fila y se mueve al segundo. Los valores de chunk_order y chunk_offset también se restablecen para indicar un nuevo punto de partida.

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
fragmento 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

Ejemplos

Un. Fragmentar una columna de texto con el tipo FIJO y el tamaño de 100 caracteres

En el ejemplo siguiente se usa AI_GENERATE_CHUNKS para fragmentar una columna de texto. Usa un chunk_type de y un FIXED de chunk_size 100 caracteres.

SELECT
    c.chunk
FROM
   docs_table t
CROSS APPLY
   AI_GENERATE_CHUNKS(source = text_column, chunk_type = FIXED, chunk_size = 100) c

B. Fragmentación de una columna de texto con superposición

En el ejemplo siguiente se usa AI_GENERATE_CHUNKS para fragmentar una columna de texto mediante superposición. Usa el chunk_type de FIXED, un chunk_size de 100 caracteres y una superposición del 10 %.

SELECT
    c.chunk
FROM
   docs_table t
CROSS APPLY
   AI_GENERATE_CHUNKS(source = text_column, chunk_type = FIXED, chunk_size = 100, overlap = 10) c

C. Uso de AI_GENERATE_EMBEDDINGS con AI_GENERATE_CHUNKS

En este ejemplo se usa AI_GENERATE_EMBEDDINGS con AI_GENERATE_CHUNKS para crear incrustaciones a partir de fragmentos de texto y, a continuación, se insertan las matrices vectoriales devueltas desde el punto de conexión de inferencia del modelo de IA en una tabla.

INSERT INTO
    my_embeddings (chunked_text, vector_embeddings)
SELECT
    c.chunk,
    AI_GENERATE_EMBEDDINGS(c.chunk USE MODEL MyAzureOpenAiModel)
FROM
    table_with_text t
CROSS APPLY
    AI_GENERATE_CHUNKS(source = t.text_to_chunk, chunk_type = FIXED, chunk_size = 100) c