Dela via


AI_GENERATE_CHUNKS (Transact-SQL) (förhandsversion)

Gäller för: Förhandsversion av SQL Server 2025 (17.x)

AI_GENERATE_CHUNKS är en tabellvärdesfunktion som skapar "segment" eller fragment av text baserat på en typ, storlek och ett källuttryck.

Kompatibilitetsnivå 170

AI_GENERATE_CHUNKS kräver att kompatibilitetsnivån är minst 170. När nivån är mindre än 170 kan databasmotorn inte hitta AI_GENERATE_CHUNKS funktionen.

Om du vill ändra kompatibilitetsnivån för en databas läser du Visa eller ändra kompatibilitetsnivån för en databas.

Syntax

Transact-SQL syntaxkonventioner

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

Argumentpunkter

källa

Ett uttryck av valfri teckentyp (till exempel nvarchar, varchar, nchar eller char).

chunk_type

En strängliteral som namnger typen eller metoden för att segmentera texten/dokumentet och får inte vara NULL eller ett värde från en kolumn.

Godkända värden för den här versionen:

  • FIXED

chunk_size

När chunk_type är FIXEDanger den här parametern teckenantalets storlek för varje segment som anges som en variabel, en literal eller ett skalärt uttryck av typen tinyint, smallint, int eller bigint. chunk_size får inte vara NULL, negativt eller noll (0). Den här parametern krävs också när du använder en chunk_type av FIXED.

överlappa

Parametern överlappning avgör procentandelen av föregående text som ska ingå i det aktuella segmentet. Den här procentandelen tillämpas på parametern chunk_size för att beräkna storleken i tecken. Överlappningsvärdet kan anges som en variabel, en literal eller ett skalärt uttryck av typen tinyint, smallint, int eller bigint. Det måste vara ett heltal mellan noll (0) och 50, inklusive och får inte vara NULL eller negativt. Standardvärdet är noll (0).

enable_chunk_set_id

Ett int - eller bituttryck som fungerar som en flagga för att aktivera eller inaktivera utdatakolumnen chunk_set_id . En kolumn som returnerar ett tal som hjälper gruppen att returnera segment som tillhör samma källa. Värdet 1 för aktiverar kolumnen. Om enable_chunk_set_id utelämnas, NULL, eller har värdet 0, chunk_set_id inaktiveras kolumnen och returneras inte.

Returtyper

AI_GENERATE_CHUNKS returnerar en tabell med följande kolumner:

Kolumnnamn Datatyp Beskrivning
chunk Samma som källuttrycksdatatyp Returnerad text som segmenterades från källuttrycket.
chunk_order bigint En sekvens med ordnade tal som relaterar till den ordning som varje segment bearbetades från och med och ökade 1med 1 .
chunk_offset bigint Positionen för segmentet för källdata/-dokumentet i förhållande till början av segmenteringsprocessen.
chunk_length Int Teckenlängd för det returnerade textsegmentet.
chunk_set_id bigint En valfri kolumn som innehåller ett ID som grupperar alla segment i ett källuttryck, dokument eller rad. Om flera dokument eller rader segmenteras i en enda transaktion får var och en olika chunk_set_id. Synligheten styrs av parametern enable_chunk_set_id .

Returexempel

Här är ett exempel på returresultatet för AI_GENERATE_CHUNKS med följande parametrar:

  • Segmenttyp av FIXED.

  • Segmentstorlek på 50 tecken.

  • "chunk_set_id" är aktiverat.

  • Segmenttext: 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.

segment 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

Anmärkningar

AI_GENERATE_CHUNKS kan användas i en tabell med flera rader. Beroende på segmentstorleken och mängden text som segmenteras anger resultatuppsättningen när en ny kolumn eller ett nytt dokument startas chunk_set_id med kolumnen. I följande exempel chunk_set_id ändras när den är klar med segmenteringen av texten på den första raden och flyttas till den andra. Värdena för och chunk_order återställs också för chunk_offset att indikera en ny startpunkt.

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

Exempel

A. Segmentera en textkolumn med FAST typ och storlek på 100 tecken

I följande exempel används AI_GENERATE_CHUNKS för att segmentera en textkolumn. Den använder en chunk_type av FIXED och en chunk_size av 100 tecken.

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. Segmentera en textkolumn med överlappning

I följande exempel används AI_GENERATE_CHUNKS för att segmentera en textkolumn med överlappning. Den använder chunk_type fixed, en chunk_size på 100 tecken och en överlappning på 10 procent.

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. Använd AI_GENERATE_EMBEDDINGS med AI_GENERATE_CHUNKS

Det här exemplet använder AI_GENERATE_EMBEDDINGS med AI_GENERATE_CHUNKS för att skapa inbäddningar från textsegment och infogar sedan de returnerade vektormatriserna från AI-modellens slutsatsdragningsslutpunkt i en tabell.

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;