Поделиться через


AI_GENERATE_CHUNKS (Transact-SQL) (предварительная версия)

Применимо к: Предварительная версия SQL Server 2025 (17.x)

Замечание

AI_GENERATE_CHUNKS в SQL Server 2025 в настоящее время находится в предварительной версии.

AI_GENERATE_CHUNKS — это табличное значение функция, которая создает фрагменты текста или фрагменты текста на основе типа, размера и исходного выражения.

Уровень совместимости 170

AI_GENERATE_CHUNKS Требуется, чтобы уровень совместимости был не менее 170. Если уровень меньше 170, ядро СУБД не может найти функцию AI_GENERATE_CHUNKS .

Чтобы изменить уровень совместимости базы данных, ознакомьтесь с разделом "Просмотр" или изменение уровня совместимости базы данных.

Синтаксис

Соглашения о синтаксисе Transact-SQL

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

Аргументы

источник

Выражение любого типа символа (например, nvarchar, varchar, nchar или char).

chunk_type

Строковый литерал, именующий тип или метод для блокирования текста или документа и не может быть NULL или значением из столбца.

Принятые значения для этого выпуска:

  • FIXED

chunk_size

Если chunk_type это FIXEDтак, этот параметр задает размер количества символов каждого блока, указанного как переменная, литерал или скалярное выражение типа tinyint, smallint, int или bigint. chunk_size не может быть NULL, отрицательным или нулевым (0). Этот параметр также требуется при использовании chunk_typeFIXED.

перекрытие

Параметр перекрытия определяет процент предыдущего текста, который должен быть включен в текущий блок. Этот процент применяется к chunk_size параметру для вычисления размера символов. Перекрывающееся значение можно указать как переменную, литерал или скалярное выражение типа tinyint, smallint, int или bigint. Оно должно быть целым числом от нуля (0) до 50, включительно и не может быть NULL или отрицательным. Значение по умолчанию равно нулю (0).

enable_chunk_set_id

Целочисленное или битовое выражение, которое служит флагом для включения или отключения chunk_set_id выходного столбца; столбец, возвращающий число, чтобы помочь группе возвращаемых блоков, принадлежащих тому же источнику. Значение 1 включает столбец. Если enable_chunk_set_id опущен или NULLимеет значение 0, chunk_set_id столбец отключен и не возвращается.

Типы возвращаемых данных

AI_GENERATE_CHUNKS возвращает таблицу со следующими столбцами:

Имя столбца Тип данных Описание
chunk То же, что и тип данных исходного выражения Возвращен текст, который был фрагментирован из исходного выражения.
chunk_order bigint Последовательность упорядоченных чисел, которая связана с порядком обработки каждого блока, начиная с 1 и увеличения 1.
chunk_offset bigint Позиция блока исходных данных или документа относительно начала процесса блокирования.
chunk_length int Длина символа возвращаемого фрагмента текста.
chunk_set_id bigint Необязательный столбец, содержащий идентификатор, который группирует все блоки исходного выражения, документа или строки. Если несколько документов или строк блокируются в одной транзакции, они имеют разные chunk_set_idзначения. Видимость управляется параметром enable_chunk_set_id .

Пример возврата

Ниже приведен пример возвращаемых результатов AI_GENERATE_CHUNKS со следующими параметрами:

  • Тип FIXEDблока .

  • Размер блока в 50 символов.

  • Включена chunk_set_id.

  • Фрагмент текста: 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.

кусок 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 Сто пятьдесят один 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

Замечания

AI_GENERATE_CHUNKS можно использовать в таблице с несколькими строками. В зависимости от размера блока и объема фрагментированного текста результирующий набор указывает, когда он запускает новый столбец или документ с столбцом chunk_set_id . В следующем примере изменения при chunk_set_id завершении фрагментирования текста первой строки и переход на второй. Значения для chunk_order и chunk_offset сброса, чтобы указать новую начальную точку.

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
кусок 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 Сто пятьдесят один 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 Сто пятьдесят один 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

Примеры

А. Блокирование текстового столбца с фиксированным типом и размером 100 символов

В следующем примере используется AI_GENERATE_CHUNKS блокирование текстового столбца. Он использует chunk_typeFIXED 100 символов и chunk_size 100 символов.

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

В. Блокирование текстового столбца с перекрытием

В следующем примере используется AI_GENERATE_CHUNKS блокирование текстового столбца с помощью перекрытия. Он использует chunk_type FIXED, chunk_size 100 символов и перекрывающийся 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

С. Использование AI_GENERATE_EMBEDDINGS с AI_GENERATE_CHUNKS

В этом примере используется AI_GENERATE_EMBEDDINGS для AI_GENERATE_CHUNKS создания внедренных фрагментов текста, а затем вставляет возвращенные массивы векторов из конечной точки вывода модели ИИ в таблицу.

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