Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Usługa Azure AI Search umożliwia wyodrębnianie i indeksowanie tekstu i obrazów z dokumentów PDF przechowywanych w usłudze Azure Blob Storage. Ten samouczek pokazuje, jak utworzyć wielomodalny potok indeksowania, który dzieli dane przy użyciu wbudowanej funkcji dzielenia tekstu i używa werbalizacji obrazów do ich opisywania. Przycięte obrazy są przechowywane w magazynie wiedzy, a zawartość wizualna jest opisana w języku naturalnym i umieszczana wraz z tekstem w indeksie wyszukiwania.
Aby uzyskać werbalizacje obrazów, każdy wyodrębniony obraz jest przekazywany do umiejętności GenAI Prompt (wersja podglądowa), która wywołuje model uzupełniania czatu w celu wygenerowania tekstowego, zwięzłego opisu. Te opisy wraz z oryginalnym tekstem dokumentu są następnie osadzone w reprezentacjach wektorowych przy użyciu modelu osadzania tekstu w usłudze Azure OpenAI—3-large. Wynikiem jest pojedynczy indeks zawierający zawartość z możliwością wyszukiwania z obu modalności: tekst i zwerbalizowane obrazy.
W tym samouczku użyjesz następujących funkcji:
36-stronicowy dokument PDF, który łączy bogatą zawartość wizualną, taką jak wykresy, infografiki i zeskanowane strony, z tradycyjnym tekstem.
Indeksator i zestaw umiejętności umożliwiający utworzenie potoku indeksowania obejmującego wzbogacanie sztucznej inteligencji za pomocą umiejętności.
Umiejętność ekstrakcji dokumentów do wyodrębniania znormalizowanych obrazów i tekstu. Umiejętność dzielenia tekstu dzieli dane.
Umiejętność monitu GenAI (wersja zapoznawcza), która wywołuje model czatu w celu tworzenia opisów zawartości wizualnej.
Indeks wyszukiwania skonfigurowany do przechowywania werbalizacji tekstu i obrazów. Część zawartości jest wektoryzowana na potrzeby wyszukiwania podobieństwa opartego na wektorach.
W tym samouczku przedstawiono niższo-kosztowe podejście do indeksowania zawartości wielomodalnej przy użyciu umiejętności wyodrębniania dokumentów i opisania obrazów. Umożliwia wyodrębnianie i wyszukiwanie zarówno tekstu, jak i obrazów z dokumentów w usłudze Azure Blob Storage. Nie zawiera jednak metadanych lokalizacyjnych tekstu, takich jak numery stron lub obszary ograniczenia. Aby uzyskać bardziej kompleksowe rozwiązanie obejmujące układ tekstu strukturalnego i metadane przestrzenne, zobacz Samouczek: opisywanie słowne obrazów z układu strukturalnego dokumentu.
Note
Wyodrębnianie obrazów przy użyciu umiejętności wyodrębniania dokumentów nie jest bezpłatne. Ustawienie imageAction na generateNormalizedImages w zestawie umiejętności wyzwala ekstrakcję obrazów, co wiąże się z dodatkowymi kosztami. Aby uzyskać informacje dotyczące rozliczeń, zobacz Cennik usługi Azure AI Search.
Prerequisites
azure AI Search. Skonfiguruj usługę wyszukiwania pod kątem kontroli dostępu opartej na rolach i tożsamości zarządzanej. Usługa musi znajdować się w warstwie Podstawowa lub wyższej. Ten samouczek nie jest obsługiwany w warstwie Bezpłatna.
Usługa Azure Storage używana do przechowywania przykładowych danych i tworzenia magazynu wiedzy.
Azure OpenAI z wdrożeniem
Model uzupełniania rozmowy hostowany w Microsoft Foundry lub innym źródle. Model jest używany do werbalizacji zawartości obrazu. Podajesz URI dla hostowanego modelu w definicji umiejętności Prompt GenAI. Możesz użyć dowolnego modelu uzupełniania czatu.
Model osadzania tekstu wdrożony w narzędziu Foundry. Model służy do wektoryzacji zawartości tekstowej ściąganej z dokumentów źródłowych i opisów obrazów generowanych przez model uzupełniania czatu. W przypadku zintegrowanej wektoryzacji model osadzania musi znajdować się w rozwiązaniu Foundry i musi być jednym z: text-embedding-ada-002, text-embedding-3-large, lub text-embedding-3-small. Jeśli chcesz użyć zewnętrznego modelu osadzania, użyj niestandardowej umiejętności zamiast umiejętności osadzania usługi Azure OpenAI.
Przygotowywanie danych
Poniższe instrukcje dotyczą usługi Azure Storage, która udostępnia przykładowe dane, a także hostuje magazyn wiedzy. Tożsamość usługi wyszukiwania potrzebuje dostępu do odczytu do usługi Azure Storage, aby pobrać przykładowe dane, oraz dostępu do zapisu, aby utworzyć magazyn wiedzy. Usługa wyszukiwania tworzy kontener dla przyciętych obrazów podczas przetwarzania zestawu umiejętności, używając nazwy podanej w zmiennej środowiskowej.
Pobierz następujący przykładowy plik PDF: sustainable-ai-pdf
W usłudze Azure Storage utwórz nowy kontener o nazwie sustainable-ai-pdf.
Utwórz przypisania ról i określ tożsamość zarządzaną w parametrach połączenia:
Przypisz czytnik danych obiektu blob Storage do pobierania danych przez indeksator. Przypisz role Storage Blob Data Contributor i Storage Table Data Contributor, aby utworzyć i załadować magazyn wiedzy. Do przypisania roli usługi wyszukiwania można użyć tożsamości zarządzanej przypisanej przez system lub tożsamości zarządzanej przypisanej przez użytkownika.
W przypadku połączeń wykonanych przy użyciu tożsamości zarządzanej przypisanej przez system, uzyskaj łańcuch połączenia zawierający identyfikator ResourceId, bez klucza konta ani hasła. Identyfikator zasobu musi zawierać identyfikator subskrypcji konta magazynu, grupę zasobów konta magazynu i nazwę konta magazynu. Łańcuch połączenia jest podobny do poniższego przykładu:
"credentials" : { "connectionString" : "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;" }W przypadku połączeń wykonanych przy użyciu tożsamości zarządzanej przypisanej przez użytkownika pobierz łańcuch połączenia zawierający identyfikator ResourceId bez klucza konta ani hasła. Identyfikator zasobu musi zawierać identyfikator subskrypcji konta magazynu, grupę zasobów konta magazynu i nazwę konta magazynu. Podaj tożsamość przy użyciu składni pokazanej w poniższym przykładzie. Ustaw wartość userAssignedIdentity na tożsamość zarządzaną przypisaną przez użytkownika. Łańcuch połączenia jest podobny do poniższego przykładu:
"credentials" : { "connectionString" : "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;" }, "identity" : { "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity", "userAssignedIdentity" : "/subscriptions/00000000-0000-0000-0000-00000000/resourcegroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MY-DEMO-USER-MANAGED-IDENTITY" }
Przygotowywanie modeli
W tym samouczku założono, że masz istniejący zasób Azure OpenAI, za pomocą którego umiejętności wywołują modele osadzania tekstu i uzupełniania rozmów. Usługa wyszukiwania łączy się z modelami podczas przetwarzania zestawu umiejętności i wykonywania zapytań przy użyciu tożsamości zarządzanej. Ta sekcja zawiera wskazówki i linki do przypisywania ról w celu uzyskania autoryzowanego dostępu.
Zaloguj się do witryny Azure Portal (nie portalu Foundry) i znajdź zasób Azure OpenAI.
Wybierz pozycję Kontrola dostępu (IAM).
Wybierz pozycję Dodaj , a następnie pozycję Dodaj przypisanie roli.
Wyszukaj Użytkownik usług Cognitive Services OpenAI, a następnie wybierz.
Wybierz pozycję Tożsamość zarządzana , a następnie przypisz tożsamość zarządzaną usługi wyszukiwania.
Aby uzyskać więcej informacji, zobacz Kontrola dostępu oparta na rolach dla usługi Azure OpenAI w modelach usługi Foundry.
Konfigurowanie pliku REST
Na potrzeby tego samouczka lokalne połączenie klienta REST z usługą Azure AI Search wymaga punktu końcowego i klucza interfejsu API. Te wartości można uzyskać w witrynie Azure Portal. Aby uzyskać informacje na temat alternatywnych metod połączenia, zobacz Nawiązywanie połączenia z usługą wyszukiwania.
W przypadku uwierzytelnionych połączeń występujących podczas przetwarzania indeksatora i zestawu umiejętności usługa wyszukiwania używa wcześniej zdefiniowanych przypisań ról.
Uruchom program Visual Studio Code i utwórz nowy plik.
Podaj wartości zmiennych używanych w żądaniu. W przypadku
@storageConnectionupewnij się, że ciąg połączenia nie ma końcowego średnika ani cudzysłowu. W polu@imageProjectionContainerpodaj unikatową nazwę kontenera w magazynie blob. Usługa Azure AI Search tworzy ten kontener podczas przetwarzania umiejętności poznawczych.@searchUrl = PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE @searchApiKey = PUT-YOUR-ADMIN-API-KEY-HERE @storageConnection = PUT-YOUR-STORAGE-CONNECTION-STRING-HERE @openAIResourceUri = PUT-YOUR-OPENAI-URI-HERE @openAIKey = PUT-YOUR-OPENAI-KEY-HERE @chatCompletionResourceUri = PUT-YOUR-CHAT-COMPLETION-URI-HERE @chatCompletionKey = PUT-YOUR-CHAT-COMPLETION-KEY-HERE @imageProjectionContainer=sustainable-ai-pdf-imagesZapisz plik, używając rozszerzenia
.restlub.http. Aby uzyskać pomoc dotyczącą klienta REST, zobacz Szybki start: wyszukiwanie pełnotekstowe przy użyciu interfejsu REST.
Aby uzyskać punkt końcowy usługi Azure AI Search i klucz API:
Zaloguj się do witryny Azure Portal, przejdź do strony Przegląd usługi wyszukiwania i skopiuj adres URL. Przykładowy punkt końcowy może wyglądać podobnie jak
https://mydemo.search.windows.net.W obszarze Klucze ustawień>skopiuj klucz administratora. Klucze administracyjne służą do dodawania, modyfikowania i usuwania obiektów. Istnieją dwa zamienne klucze administratora. Skopiuj jedną z nich.
Utwórz źródło danych
Utwórz źródło danych (REST) tworzy połączenie ze źródłem danych, które określa, jakie dane mają być indeksowane.
### Create a data source
POST {{searchUrl}}/datasources?api-version=2025-11-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{searchApiKey}}
{
"name": "doc-extraction-image-verbalization-ds",
"description": null,
"type": "azureblob",
"subtype": null,
"credentials":{
"connectionString":"{{storageConnection}}"
},
"container": {
"name": "sustainable-ai-pdf",
"query": null
},
"dataChangeDetectionPolicy": null,
"dataDeletionDetectionPolicy": null,
"encryptionKey": null,
"identity": null
}
Wyślij żądanie. Odpowiedź powinna wyglądać następująco:
HTTP/1.1 201 Created
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Location: https://<YOUR-SEARCH-SERVICE-NAME>.search.windows-int.net:443/datasources('doc-extraction-multimodal-embedding-ds')?api-version=2025-11-01-preview -Preview
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 4eb8bcc3-27b5-44af-834e-295ed078e8ed
elapsed-time: 346
Date: Sat, 26 Apr 2025 21:25:24 GMT
Connection: close
{
"name": "doc-extraction-multimodal-embedding-ds",
"description": null,
"type": "azureblob",
"subtype": null,
"indexerPermissionOptions": [],
"credentials": {
"connectionString": null
},
"container": {
"name": "sustainable-ai-pdf",
"query": null
},
"dataChangeDetectionPolicy": null,
"dataDeletionDetectionPolicy": null,
"encryptionKey": null,
"identity": null
}
Tworzenie indeksu
Tworzenie indeksu (REST) powoduje utworzenie indeksu wyszukiwania w usłudze wyszukiwania. Indeks określa wszystkie parametry i ich atrybuty.
W przypadku zagnieżdżonego kodu JSON pola indeksu muszą być identyczne z polami źródłowymi. Obecnie usługa Azure AI Search nie obsługuje mapowań pól na zagnieżdżone dane JSON, więc nazwy pól i typy danych muszą być całkowicie zgodne. Poniższy indeks jest zgodny z elementami JSON w nieprzetworzonej zawartości.
### Create an index
POST {{searchUrl}}/indexes?api-version=2025-11-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{searchApiKey}}
{
"name": "doc-extraction-image-verbalization-index",
"fields": [
{
"name": "content_id",
"type": "Edm.String",
"retrievable": true,
"key": true,
"analyzer": "keyword"
},
{
"name": "text_document_id",
"type": "Edm.String",
"searchable": false,
"filterable": true,
"retrievable": true,
"stored": true,
"sortable": false,
"facetable": false
},
{
"name": "document_title",
"type": "Edm.String",
"searchable": true
},
{
"name": "image_document_id",
"type": "Edm.String",
"filterable": true,
"retrievable": true
},
{
"name": "content_text",
"type": "Edm.String",
"searchable": true,
"retrievable": true
},
{
"name": "content_embedding",
"type": "Collection(Edm.Single)",
"dimensions": 3072,
"searchable": true,
"retrievable": true,
"vectorSearchProfile": "hnsw"
},
{
"name": "content_path",
"type": "Edm.String",
"searchable": false,
"retrievable": true
},
{
"name": "offset",
"type": "Edm.String",
"searchable": false,
"retrievable": true
},
{
"name": "location_metadata",
"type": "Edm.ComplexType",
"fields": [
{
"name": "page_number",
"type": "Edm.Int32",
"searchable": false,
"retrievable": true
},
{
"name": "bounding_polygons",
"type": "Edm.String",
"searchable": false,
"retrievable": true,
"filterable": false,
"sortable": false,
"facetable": false
}
]
}
],
"vectorSearch": {
"profiles": [
{
"name": "hnsw",
"algorithm": "defaulthnsw",
"vectorizer": "demo-vectorizer"
}
],
"algorithms": [
{
"name": "defaulthnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"metric": "cosine"
}
}
],
"vectorizers": [
{
"name": "demo-vectorizer",
"kind": "azureOpenAI",
"azureOpenAIParameters": {
"resourceUri": "{{openAIResourceUri}}",
"deploymentId": "text-embedding-3-large",
"searchApiKey": "{{openAIKey}}",
"modelName": "text-embedding-3-large"
}
}
]
},
"semantic": {
"defaultConfiguration": "semanticconfig",
"configurations": [
{
"name": "semanticconfig",
"prioritizedFields": {
"titleField": {
"fieldName": "document_title"
},
"prioritizedContentFields": [
],
"prioritizedKeywordsFields": []
}
}
]
}
}
Najważniejsze kwestie:
Osadzenia tekstu i obrazu są przechowywane w polu
content_embeddingi muszą mieć odpowiednie wymiary (na przykład 3072) oraz profil wyszukiwania wektorowego.location_metadataprzechwytuje powiązanie wielokąta i metadanych numeru strony dla każdego znormalizowanych obrazów, umożliwiając precyzyjne wyszukiwanie przestrzenne lub nakładki interfejsu użytkownika.location_metadataistnieje tylko w przypadku obrazów w tym scenariuszu. Jeśli chcesz również przechwytywać metadane lokalizacyjne dla tekstu, rozważ użycie umiejętności układu dokumentu. Szczegółowy samouczek jest połączony w dolnej części strony.Aby uzyskać więcej informacji na temat wyszukiwania wektorów, zobacz Vectors in Azure AI Search (Wektory w usłudze Azure AI Search).
Aby uzyskać więcej informacji na temat klasyfikacji semantycznej, zobacz Semantic ranking in Azure AI Search (Ranking semantyczny w usłudze Azure AI Search)
Tworzenie zestawu umiejętności
Tworzenie zestawu umiejętności (REST) tworzy zestaw umiejętności w usłudze wyszukiwania. Zestaw umiejętności definiuje operacje fragmentujące i osadzanie zawartości przed indeksowaniem. Ten zestaw umiejętności używa wbudowanej umiejętności wyodrębniania dokumentów do wyodrębniania tekstu i obrazów. Używa umiejętności dzielenia tekstu do fragmentowania dużego tekstu. Używa umiejętności osadzania usługi Azure OpenAI w celu wektoryzacji zawartości tekstowej.
Zestaw umiejętności wykonuje również czynności, które są szczególne dla obrazów. Używa umiejętności GenAI Prompt do generowania opisów obrazów. Tworzy również magazyn wiedzy, w którym przechowywane są nienaruszone obrazy, dzięki czemu można je zwrócić w zapytaniu.
### Create a skillset
POST {{searchUrl}}/skillsets?api-version=2025-11-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{searchApiKey}}
{
"name": "doc-extraction-image-verbalization-skillset",
"description": "A test skillset",
"skills": [
{
"@odata.type": "#Microsoft.Skills.Util.DocumentExtractionSkill",
"name": "document-extraction-skill",
"description": "Document extraction skill to extract text and images from documents",
"parsingMode": "default",
"dataToExtract": "contentAndMetadata",
"configuration": {
"imageAction": "generateNormalizedImages",
"normalizedImageMaxWidth": 2000,
"normalizedImageMaxHeight": 2000
},
"context": "/document",
"inputs": [
{
"name": "file_data",
"source": "/document/file_data"
}
],
"outputs": [
{
"name": "content",
"targetName": "extracted_content"
},
{
"name": "normalized_images",
"targetName": "normalized_images"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "split-skill",
"description": "Split skill to chunk documents",
"context": "/document",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 2000,
"pageOverlapLength": 200,
"unit": "characters",
"inputs": [
{
"name": "text",
"source": "/document/extracted_content",
"inputs": []
}
],
"outputs": [
{
"name": "textItems",
"targetName": "pages"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
"name": "text-embedding-skill",
"description": "Embedding skill for text",
"context": "/document/pages/*",
"inputs": [
{
"name": "text",
"source": "/document/pages/*"
}
],
"outputs": [
{
"name": "embedding",
"targetName": "text_vector"
}
],
"resourceUri": "{{openAIResourceUri}}",
"deploymentId": "text-embedding-3-large",
"searchApiKey": "{{openAIKey}}",
"dimensions": 3072,
"modelName": "text-embedding-3-large"
},
{
"@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
"name": "genAI-prompt-skill",
"description": "GenAI Prompt skill for image verbalization",
"uri": "{{chatCompletionResourceUri}}",
"timeout": "PT1M",
"searchApiKey": "{{chatCompletionKey}}",
"context": "/document/normalized_images/*",
"inputs": [
{
"name": "systemMessage",
"source": "='You are tasked with generating concise, accurate descriptions of images, figures, diagrams, or charts in documents. The goal is to capture the key information and meaning conveyed by the image without including extraneous details like style, colors, visual aesthetics, or size.\n\nInstructions:\nContent Focus: Describe the core content and relationships depicted in the image.\n\nFor diagrams, specify the main elements and how they are connected or interact.\nFor charts, highlight key data points, trends, comparisons, or conclusions.\nFor figures or technical illustrations, identify the components and their significance.\nClarity & Precision: Use concise language to ensure clarity and technical accuracy. Avoid subjective or interpretive statements.\n\nAvoid Visual Descriptors: Exclude details about:\n\nColors, shading, and visual styles.\nImage size, layout, or decorative elements.\nFonts, borders, and stylistic embellishments.\nContext: If relevant, relate the image to the broader content of the technical document or the topic it supports.\n\nExample Descriptions:\nDiagram: \"A flowchart showing the four stages of a machine learning pipeline: data collection, preprocessing, model training, and evaluation, with arrows indicating the sequential flow of tasks.\"\n\nChart: \"A bar chart comparing the performance of four algorithms on three datasets, showing that Algorithm A consistently outperforms the others on Dataset 1.\"\n\nFigure: \"A labeled diagram illustrating the components of a transformer model, including the encoder, decoder, self-attention mechanism, and feedforward layers.\"'"
},
{
"name": "userMessage",
"source": "='Please describe this image.'"
},
{
"name": "image",
"source": "/document/normalized_images/*/data"
}
],
"outputs": [
{
"name": "response",
"targetName": "verbalizedImage"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
"name": "verbalized-image-embedding-skill",
"description": "Embedding skill for verbalized images",
"context": "/document/normalized_images/*",
"inputs": [
{
"name": "text",
"source": "/document/normalized_images/*/verbalizedImage",
"inputs": []
}
],
"outputs": [
{
"name": "embedding",
"targetName": "verbalizedImage_vector"
}
],
"resourceUri": "{{openAIResourceUri}}",
"deploymentId": "text-embedding-3-large",
"searchApiKey": "{{openAIKey}}",
"dimensions": 3072,
"modelName": "text-embedding-3-large"
},
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"name": "shaper-skill",
"description": "Shaper skill to reshape the data to fit the index schema",
"context": "/document/normalized_images/*",
"inputs": [
{
"name": "normalized_images",
"source": "/document/normalized_images/*",
"inputs": []
},
{
"name": "imagePath",
"source": "='{{imageProjectionContainer}}/'+$(/document/normalized_images/*/imagePath)",
"inputs": []
},
{
"name": "location_metadata",
"sourceContext": "/document/normalized_images/*",
"inputs": [
{
"name": "page_number",
"source": "/document/normalized_images/*/pageNumber"
},
{
"name": "bounding_polygons",
"source": "/document/normalized_images/*/boundingPolygon"
}
]
}
],
"outputs": [
{
"name": "output",
"targetName": "new_normalized_images"
}
]
}
],
"indexProjections": {
"selectors": [
{
"targetIndexName": "doc-extraction-image-verbalization-index",
"parentKeyFieldName": "text_document_id",
"sourceContext": "/document/pages/*",
"mappings": [
{
"name": "content_embedding",
"source": "/document/pages/*/text_vector"
},
{
"name": "content_text",
"source": "/document/pages/*"
},
{
"name": "document_title",
"source": "/document/document_title"
}
]
},
{
"targetIndexName": "doc-extraction-image-verbalization-index",
"parentKeyFieldName": "image_document_id",
"sourceContext": "/document/normalized_images/*",
"mappings": [
{
"name": "content_text",
"source": "/document/normalized_images/*/verbalizedImage"
},
{
"name": "content_embedding",
"source": "/document/normalized_images/*/verbalizedImage_vector"
},
{
"name": "content_path",
"source": "/document/normalized_images/*/new_normalized_images/imagePath"
},
{
"name": "document_title",
"source": "/document/document_title"
},
{
"name": "locationMetadata",
"source": "/document/normalized_images/*/new_normalized_images/location_metadata"
}
]
}
],
"parameters": {
"projectionMode": "skipIndexingParentDocuments"
}
},
"knowledgeStore": {
"storageConnectionString": "{{storageConnection}}",
"identity": null,
"projections": [
{
"files": [
{
"storageContainer": "{{imageProjectionContainer}}",
"source": "/document/normalized_images/*"
}
]
}
]
}
}
Ten zestaw umiejętności wyodrębnia tekst i obrazy, wektoryzuje zarówno, jak i kształtuje metadane obrazu do projekcji do indeksu.
Najważniejsze kwestie:
Pole
content_textjest wypełniane na dwa sposoby:Z tekstu dokumentu wyodrębnionego przy użyciu funkcji wyodrębniania dokumentów i podzielonego przy użyciu funkcji dzielenia tekstu
Na podstawie zawartości obrazu przy użyciu umiejętności GenAI Prompt, która generuje opisowe podpisy dla każdego znormalizowanego obrazu
Pole
content_embeddingzawiera 3072-wymiarowe osadzanie dla tekstu strony i zwerbalizowane opisy obrazów. Są one generowane przy użyciu modelu dużego osadzania tekstu 3 z usługi Azure OpenAI.content_pathzawiera ścieżkę względną do pliku obrazu w wyznaczonym kontenerze projekcji obrazów. To pole jest generowane tylko dla obrazów wydzielonych z plików PDF, gdyimageActionjest ustawiony nagenerateNormalizedImages, i można je zamapować ze wzbogaconego dokumentu z pola źródłowego/document/normalized_images/*/imagePath.
Tworzenie i uruchamianie indeksatora
Create Indexer tworzy indeksator w Twojej usłudze wyszukiwania. Indeksator łączy się ze źródłem danych, ładuje dane, uruchamia zestaw umiejętności i indeksuje wzbogacone dane.
### Create and run an indexer
POST {{searchUrl}}/indexers?api-version=2025-11-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{searchApiKey}}
{
"dataSourceName": "doc-extraction-image-verbalization-ds",
"targetIndexName": "doc-extraction-image-verbalization-index",
"skillsetName": "doc-extraction-image-verbalization-skillset",
"parameters": {
"maxFailedItems": -1,
"maxFailedItemsPerBatch": 0,
"batchSize": 1,
"configuration": {
"allowSkillsetToReadFileData": true
}
},
"fieldMappings": [
{
"sourceFieldName": "metadata_storage_name",
"targetFieldName": "document_title"
}
],
"outputFieldMappings": []
}
Uruchamianie zapytań
Możesz rozpocząć wyszukiwanie zaraz po załadowaniu pierwszego dokumentu.
### Query the index
POST {{searchUrl}}/indexes/doc-extraction-image-verbalization-index/docs/search?api-version=2025-11-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{searchApiKey}}
{
"search": "*",
"count": true
}
Wyślij żądanie. Jest to nieokreślone zapytanie wyszukiwania pełnotekstowego, które zwraca wszystkie pola oznaczone jako możliwe do pobrania w indeksie wraz z liczbą dokumentów. Odpowiedź powinna wyglądać następująco:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; odata.metadata=minimal; odata.streaming=true; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
Strict-Transport-Security: max-age=2592000, max-age=15724800; includeSubDomains
Preference-Applied: odata.include-annotations="*"
OData-Version: 4.0
request-id: 712ca003-9493-40f8-a15e-cf719734a805
elapsed-time: 198
Date: Wed, 30 Apr 2025 23:20:53 GMT
Connection: close
{
"@odata.count": 100,
"@search.nextPageParameters": {
"search": "*",
"count": true,
"skip": 50
},
"value": [
],
"@odata.nextLink": "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/indexes/doc-extraction-image-verbalization-index/docs/search?api-version=2025-11-01-preview "
}
100 dokumentów jest zwracanych w odpowiedzi.
W przypadku filtrów można również używać operatorów logicznych (i, lub, nie) i operatorów porównania (eq, ne, gt, lt, ge, le). Porównania ciągów są rozróżniane pod względem wielkości liter. Aby uzyskać więcej informacji i przykładów, zobacz Przykłady prostych zapytań wyszukiwania.
Note
Parametr $filter działa tylko w przypadku pól, które zostały oznaczone jako filtrowalne podczas tworzenia indeksu.
Oto kilka przykładów innych zapytań:
### Query for only images
POST {{searchUrl}}/indexes/doc-extraction-image-verbalization-index/docs/search?api-version=2025-11-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{searchApiKey}}
{
"search": "*",
"count": true,
"filter": "image_document_id ne null"
}
### Query for text or images with content related to energy, returning the id, parent document, and text (extracted text for text chunks and verbalized image text for images), and the content path where the image is saved in the knowledge store (only populated for images)
POST {{searchUrl}}/indexes/doc-extraction-image-verbalization-index/docs/search?api-version=2025-11-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{searchApiKey}}
{
"search": "energy",
"count": true,
"select": "content_id, document_title, content_text, content_path"
}
Resetowanie i ponowne uruchamianie
Indeksatory można zresetować, aby wyczyścić znak wysokiej wody, co pozwala na pełne ponowne uruchomienie. Następujące żądania POST są przeznaczone do resetowania, a następnie ponownie uruchamiane.
### Reset the indexer
POST {{searchUrl}}/indexers/doc-extraction-image-verbalization-indexer/reset?api-version=2025-11-01-preview HTTP/1.1
api-key: {{searchApiKey}}
### Run the indexer
POST {{searchUrl}}/indexers/doc-extraction-image-verbalization-indexer/run?api-version=2025-11-01-preview HTTP/1.1
api-key: {{searchApiKey}}
### Check indexer status
GET {{searchUrl}}/indexers/doc-extraction-image-verbalization-indexer/status?api-version=2025-11-01-preview HTTP/1.1
api-key: {{searchApiKey}}
Uprzątnij zasoby
Gdy pracujesz we własnej subskrypcji, warto na końcu projektu usunąć zasoby, których już nie potrzebujesz. Zasoby pozostawione w stanie aktywnym mogą generować koszty. Zasoby można usunąć pojedynczo lub usunąć grupę zasobów, aby usunąć cały zestaw zasobów.
Za pomocą witryny Azure Portal można usuwać indeksy, indeksatory i źródła danych.
Zobacz także
Teraz, gdy znasz przykładową implementację scenariusza indeksowania wielomodalnego, zapoznaj się z tematem: