塑形器認知技能
Shaper 技能可用來重塑或修改技能集所建立之記憶體中擴充樹狀結構。 如果技能輸出無法直接對應至搜尋字段,您可以新增 Shaper 技能來建立搜尋索引或知識存放區所需的數據圖形。
此技能的主要使用案例包括:
您正在填入知識存放區。 知識存放區的數據表和對象的實體結構是透過投影來定義。 Shaper 技能會藉由建立可推送至投影的數據圖形來增加粒度。
您想要將多個技能輸出對應至搜尋索引中的單一結構,通常是複雜類型,如案例 1 中所述。
技能會產生多個輸出,但您想要合併成單一字段(不需要是複雜類型),如案例 2 中所述。 例如,將標題和作者合併成單一欄位。
技能會產生多個具有子元素的輸出,而且您想要將它們合併。 此使用案例 3 說明。
Shaper 技能的輸出名稱一律為「輸出」。 在內部,管線可以對應不同的名稱,例如如下列範例所示的 “analyzedText”,但 Shaper 技能本身會在回應中傳回「輸出」。 如果您要偵錯擴充的檔並注意命名差異,或您建置自定義技能並自行建構回應,這可能很重要。
注意
此技能未系結至 Azure AI 服務。 這是不可計費的,而且沒有 Azure AI 服務的主要需求。
@odata.type
Microsoft.Skills.Util.ShaperSkill
案例 1:複雜類型
假設您想要建立名為 analyzedText 的結構,其分別有兩個成員: 文字 和 情感。 在索引中,多部分可搜尋字段稱為 複雜類型 ,而且通常會在源數據有對應的複雜結構對應至該字段時建立。
不過,建立複雜類型的另一種方法是透過 Shaper 技能。 藉由在技能集中包含此技能,技能集處理期間的記憶體內部作業可以輸出具有巢狀結構的數據圖形,然後可對應至索引中的複雜類型。
下列範例技能定義會提供成員名稱做為輸入。
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"context": "/document/content/phrases/*",
"inputs": [
{
"name": "text",
"source": "/document/content/phrases/*"
},
{
"name": "sentiment",
"source": "/document/content/phrases/*/sentiment"
}
],
"outputs": [
{
"name": "output",
"targetName": "analyzedText"
}
]
}
範例索引
索引器會叫用技能集,而索引器需要索引。 索引中的複雜欄位表示可能看起來像下列範例。
"name":"my-index",
"fields":[
{ "name":"myId", "type":"Edm.String", "key":true, "filterable":true },
{ "name":"analyzedText", "type":"Edm.ComplexType",
"fields":[
{
"name":"text",
"type":"Edm.String",
"facetable":false,
"filterable":false,
"searchable":true,
"sortable":false },
{
"name":"sentiment",
"type":"Edm.Double",
"facetable":true,
"filterable":true,
"searchable":true,
"sortable":true }
}
技能輸入
提供此 Shaper 技能可用輸入的傳入 JSON 檔可能是:
{
"values": [
{
"recordId": "1",
"data": {
"text": "this movie is awesome",
"sentiment": 0.9
}
}
]
}
技能輸出
Shaper 技能會產生名為 analyzedText 的新元素,其中包含文字和情感的組合元素。 此輸出符合索引架構。 它會在 Azure AI 搜尋服務索引中匯入並編製索引。
{
"values": [
{
"recordId": "1",
"data":
{
"analyzedText":
{
"text": "this movie is awesome" ,
"sentiment": 0.9
}
}
}
]
}
案例 2:輸入匯總
在另一個範例中,假設在管線處理的不同階段,您已擷取書籍的標題,以及書籍不同頁面上的章節標題。 您現在可以建立由這些各種輸出組成的單一結構。
此案例的 Shaper 技能定義可能看起來像下列範例:
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"context": "/document",
"inputs": [
{
"name": "title",
"source": "/document/content/title"
},
{
"name": "chapterTitles",
"source": "/document/content/pages/*/chapterTitles/*/title"
}
],
"outputs": [
{
"name": "output",
"targetName": "titlesAndChapters"
}
]
}
技能輸出
在此情況下, Shaper 會將所有章節標題扁平化,以建立單一陣列。
{
"values": [
{
"recordId": "1",
"data": {
"titlesAndChapters": {
"title": "How to be happy",
"chapterTitles": [
"Start young",
"Laugh often",
"Eat, sleep and exercise"
]
}
}
}
]
}
案例 3:來自巢狀內容的輸入匯總
假設您有書籍的章節標題和章節編號,並且已在內容上執行實體辨識和關鍵片語,現在需要將不同技能的結果彙總成具有章節名稱、實體和關鍵詞組的單一圖形。
本範例會將選擇性 sourceContext
屬性新增至 「chapterTitles」 輸入。 source
和 sourceContext
屬性互斥。 如果輸入位於技能的內容中,您可以使用 source
。 如果輸入位於 與技能內容不同的 內容,請使用 sourceContext
。 sourceContext
需要您定義巢狀輸入,其中每個輸入都有 source
,可識別用來填入具名節點的特定元素。
此案例的 Shaper 技能定義可能看起來像下列範例:
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"context": "/document",
"inputs": [
{
"name": "title",
"source": "/document/content/title"
},
{
"name": "chapterTitles",
"sourceContext": "/document/content/pages/*/chapterTitles/*",
"inputs": [
{
"name": "title",
"source": "/document/content/pages/*/chapterTitles/*/title"
},
{
"name": "number",
"source": "/document/content/pages/*/chapterTitles/*/number"
}
]
}
],
"outputs": [
{
"name": "output",
"targetName": "titlesAndChapters"
}
]
}
技能輸出
在此情況下, Shaper 會建立複雜類型。 此結構存在於記憶體中。 如果您想要將它儲存到 知識存放區,您應該在定義儲存特性的技能集中建立投影。
{
"values": [
{
"recordId": "1",
"data": {
"titlesAndChapters": {
"title": "How to be happy",
"chapterTitles": [
{ "title": "Start young", "number": 1},
{ "title": "Laugh often", "number": 2},
{ "title": "Eat, sleep and exercise", "number: 3}
]
}
}
}
]
}