Azure AI 搜尋中的知識存放區「投影」

投影會定義知識存放區接受來自 Azure AI 搜尋擴充管線內容的實體數據表、對象和檔案。 如果您要建立知識存放區,大部分的工作皆是定義和成形投影。

本文介紹投影概念和工作流程,讓您在開始撰寫程序代碼之前有一些背景。

投影是在 Azure AI 搜尋技能集中定義,但最終結果是 Azure 儲存體 中的數據表、物件和影像檔案投影。

Projections expressed in Azure Storage

投影和使用方式的類型

知識存放區是邏輯建構,其實際表示為 Azure 儲存體 中數據表、JSON 物件或二進位圖像檔的鬆散集合。

Projection 儲存體 使用方式
表格 Azure 資料表儲存體 用於最能表示為數據列和數據行的數據,或每當您需要數據細微表示法時(例如,作為數據框架)。 數據表投影可讓您使用 Shaper 技能來定義架構化圖形,或使用內嵌成形 來指定數據行和數據列。 您可以根據熟悉的正規化原則,將內容組織成多個數據表。 相同群組中的數據表會自動相關。
物件 Azure Blob 儲存體 當您需要在一個 JSON 檔中完整呈現數據和擴充時使用。 如同數據表投影,只有有效的 JSON 物件可以投影為物件,而成形可協助您執行此動作。
檔案 Azure Blob 儲存體 當您需要儲存標準化的二進位圖像檔時使用。

投影定義

投影是在技能集「knowledgeStore」 屬性下指定。 投影定義會在索引器調用期間使用,以擴充內容在 Azure 儲存體 中建立和載入物件。 如果您不熟悉這些概念,請從 AI 擴充開始進行簡介。

下列範例說明在 knowledgeStore 底下投影的位置,以及基本建構。 名稱、類型和內容來源組成投影定義。

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
      {
        "tables": [
          { "tableName": "ks-museums-main", "generatedKeyName": "ID", "source": "/document/tableprojection" },
          { "tableName": "ks-museumEntities", "generatedKeyName": "ID","source": "/document/tableprojection/Entities/*" }
        ],
        "objects": [
          { "storageContainer": "ks-museums", "generatedKeyName": "ID", "source": "/document/objectprojection" }
        ],
        "files": [ ]
      }
    ]

投影群組

投影是複雜集合的陣列,這表示您可以指定每個類型的多個集合。 通常只使用一個投影群組,但如果記憶體需求包含支援不同的工具和案例,您可能會使用多個投影群組。 例如,您可以使用一個群組來設計和偵錯技能集,而第二組會收集用於在線應用程式的輸出,其中第三組用於數據科學工作負載。

相同的技能集輸出是用來填入投影下的所有群組。 下列範例顯示兩個。

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
        {
            "tables": [],
            "objects": [],
            "files": []
        }, 
        {
            "tables": [],
            "objects": [],
            "files": []
        }
    ]
}

投影群組具有相互排他性和相關性的下列主要特性。

準則 描述
相互排他性 每個群組會與其他群組完全隔離,以支援不同的數據成形案例。 例如,如果您要測試不同的數據表結構和組合,您會將每個集合放在不同的投影群組中以進行 AB 測試。 每個群組都會從相同的來源 (擴充樹狀結構) 取得數據,但與任何對等投影群組的 table-object-file 組合完全隔離。
相關性 在投影群組中,數據表、對象和檔案中的內容是相關的。 知識存放區會使用產生的索引鍵作為通用父節點的參考點。 例如,假設您有包含影像和文字的檔。 您可以將文字投影到數據表,並將影像投影到二進位檔,而且數據表和物件都有包含檔案 URL 的數據行/屬性。

投影“來源”

source 參數是投影定義的第三個元件。 因為投影會儲存 AI 擴充管線中的數據,因此投影的來源一律是技能的輸出。 因此,輸出可能是單一字段(例如翻譯文字的欄位),但通常是數據圖形的參考。

數據圖形來自您的技能集。 在 Azure AI 搜尋中提供的所有內建技能中,有一種稱為 Shaper 技能的公用程式技能 ,可用來建立數據圖形。 您可以包含 Shaper 技能(視需要)來支援知識存放區中的投影。

圖形經常與表格投影搭配使用,其中圖形不僅會指定哪些數據列進入數據表,而且會建立哪些數據行(您也可以將圖形傳遞至物件投影)。

圖形可能很複雜,而且在這裡深入討論它們的範圍不足,但下列範例會簡短說明基本圖形。 Shaper 技能的輸出會指定為表格投影的來源。 數據表投影本身會是 「metadata-storage_path」、“reviews_text”、“reviews_title” 等數據行,如圖形中所指定。

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "ShaperForTables",
    "description": null,
    "context": "/document",
    "inputs": [
        {
            "name": "metadata_storage_path",
            "source": "/document/metadata_storage_path",
            "sourceContext": null,
            "inputs": []
        },
        {
          "name": "reviews_text",
          "source": "/document/reviews_text"
        }, 
        {
          "name": "reviews_title",
          "source": "/document/reviews_title"
        },
        {
          "name": "reviews_username",
          "source": "/document/reviews_username"
        },
    ],
    "outputs": [
      {
        "name": "output",
        "targetName": "mytableprojection"
      }
    ]
}

投影生命週期

投影具有系結至數據源中源數據的生命週期。 隨著源數據更新並重新編製索引,投影會隨著擴充的結果更新,以確保您的投影最終與您的數據源中的數據一致。 不過,投影也會獨立儲存在 Azure 儲存體 中。 刪除索引器或搜尋服務本身時,將不會刪除它們。

在應用程式中取用

執行索引器之後,請連線到投影,並取用其他應用程式和工作負載中的數據。

  • 使用 Azure 入口網站 來驗證物件建立和 Azure 儲存體 中的內容。

  • 使用 Power BI 進行數據探索。 當數據位於 Azure 資料表 儲存體 時,此工具最適合使用。 在 Power BI 中,您可以將資料操作到更容易查詢和分析的新數據表中。

  • 在數據科學管線中使用 Blob 容器中的擴充數據。 例如,您可以將 Blob 中的數據載入 Pandas DataFrame

  • 最後,如果您需要從知識存放區導出數據,Azure Data Factory 有連接器可匯出數據,並將其放在您選擇的資料庫中。

開始使用的檢查清單

回想一下,投影專屬於知識存放區,且不會用來建構搜尋索引。

  1. 在 Azure 儲存體 中,從存取密鑰取得 連接字串,並確認帳戶 儲存體 V2(一般用途 V2)。

  2. 在 Azure 儲存體 中,熟悉容器和數據表中現有的內容,以便您為投影選擇不具爭議的名稱。 知識存放區是數據表和容器的鬆散集合。 請考慮採用命名慣例來追蹤相關物件。

  3. 在 Azure AI 搜尋中, 啟用索引器中的擴充快取 (預覽), 然後 執行索引器 來執行技能集並填入快取。 這是預覽功能,因此請務必在索引器要求上使用預覽 REST API(api-version=2020-06-30-preview 或更新版本)。 填入快取之後,您可以免費修改知識存放區中的投影定義(只要技能本身未修改)。

  4. 在您的程式代碼中,所有投影都只定義在技能集中。 沒有適用於投影的索引器屬性(例如欄位對應或輸出欄位對應)。 在技能集定義中,您將著重於兩個領域:knowledgeStore 屬性和技能陣列。

    1. 在 knowledgeStore 底下 projections ,指定 區段中的數據表、對象、檔案投影。 本節會決定物件類型、物件名稱和數量(根據您定義的投影數目)。

    2. 從技能陣列中,判斷每個投影中 source 應該參考哪些技能輸出。 所有投影都有來源。 來源可以是上游技能的輸出,但通常是Shaper技能的輸出。 投影的組成是透過圖形來決定。

  5. 如果您要將投影新增至現有的技能集,請 更新技能集執行索引器

  6. 在 Azure 儲存體 檢查您的結果。 在後續的執行中,刪除 Azure 儲存體 中的物件或變更技能集中的項目名稱,以避免命名衝突。

  7. 如果您使用數據表投影,請檢查了解數據表記憶體的數據表服務數據模型和延展性和效能目標,以確定您的數據需求位於數據表記憶體記載的限制內。

下一步

檢閱每個投影類型的語法和範例。