備註
Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。
Important
標記(預覽)的功能、能力或屬性不受服務等級協議涵蓋,也不建議用於生產工作負載,且在正式上架前可能會有所變動或受限。 Azure AI 搜尋服務 預覽詞適用於所有預覽功能,無論是獨立功能還是一般可用功能的一部分。
Text Split 技能能將文字拆分成文字塊。 你可以指定要將文字拆成句子或特定長度的頁面。 位置元資料如偏移與序數位置也可作為輸出提供。 若下游技能有最大文字長度要求,例如將資料區塊傳入 Azure OpenAI 及其他模型提供者的嵌入技能,這項技能非常有用。 欲了解更多此情境資訊,請參閱 向量搜尋的區塊文件。
備註
這項技能不綁定於鑄造工具。 它不計費,也沒有 Foundry Tools 的鑰匙要求。
@odata.type
Microsoft.Skills.Text.SplitSkill
技能參數
參數依大小寫區分。
| 參數名稱 | Description |
|---|---|
textSplitMode |
不管是 pages 不是 sentences。 頁面有可設定的最大長度,但技能會避免截斷句子,因此實際長度可能會較短。 句子是一串在句尾標點處結束的字串,例如句點、問號或驚嘆號,前提是該語言有句尾標點符號。 |
maximumPageLength |
只有當 textSplitMode 設定為 pages時才適用。 當 unit 設為 characters時,此參數指的最大頁面長度(以字元單位)由 String.Length測量。 最低值是300,最高是50000,預設值是5000。 演算法會盡力在句子邊界處打破文字,因此每個區塊的大小可能略小於 maximumPageLength。 當 unit 設定為 azureOpenAITokens時,最大頁長即為模型的標記長度限制。 對於文字嵌入模型,頁面長度的一般建議為 512 個標記。 |
defaultLanguageCode |
(可選)以下語言代碼之一: am, bs, cs, da, de, en, es, et, fr, he, hi, hr, hu, fi, id, is, it, ja, ko, lv, no, nl, pl, pt-PT, pt-BR, ru, sk, sl, sr, sv, tr, ur, zh-Hans。 預設是英文(en)。 有幾點需要考慮:
|
pageOverlapLength |
只有當 textSplitMode 設定為 pages時才適用。 每頁起始時,字元數或標記數來自前一頁末尾。 如果這個參數設為 0,後續頁面就不會有重疊的文字。 此 範例 包含參數。 |
maximumPagesToTake |
只有當 textSplitMode 設定為 pages時才適用。 還原頁數。 預設值是 0,代表要回傳所有頁面。 如果只需要部分頁面,應該設定這個值。 此 範例 包含參數。 |
unit (預告) |
只有當 textSplitMode 設定為 pages時才適用。 指定是(預設)characters還是 azureOpenAITokens 。 設定單位會影響 maximumPageLength 和 pageOverlapLength。 |
azureOpenAITokenizerParameters (預告) |
物件,提供單位的額外參數 azureOpenAITokens 。 encoderModelName 是專用的分詞器,用於將文字轉換為分詞,對自然語言處理(NLP)任務至關重要。 不同模型使用不同的分詞器。 有效的數值包括 GPT-4 使用的預設值 cl100k_base。 其他有效的數值包括r50k_base、p50k_base和p50k_edit。 這個技能透過 allowedSpecialTokens 定義了一組在代幣化過程中允許的特殊標記集合。 特殊標記是你想要獨特處理的字串,確保它們在標記化過程中不會被分割。 例如,[“[START”]、[END]“]。 如果 tiktoken 函式庫因語言限制或其他意外行為而無法如預期執行分詞化,建議改用文字分割。 |
技能輸入
| 參數名稱 | Description |
|---|---|
text |
將文字拆分成子串。 |
languageCode |
(可選)文件的語言代碼。 如果你不了解文字輸入的語言(例如你使用 LanguageDetectionSkill 來偵測語言),可以省略這個參數。 如果你設定 languageCode 為不在支援列表中 defaultLanguageCode的語言,會發出警告且文字不會被分割。 |
技能產出
| 參數名稱 | Description |
|---|---|
textItems |
輸出是一個被提取的子字串陣列。
textItems 是輸出的預設名稱。 targetName 是可選的,但如果你有多個文字分割技能,務必設定 targetName 不要將第一個技能的資料覆蓋到第二個技能。 若 targetName 設定為 ,則用於輸出欄位映射或消耗技能輸出的下游技能,例如嵌入技能。 |
offsets |
輸出是一個被提取的偏移量陣列。 每個索引的值是一個物件,包含該索引中文字項目的偏移量,包含三種編碼方式:UTF-8、UTF-16 和 CodePoint。
offsets 是輸出的預設名稱。 targetName 是可選的,但如果你有多個文字分割技能,務必設定 targetName 不要將第一個技能的資料覆蓋到第二個技能。 若 targetName 設定為 ,則用於輸出欄位映射或消耗技能輸出的下游技能,例如嵌入技能。 |
lengths |
輸出是一個被提取的長度陣列。 每個索引的值是一個物件,包含該索引中文字項目的偏移量,包含三種編碼方式:UTF-8、UTF-16 和 CodePoint。
lengths 是輸出的預設名稱。 targetName 是可選的,但如果你有多個文字分割技能,務必設定 targetName 不要將第一個技能的資料覆蓋到第二個技能。 若 targetName 設定為 ,則用於輸出欄位映射或消耗技能輸出的下游技能,例如嵌入技能。 |
ordinalPositions |
輸出是一個序數陣列,對應於文本項目在原始文本中的位置。
ordinalPositions 是輸出的預設名稱。 targetName 是可選的,但如果你有多個文字分割技能,務必設定 targetName 不要將第一個技能的資料覆蓋到第二個技能。 若 targetName 設定為 ,則用於輸出欄位映射或消耗技能輸出的下游技能,例如嵌入技能。 |
範例定義
{
"name": "SplitSkill",
"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"description": "A skill that splits text into chunks",
"context": "/document",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"unit": "azureOpenAITokens",
"azureOpenAITokenizerParameters":{
"encoderModelName":"cl100k_base",
"allowedSpecialTokens": [
"[START]",
"[END]"
]
},
"maximumPageLength": 512,
"inputs": [
{
"name": "text",
"source": "/document/text"
},
{
"name": "languageCode",
"source": "/document/language"
}
],
"outputs": [
{
"name": "textItems",
"targetName": "pages"
}
]
}
範例輸入
{
"values": [
{
"recordId": "1",
"data": {
"text": "This is the loan application for Joe Romero, a Microsoft employee who was born in Chile and who then moved to Australia...",
"languageCode": "en"
}
},
{
"recordId": "2",
"data": {
"text": "This is the second document, which will be broken into several pages...",
"languageCode": "en"
}
}
]
}
範例輸出
{
"values": [
{
"recordId": "1",
"data": {
"pages": [
"This is the loan...",
"In the next section, we continue..."
],
"offsets": [
{
"utf8": 0,
"utf16": 0,
"codePoint": 0
},
{
"utf8": 146,
"utf16": 146,
"codePoint": 146
}
],
"lengths": [
{
"utf8": 146,
"utf16": 146,
"codePoint": 146
},
{
"utf8": 211,
"utf16": 211,
"codePoint": 211
}
],
"ordinalPositions" : [
1,
2
]
}
},
{
"recordId": "2",
"data": {
"pages": [
"This is the second document...",
"In the next section of the second doc..."
],
"offsets": [
{
"utf8": 0,
"utf16": 0,
"codePoint": 0
},
{
"utf8": 115,
"utf16": 115,
"codePoint": 115
}
],
"lengths": [
{
"utf8": 115,
"utf16": 115,
"codePoint": 115
},
{
"utf8": 209,
"utf16": 209,
"codePoint": 209
}
],
"ordinalPositions" : [
1,
2
]
}
}
]
}
備註
此範例設定 textItems 為 至 pagestargetName。 因為 targetName 是設定的, pages 你應該用來選擇文本分割技能輸出的數值。 在下游技能中,索引器輸出/document/pages/*欄位映射、知識庫投影與索引投影。
這個範例沒有設定 offsets、 lengths,也 ordinalPosition 沒有設定成其他名稱,所以你在下游技能中應該使用的值會保持不變。
offsets 和 lengths 是複數型別而非原語型,因為它們包含多種編碼類型的值。 你應該用來取得特定編碼的值,例如 UTF-8,會是這樣: /document/offsets/*/utf8。
分塊與向量化的範例
此範例用於整合向量化。
pageOverlapLength:重疊文字在 資料分塊 情境中非常有用,因為它能保留同一文件產生區塊間的連續性。maximumPagesToTake:頁數限制在 向量化 情境中非常有用,因為它幫助你控制在提供向量化的嵌入模型的最大輸入限制以下。
範例定義
此定義加入 pageOverlapLength 了 100 個字元和 maximumPagesToTake 1 個字元。
假設 maximumPageLength 是 5,000 字元(預設),接著 "maximumPagesToTake": 1 處理每個來源文件的前 5,000 字元。
此範例設定 textItems 為 至 myPagestargetName。 因為 targetName 是設定的, myPages 你應該用來選擇文本分割技能輸出的數值。 在下游技能中,索引器輸出/document/myPages/*欄位映射、知識庫投影與索引投影。
{
"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"textSplitMode" : "pages",
"maximumPageLength": 1000,
"pageOverlapLength": 100,
"maximumPagesToTake": 1,
"defaultLanguageCode": "en",
"inputs": [
{
"name": "text",
"source": "/document/content"
},
{
"name": "languageCode",
"source": "/document/language"
}
],
"outputs": [
{
"name": "textItems",
"targetName": "myPages"
}
]
}
取樣輸入(與前述範例相同)
{
"values": [
{
"recordId": "1",
"data": {
"text": "This is the loan application for Joe Romero, a Microsoft employee who was born in Chile and who then moved to Australia...",
"languageCode": "en"
}
},
{
"recordId": "2",
"data": {
"text": "This is the second document, which will be broken into several sections...",
"languageCode": "en"
}
}
]
}
取樣輸出(注意重疊)
在每個「textItems」陣列中,第一個項目的後續文字會被複製到第二個項目的開頭。
{
"values": [
{
"recordId": "1",
"data": {
"myPages": [
"This is the loan...Here is the overlap part",
"Here is the overlap part...In the next section, we continue..."
]
}
},
{
"recordId": "2",
"data": {
"myPages": [
"This is the second document...Here is the overlap part...",
"Here is the overlap part...In the next section of the second doc..."
]
}
}
]
}
錯誤案例
若某語言不支援,會產生警告。