Partilhar via


AI_GENERATE_CHUNKS (Transact-SQL)

Aplica-se a: SQL Server 2025 (17.x) Azure SQL Database SQLdatabase in Microsoft Fabric

AI_GENERATE_CHUNKS é uma função com valor de tabela que cria "pedaços" ou fragmentos de texto com base em um tipo, tamanho e expressão de origem.

Nível de compatibilidade 170

AI_GENERATE_CHUNKS requer que o nível de compatibilidade seja pelo menos 170. Quando o nível é inferior a 170, o Mecanismo de Banco de Dados não consegue localizar a AI_GENERATE_CHUNKS função.

Para alterar o nível de compatibilidade de um banco de dados, consulte Exibir ou alterar o nível de compatibilidade de um banco de dados.

Sintaxe

Transact-SQL convenções de sintaxe

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

Argumentos

fonte

Uma expressão de qualquer tipo de caractere (por exemplo, nvarchar, varchar, nchar ou char).

chunk_type

Um literal de cadeia de caracteres nomeando o tipo ou método para dividir o texto/documento e não pode ser NULL um valor de uma coluna.

Valores aceitos para esta versão:

  • FIXED

chunk_size

Quando chunk_type é FIXED, este parâmetro define o tamanho da contagem de caracteres de cada bloco especificado como uma variável, uma expressão literal ou escalar do tipo tinyint, smallint, int ou bigint. chunk_size não pode ser NULL, negativo ou zero (0). Este parâmetro também é necessário ao usar um chunk_type de FIXED.

sobreposição

O parâmetro overlap determina a porcentagem do texto anterior que deve ser incluída no bloco atual. Essa porcentagem é aplicada ao chunk_size parâmetro para calcular o tamanho em caracteres. O valor de sobreposição pode ser especificado como uma variável, uma expressão literal ou escalar do tipo tinyint, smallint, int ou bigint. Deve ser um número inteiro entre zero (0) e 50, inclusive, e não pode ser NULL ou negativo. O valor padrão é zero (0).

enable_chunk_set_id

Uma expressão int ou bit que serve como um sinalizador para habilitar ou desabilitar a chunk_set_id coluna de saída, uma coluna que retorna um número para ajudar a agrupar partes retornadas pertencentes à mesma fonte. Um valor de 1 habilita a coluna. Se enable_chunk_set_id for omitido, NULLou tiver um valor de , a 0 coluna será desabilitada chunk_set_ide não retornada.

Tipos de devolução

AI_GENERATE_CHUNKS Retorna uma tabela com as seguintes colunas:

Nome da coluna Tipo de dados Descrição
chunk O mesmo que o tipo de dados de expressão de origem Texto retornado que foi fragmentado da expressão de origem.
chunk_order bigint Uma sequência de números ordenados que se relaciona com a ordem em que cada bloco foi processado começando com 1 e aumentando em 1.
chunk_offset bigint Posição do bloco dos dados/documento de origem em relação ao início do processo de fragmentação.
chunk_length Int Comprimento do caractere do bloco de texto retornado.
chunk_set_id bigint Uma coluna opcional que contém uma ID que agrupa todas as partes de uma expressão, documento ou linha de origem. Se vários documentos ou linhas forem agrupados em uma única transação, cada um receberá um chunk_set_idarquivo . A visibilidade é controlada pelo enable_chunk_set_id parâmetro.

Exemplo de retorno

Aqui está um exemplo dos resultados de retorno de AI_GENERATE_CHUNKS com os seguintes parâmetros:

  • Tipo de bloco de FIXED.

  • Tamanho do bloco de 50 caracteres.

  • O 'chunk_set_id' está ativado.

  • Fragmentar o texto: 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.

pedaço 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

Observações

AI_GENERATE_CHUNKS pode ser usado em uma tabela com várias linhas. Dependendo do tamanho do bloco e da quantidade de texto a ser fragmentado, o conjunto de resultados indica quando inicia uma nova coluna ou documento com a chunk_set_id coluna. No exemplo a seguir, as chunk_set_id alterações quando ele termina de fragmentar o texto da primeira linha e se move para a segunda. Os valores para chunk_order e chunk_offset também redefinir para indicar um novo ponto 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
pedaço 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

Exemplos

Um. Fragmentar uma coluna de texto com tipo FIXO e tamanho de 100 caracteres

O exemplo a seguir usa AI_GENERATE_CHUNKS para dividir uma coluna de texto. Ele usa um chunk_type de FIXED e um chunk_size de 100 caracteres.

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. Fragmentar uma coluna de texto com sobreposição

O exemplo a seguir usa AI_GENERATE_CHUNKS para dividir uma coluna de texto usando sobreposição. Ele usa o chunk_type de FIXO, uma chunk_size de 100 caracteres e uma sobreposição 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;

C. Use AI_GENERATE_EMBEDDINGS com AI_GENERATE_CHUNKS

Este exemplo usa AI_GENERATE_EMBEDDINGS com AI_GENERATE_CHUNKS para criar incorporações a partir de blocos de texto e, em seguida, insere as matrizes vetoriais retornadas do ponto de extremidade de inferência do modelo de IA em uma tabela.

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;