為其他語言的圖片產生說明

註

Azure AI 搜尋服務 可透過 Azure 入口網站、REST API 及 Azure SDK 取得。 它同時也是 Foundry IQ 的基礎,這是一個管理式知識層,能將企業內容轉化為可重複使用、權限感知的知識庫,供 Microsoft Foundry 入口網站中的代理使用。

Important

這些功能支援與其他 Microsoft 服務 及第三方服務的連結。 使用這些服務須遵守其各自的條款,可能導致資料處理或儲存超出 Azure 合規邊界,以及資料流入 Azure 合規邊界。

你有責任管理資料是否會超出組織的合規與地理邊界及相關影響,並確保適當的權限、邊界與核准被提供。

你有責任仔細審查並測試你在特定使用情境中所建置的應用程式,並做出所有適當的決策與客製化。 這包括實施你自己負責任的 AI 緩解措施,例如元提示、內容過濾器或其他安全系統,並確保你的應用程式符合適當的品質、可靠性、安全性與可信度標準。 欲了解更多資訊,請參閱Azure AI 搜尋服務透明度說明。

在本文中,了解如何利用 AI 增強功能與技能組生成標題。 圖片通常包含對搜尋情境有用的資訊。 你可以 將圖片向量化 ,以代表搜尋索引中的視覺內容。 或者,你也可以利用 AI 豐富化和技能集,從圖片中生成並提取可搜尋的 文字 。

GenAI 提示技能可以為你資料來源中的每張圖片生成描述,索引器會將該描述推送到搜尋索引中。 要查看這些描述,請執行會在回應中包含它們的查詢。

先決條件

要在技能組中處理影像內容,你需要:

  • 一個支援的數據來源。 我們推薦 Azure 儲存體。
  • 包含圖片的檔案或塊狀資料。
  • 對支援的資料來源進行讀取存取。 本文使用基於金鑰的認證,但索引器也可以使用搜尋服務身份與 Microsoft Entra ID 認證來連接。 對於角色型存取控制,請在資料來源上指派角色,讓服務識別能讀取存取。 如果你是在本地開發機器上測試,務必確保你也有支援的資料來源的讀取權限。
  • 設定為圖像操作的搜尋索引器。
  • 具有 GenAI Prompt 技能的技能集。
  • 一個搜尋索引,其中包含用以接收產生的文字輸出之欄位,並在索引器中設有輸出欄位對應以建立關聯。

你可以選擇性地定義投影,接受影像分析輸出進入 知識庫 ,用於資料探勘情境。

設定索引器以進行影像處理

在設定好原始檔案後,請在索引器設定中設定 imageAction 參數來啟用影像正規化。 影像正規化有助於讓影像在後續處理時更均勻。 影像正規化包含以下操作:

  • 大型影像會被調整至最大高度與寬度以保持一致。
  • 對於具有指定方向的元資料的影像,會調整影像旋轉以適應垂直載入。

請注意,啟用 imageAction(將此參數設為非 none)會依照 Azure AI 搜尋服務 價格 產生額外影像擷取費用。

  1. 建立或更新索引器 以設定組態屬性:

    {
      "parameters": {
        "configuration": {
          "dataToExtract": "contentAndMetadata",
          "parsingMode": "default",
          "imageAction": "generateNormalizedImages"
        }
      }
    }
    
  2. 設定 dataToExtract 為 contentAndMetadata (必需)。

  3. 確認 是 parsingMode 設定為 預設 (必須)。

    此參數決定索引中建立的搜尋文件的細緻度。 預設模式則建立一對一對應,使一個 blob 產生一份搜尋文件。 如果文件很大,或技能需要較小的文字區塊,你可以加入「文字分割」技能,將文件細分為頁面以便處理。 但對於搜尋案例,如果擴充包含影像處理,則每個文件需要一個 Blob。

  4. 設定 imageAction 以啟用增強樹中的 normalized_images 節點(這是必需的):

    • generateNormalizedImages 作為文件破解一部分,產生一組正規化影像。

    • generateNormalizedImagePerPage (僅適用於 PDF)產生一個正規化影像陣列,PDF 中的每一頁都被渲染成一張輸出影像。 對於非 PDF 檔案,此參數的行為類似於設定 generateNormalizedImages。 然而,設定 generateNormalizedImagePerPage 本身可能會讓索引操作的效能降低(尤其是大型文件),因為需要產生多張圖片。

  5. 可選擇性地調整產生的正規化影像的寬度或高度:

normalizedImageMaxWidth 以像素為單位。 預設值是2,000。 最高價值是10,000。

normalizedImageMaxHeight 以像素為單位。 預設值是2,000。 最高價值是10,000。

關於正規化影像

當 imageAction 被設定為none以外的值時,新normalized_images欄位將包含一組影像陣列。 每個影像都是一個複雜類型,具有以下成員:

影像成員 描述
資料 以 BASE64 編碼的 JPEG 格式正規化影像字串。
寬度 正規化影像的寬度(像素)。
高度 標準化影像的高度(像素單位)。
原始寬度 影像在正規化前的原始寬度。
原始高度 影像在正規化前的原始高度。
rotationFromOriginal 逆時針旋轉的度數,以產生標準化影像。 角度介於0度到360度之間。 此步驟會讀取由相機或掃描器產生的影像中元資料。 通常是90度的整數倍。
內容偏移量 影像擷取來源在 content 欄位內的字元位移。 此欄位僅適用於包含嵌入影像的檔案。 從 PDF 文件擷取的影像,其 contentOffset 一律位於文件中擷取所在頁面文字的結尾。 這表示圖片會出現在該頁面所有文字之後,無論圖片在頁面上原本的位置如何。
頁碼 若影像是從 PDF 擷取或渲染,此欄位包含該 PDF 的頁碼,從 1 開始。 如果圖片不是來自 PDF,這個欄位就是 0。

normalized_images 的範例值:

[
  {
    "data": "BASE64 ENCODED STRING OF A JPEG IMAGE",
    "width": 500,
    "height": 300,
    "originalWidth": 5000,  
    "originalHeight": 3000,
    "rotationFromOriginal": 90,
    "contentOffset": 500,
    "pageNumber": 2
  }
]

定義影像處理的技能組

本節補充技能 參考 條目,提供與影像處理相關的技能輸入、輸出與模式操作的背景說明。

  • 創建或更新技能組以增加技能。

當你建立好基本技能框架並設定好 Foundry 工具後,你可以專注於每個圖像技能,定義輸入與來源上下文,並將輸出映射到索引或知識庫中的欄位。

註

若想了解如何結合影像處理與下游自然語言處理的範例技能,請參考 REST 教學:利用 REST 與 AI 從Azure塊 生成可搜尋內容。 它展示了如何將技能影像輸出輸入實體識別與關鍵詞彙擷取。

影像處理的範例輸入

如前所述,影像會在文件破解過程中擷取,然後作為初步步驟進行正規化。 正規化影像是任何影像處理功能的輸入,且總是以兩種方式之一以增強文檔樹的形式表示:

  • /document/normalized_images/* 是針對整體處理的文件。
{
  "@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
  "context": "/document/normalized_images/*",
  "uri": "https://contoso.openai.azure.com/openai/deployments/contoso-gpt-4o/chat/completions?api-version=2025-01-01-preview",
  "apiKey": "<YOUR-API-KEY here>",
  "inputs": [
    {
      "name": "image",
      "source": "/document/normalized_images/*/data"
    },
    {
      "name": "systemMessage",
      "source": "='You are a useful artificial intelligence assistant that helps people.'"
    },
    {
      "name": "userMessage",
      "source": "='Describe what you see in this image in 20 words or less in Spanish.'"
    }
  ],
  "outputs": [
    {
      "name": "response",
      "targetName": "captionedImage"
    }
  ]
}

使用 JSON 結構回應搭配文字輸入的範例

這個範例展示了如何為語言模型使用結構化輸出。 目前這項功能主要由 OpenAI 語言模型支援,儘管未來可能會有所改變。

{
  "@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
  "context": "/document/content",
  "uri": "https://contoso.openai.azure.com/openai/deployments/contoso-gpt-4o/chat/completions?api-version=2025-01-01-preview",
  "apiKey": "<YOUR-API-KEY here>",
  "inputs": [
    {
      "name": "systemMessage",
      "source": "='You are a useful artificial intelligence assistant that helps people.'"
    },
    {
      "name": "userMessage",
      "source": "='How many languages are there in the world and what are they?'"
    }
  ],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "structured_output",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number"
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "total",
          "languages"
        ],
        "additionalProperties": false
      }
    }
  },
  "outputs": [
    {
      "name": "response",
      "targetName": "responseJsonForLanguages"
    }
  ]
}

將輸出對應到搜尋欄位

輸出文字以內部豐富文件樹中的節點表示,每個節點必須映射到搜尋索引中的欄位或知識庫的投影,才能讓內容在你的應用程式中可用。

首先,使用 「建立」或「更新 - 索引 」來新增欄位來接受技能輸出。

以下是欄位集合的範例:

  • content 是 Blob 內容。
  • metadata_storage_name包含檔案名稱(設retrievable為 true)。
  • metadata_storage_path 是 blob 的唯一路徑,是預設的文件鍵。
  • merged_content 是從 Text Merge 輸出的(嵌入圖片時非常有用)。
  • captioned_image 是技能輸出,必須是字串欄位,才能在搜尋索引中捕捉所有語言模型輸出。
"fields": [
  {
    "name": "content",
    "type": "Edm.String",
    "filterable": false,
    "retrievable": true,
    "searchable": true,
    "sortable": false
  },
  {
    "name": "metadata_storage_name",
    "type": "Edm.String",
    "filterable": true,
    "retrievable": true,
    "searchable": true,
    "sortable": false
  },
  {
    "name": "metadata_storage_path",
    "type": "Edm.String",
    "filterable": false,
    "key": true,
    "retrievable": true,
    "searchable": false,
    "sortable": false
  },
  {
    "name": "captioned_image",
    "type": "Edm.String",
    "filterable": false,
    "retrievable": true,
    "searchable": true,
    "sortable": false
  }
]

接著,使用 Update - Indexer 將技能集輸出(豐富樹中的節點)映射到索引欄位。

擴充文件是內部項目。 要將節點外部化於豐富文件樹中,請設定一個輸出欄位映射,指定哪個索引欄位接收節點內容。 豐富的資料會由你的應用程式透過索引欄位存取。 下列範例顯示擴充文件中的文字節點 (OCR 輸出),該節點會對應到搜尋索引中的文字欄位。

"outputFieldMappings": [
  {
    "sourceFieldName": "/document/normalized_images/*/captionedImage",
    "targetFieldName": "captioned_image"
  }
]

執行索引器以呼叫原始文件檢索、透過語言模型說明處理影像及索引。

驗證結果

對索引執行查詢以檢查影像處理結果。 請將 搜尋檔案總管 當作搜尋客戶端,或任何能發送 HTTP 請求的工具。 以下查詢選擇包含影像處理輸出的欄位。

POST /indexes/[index name]/docs/search?api-version=[api-version]
{
  "search": "A cat in a picture",
  "select": "metadata_storage_name, captioned_image"
}