在代理式擷取中呈現文件內嵌影像 (預覽版)

Note

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

Important

標記(預覽)的功能、能力或屬性不受服務等級協議涵蓋,也不建議用於生產工作負載,且在正式上架前可能會有所變動或受限。 Azure AI 搜尋服務 預覽條款適用於所有預覽功能,無論是獨立功能還是正式推出功能的一部分。

在代理檢索過程中,使用 影像服務 (預覽)來呈現嵌入於來源文件中的圖片(如圖表、圖表、資訊圖表、掃描表單及產品圖片),讓您的大型語言模型(LLM)在綜合答案時能同時推理視覺脈絡與文字。

啟用影像服務時,Azure AI 搜尋服務:

  • 在索引時,會從支援的文件中擷取圖片,並儲存在客戶提供的 Azure Blob 資產儲存庫中。

  • 在查詢時,於 擷取動作中擷取這些影像,進行 base64 編碼,並將其作為多模態內容注入產生綜合答案的 LLM 提示中。

本文將教你如何在知識庫啟用圖片服務、根據請求覆蓋圖片服務、檢查圖片服務統計,以及規劃儲存帳戶生命週期的需求。

使用支援

Azure portal Microsoft Foundry 入口網站 .NET SDK Python SDK Java 開發套件 JavaScript SDK REST API
❌ ❌ ✔️ ✔️ ✔️ ✔️ ✔️

先決條件

限制與考量

  • 影像服務僅能透過 retrieve API 在代理檢索中提供。 傳統 /docs/search 查詢若沒有自訂解決方案或設定,便無法將文件內嵌影像提供給下游答案合成。

  • 影像服務僅在 答案合成 輸出模式下執行。 extractiveData輸出模式會跳過影像傳遞。

  • 影像提供功能僅適用於以檔案為基礎的已編製索引知識來源,且這些知識來源已設定 assetStore,並且其已編製索引的區塊含有已填入的 image_path 值。

  • 在混合知識庫中,只有受支援的知識來源類型(blob、已編製索引的 OneLake 和已編製索引的 SharePoint)會為下游答案合成提供文件內嵌的影像。 其他類型仍能提供文本基礎。

  • 對於使用 ingestionPermissionOptions 來擷取文件層級權限 (包括 ACL、RBAC 範圍或 Microsoft Purview 敏感度標籤) 的知識來源,不支援映像服務。 資產儲存會建立一個底層的知識儲存,而知識儲存不支援權限繼承。

  • 擷取回應結構並未定義每個資產儲存影像路徑或傳送給模型的影像位元組欄位。 imageServing活動報表提供擷取並傳送至模型的影像的彙總統計資料。

  • 影像的存取在儲存帳號層級受控,獨立於索引內容的存取權限。 任何擁有資產儲存帳號讀取權限的身份都能取得其影像。

  • 不要在原始文件中儲存秘密(帳號金鑰、令牌、連線字串),因為內容可能會被回傳為接地資料。

  • 影像提供會因影像下載與多模態令牌處理而增加答案合成延遲。 在啟用和停用影像服務的情況下執行代表性查詢,並將回應延遲與回報的 imageServing 活動進行比較。

  • 內容理解能為 PDF 與 DOCX 檔案產生不同的影像結果。 若需要一致的嵌入影像擷取與口述,請將原始文件轉換為 PDF,或測試每種具有代表性內容的原始格式。

影像服務的運作方式

影像服務分為兩個階段:

  • 索引: 當你在知識來源上設定標準內容擷取和資產儲存時,產生的內容理解技能會語意上將文件分塊,以 Markdown 格式保留表格,並利用已設定的大型語言模型描述嵌入的圖形。 圖表描述會成為由嵌入技能進行向量化的增強版 Markdown 的一部分。 此技能也會將映像擷取至您的 Blob 資產存放區,並在重疊的區塊中新增 image_path 參考。

    當您設定資產存放區時,搜尋服務也會在知識來源旁佈建一個知識存放區,用來保存擷取出的影像成品。 你可以像檢查其他知識庫一樣檢查和管理這個知識庫。

  • 回收: 當擷取動作執行時啟用影像服務,搜尋服務會從資產儲存庫取得匹配影像,進行 base64 編碼,並將其作為多模態內容納入答案合成提示中。

設定資產儲存與應用程式存取

影像服務跨越三個信任界限。 在編製索引時,搜尋服務會將影像成品寫入您的成品儲存區。 在查詢時,搜尋服務會從資產儲存庫讀取影像。 如果應用程式需要在 UI 中渲染圖片,也會從資產儲存庫讀取資料。 將各路徑設定為遵循最小權限存取原則。

搜尋服務對資產存放區的存取

  • 搜尋服務使用 Microsoft Entra ID 和 受控識別。 在儲存體帳戶範圍內將身分指派為儲存體 Blob 資料參與者角色,因為索引子會寫入映像成品,而擷取動作會讀取這些映像。 當來源容器與資產容器共用同一個帳戶時,該角色也會提供來源 Blob 的讀取權限。

  • 不要在資產儲存容器啟用匿名公開存取。

應用程式對影像參照的存取

產生的索引會儲存資產存放區中圖片的 image_path 參照。 擷取回應結構並未為每個資產儲存影像路徑或傳送到模型的影像位元組定義專用欄位。 可選 sourceData 的是結構化參考資料,且 image_path 不是必須的。

要在應用程式中顯示索引圖片:

  1. 在資產儲存體帳戶範圍內,將應用程式的身分指派為儲存體 Blob 資料讀者角色。

  2. 將應用程式的身份設定為 搜尋索引資料閱讀器(Search Index Data Reader )角色,以便查詢產生的索引。

  3. 透過由應用程式控制的查詢或服務端點,從所產生的索引中取得已獲授權的 image_path。

  4. 驗證參考是否解析到預期的儲存體帳戶和資產容器。 在查找 blob 之前,先拒絕不受信任的路徑。

  5. 利用您應用程式的身分,從資產容器擷取產生的 blob 名稱。

這種分離讓你能獨立控制誰能瀏覽原始影像,而非誰能呼叫檢索 API。

在知識來源上設定資產儲存

在支援的索引知識來源 assetStore 中設定 ingestionParameters。 成品儲存區是您擁有的 Blob 容器,搜尋服務會將影像成品寫入其中。

關於特定來源的說明,請參見:

啟用影像服務的最小 Blob 知識來源如下所示:

PUT https://{service-name}.search.windows.net/knowledgesources/my-blob-ks?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "name": "my-blob-ks",
  "kind": "azureBlob",
  "azureBlobParameters": {
    "connectionString": "ResourceId=<storage-resource-id>",
    "containerName": "source-documents",
    "ingestionParameters": {
      "assetStore": {
        "connectionString": "ResourceId=<storage-resource-id>",
        "containerName": "image-assets"
      },
      "chatCompletionModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
          "deploymentId": "gpt-4o",
          "modelName": "gpt-4o"
        }
      },
      "embeddingModel": {
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
          "deploymentId": "text-embedding-3-large",
          "modelName": "text-embedding-3-large"
        }
      },
      "contentExtractionMode": "standard",
      "aiServices": {
        "uri": "https://{foundry-resource}.services.ai.azure.com"
      }
    }
  }
}

Note

  • 將 <storage-resource-id> 取代為 Azure 儲存體 帳戶的資源 ID。 ResourceId=<storage-resource-id>連線格式指示搜尋服務對兩個容器使用其管理身份。

  • 承載資產儲存庫的 Azure 儲存體 帳號必須在知識庫的整個生命週期內,持續對搜尋服務開放且可存取。 如果你更改網路規則、旋轉鍵、交換身份,或是以某種方式移動儲存帳號,導致搜尋服務無法讀取資產儲存,圖片服務就無法將這些圖片提供給模型。 比較 imagesRetrieved 與 imagesSentToModel 的擷取活動,並仔細規劃及測試儲存體帳戶的變更。

配置結果

、 、 assetStore 的組合disableImageVerbalizationchatCompletionModel決定了索引器儲存的內容以及模型在查詢時所看到的內容:

  • 資產存放區 + 語音化(預設):assetStore 已設定,disableImageVerbalization 保留為 false,chatCompletionModel 已設定。 索引器會將圖片持久化到資產儲存,並將文字描述儲存在索引中。 檢索活動可回報 verbalizationUsed 為 true。

  • 僅成品儲存區:已設定 assetStore,disableImageVerbalization 設定為 true,不需要 chatCompletionModel。 索引器會將圖片持久保存到資產商店,但不會產生文字描述。 檢索活動可回報 verbalizationUsed 為 false。

  • 無資產庫,模型集:assetStore 未設定,chatCompletionModel 已設定。 僅提供文字描述,無影像瑕疵。 影像服務不適用。

  • 沒有資產商店,沒有模型: 沒有影像處理。

驗證資產儲存的設定

請等待攝取完成後再繼續:

  • 請在 Azure 入口網站 查詢索引器狀態,或使用 Get Indexer Status(REST API)。

  • 檢查索引區塊是否有填入 image_path 欄位。 如果 image_path 是空的,請檢查索引器狀態、知識來源資產儲存設定、原始文件內容以及資產容器內容。

  • 檢查資產存放區容器。 您應該會看到索引子在擷取期間寫入的影像 Blob。

在知識庫上啟用影像提供功能

在知識庫定義內的知識來源參考中,將 enableImageServing 設定為 true。 此設定成為每個針對該知識來源的擷取請求的預設設定。

知識庫定義也會指定在查詢時用於答案生成的大型語言模型(LLM)。 這個設定與任何您在知識來源的chatCompletionModel上 (在建立索引期間會驅動映像語音化) 設定的ingestionParameters無關。

如果您的知識庫參考多個知識來源,請僅在已設定 enableImageServing 的支援檔案型索引種類上設定 assetStore。 不支援的類型(如搜尋索引、遠端 SharePoint 或網頁)仍提供文字基礎,但無法提供文件嵌入的圖片以供後續答案合成。

PUT https://{service-name}.search.windows.net/knowledgebases/my-kb?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "name": "my-kb",
  "knowledgeSources": [
    {
      "name": "my-blob-ks",
      "enableImageServing": true
    }
  ],
  "outputMode": "answerSynthesis",
  "models": [
    {
      "kind": "azureOpenAI",
      "azureOpenAIParameters": {
        "resourceUri": "https://{foundry-resource}.services.ai.azure.com",
        "deploymentId": "gpt-4o",
        "modelName": "gpt-4o"
      }
    }
  ]
}

驗證影像服務啟用

向知識庫端點發送 GET 請求,並確認知識來源參考包含 "enableImageServing": true。

用影像服務檢索

對知識庫呼叫 擷取作業。 若要針對每個請求覆寫知識庫的預設值,請在 enableImageServing 下的相符項目中設定 knowledgeSourceParams。

POST https://{service-name}.search.windows.net/knowledgebases/my-kb/retrieve?api-version=2026-08-01-preview
Content-Type: application/json
Authorization: Bearer {{search-access-token}}

{
  "retrievalReasoningEffort": { "kind": "medium" },
  "outputMode": "answerSynthesis",
  "includeActivity": true,
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "What's the wiring configuration shown in the installation guide?" }
      ]
    }
  ],
  "knowledgeSourceParams": [
    {
      "knowledgeSourceName": "my-blob-ks",
      "kind": "azureBlob",
      "enableImageServing": true
    }
  ]
}

Note

只有當 outputMode 為 answerSynthesis 時,影像服務才會執行。 使用 extractiveData 的請求會略過圖片提供,即使已設定 enableImageServing。

取回時會發生什麼事

對於與匹配內容相關的圖片參考,搜尋服務會從資產商店下載對應圖片,進行 base64 編碼,並以多模態內容傳送至下游的答案綜合模型。 檢查 activity.imageServing 中的彙總映像服務統計資料。 關於精確的回應形態,請參閱 Knowledge Retrieval - Retrieve (REST API)的參考文件。

驗證擷取行為

擷取回應可以提供以下影像服務訊號:

  • 當 includeActivity 為 activity 時,當服務記錄影像提供作業時,imageServing 陣列會回報該知識來源的 true 活動。

  • imagesSentToModel 值大於 0 表示該服務回報其已向下游答案合成模型提供影像。

優先順序規則

當知識庫定義與檢索請求都指定 enableImageServing時,檢索請求中的值優先。 完整的優先順序如下:

  1. 擷取要求中的 knowledgeSourceParams[].enableImageServing 值(若有設定)。
  2. 知識庫定義中對應的知識來源參考值(若設定為)。
  3. false (預設)。

下表總結了這九種組合。

知識庫定義(enableImageServing) 擷取要求 (enableImageServing) 啟用影像服務嗎?
true true Yes
true false No
true 未設定 Yes
false true Yes
false false No
false 未設定 No
未設定 true Yes
未設定 false No
未設定 未設定 No

檢視影像服務統計

當影像服務執行時,檢索回應會包含 imageServing 陣列中 activity 每個知識來源的一個區段。 使用此區塊比較從資產商店取得的影像與傳送給模型的影像。

"activity": [
  {
    "type": "azureBlob",
    "knowledgeSourceName": "my-blob-ks",
    "imageServing": {
      "verbalizationUsed": true,
      "imagesRetrieved": 5,
      "imagesSentToModel": 4,
      "totalImageSizeBytes": 248361
    }
  }
]

欄位會報告:

  • verbalizationUsed:用於檢索活動的服務報告映像言語化統計資料。

  • imagesRetrieved:從資產商店取得的圖片數量。

  • imagesSentToModel:傳送到下游模型的影像數量。

  • totalImageSizeBytes:傳送給模型的影像總大小(以位元組計)。

若 imagesRetrieved 大於 imagesSentToModel,則並非每張擷取的影像都傳送給模型。

分別檢查 verbalizationUsed 和 imagesSentToModel。 回應可以同時將 verbalizationUsed 回報為 true,以及傳送給模型的一張或多張映像。

端對端測試影像服務

請使用以下其中一個範例來測試完整設備:

這些範例會建立 Blob 知識來源和知識庫、比較停用與啟用影像服務時的擷取要求,並檢查影像服務統計資料。 他們也會使用獨立的萬用字元索引查詢來選取 image_path,並下載該資源。 這些範例會選取一個以分號分隔的參考項目、從相對路徑中移除投影前綴(例如 11.7:),或對絕對路徑進行 URL 解碼,並移除其開頭的 asset-container 區段。 這些轉換僅為範例行為,並非 retrieve API 的保證。 所選資產並不代表同一影像對特定回收反應有貢獻。

典型的A/B比較清單:

  • 選擇一個只能從圖表、圖表或掃描影像中回答的問題。

  • 使用 enableImageServing: false 執行擷取要求,並擷取答案。

  • 執行相同的取用請求 enableImageServing: true ,並比較答案、延遲和報告的活動。

  • 將答案差異視為觀察性的A/B訊號,而非影像造成差異的證據。 imagesSentToModel 的值大於 0 表示該服務回報已向模型提供影像。

清理資源

在刪除知識來源之前,先刪除知識庫。 刪除這些 Azure AI 搜尋服務 資源並不會刪除 Azure 儲存體 中的原始文件或投影影像塊。 只有當沒有保留的擷取或檢索管線仍然需要這些 Blob 時,才單獨刪除它們。

Troubleshooting

使用imageServing中的 活動區塊,作為您的第一項診斷。 下表列出常見症狀的檢查方法,但不假設單一原因。

癥狀 檢查
imagesRetrieved 是 0,用於圖像豐富的文件 檢查索引子狀態和警告、配對索引區塊中填充的 image_path 值以及資源容器中的映像 Blob。 確認來源文件包含可擷取的映像,且搜尋服務身分識別在儲存體帳戶範圍內具有儲存體 Blob 資料參與者。
取回的回應沒有 imageServing 區塊 確認請求設定 includeActivity 為 true。 在套用請求、知識庫和預設的優先順序後,檢查 enableImageServing 的生效值。 確認 outputMode 是 answerSynthesis,並檢查來源活動錯誤與警告。
verbalizationUsed 和你預期的不太一樣 請檢查 disableImageVerbalization、 chatCompletionModel、以及最新的索引器狀態。 獨立於 imagesSentToModel 對 verbalizationUsed 進行檢查。 回應可以指出一併傳送的語音內容和圖片。
啟用影像服務後,答案合成失敗或逾時 比較啟用或關閉影像服務時的代表性請求。 檢查活動錯誤與警告、答案綜合模型部署狀態、模型與儲存帳號的搜尋服務身份權限,以及資產與儲存的可用性。
你的應用程式無法顯示經個別查詢的 image_path 確認獨立索引查詢會回傳可用的 image_path、所參照的 blob 確實存在,而且應用程式可在不依賴 retrieve 的情況下獨立存取該 blob。 檢查應用程式身分識別是否具有用於索引查詢的搜尋索引資料讀者,以及在資產儲存體帳戶範圍內具有儲存體 Blob 資料讀者。