Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu Azure AI Search öğreticisinde, verileri belge yapısına göre öbekleyen ve görüntüleri açıklamak için görüntü sözelleştirmeyi kullanan çok modüllü bir dizin oluşturma işlem hattı oluşturmayı öğrenin. Kırpılan görüntüler bir bilgi deposunda depolanır ve görsel içerikler doğal dilde açıklanır ve metinle birlikte aranabilir bir dizin haline getirilir.
Kaynak belgeden her resim, kısa bir metin açıklaması oluşturmak için GenAI İstemi becerisine (önizleme) geçirilir. Bu açıklamalar, özgün belge metniyle birlikte Azure OpenAI'nin metin ekleme-3-büyük modeli kullanılarak vektör gösterimlerine eklenir. Sonuç, her iki modaliteden de görsel olarak aranabilir içerik içeren tek bir dizindir: metin ve sözlü resimler.
Bu öğreticide şunları kullanacaksınız:
Grafikler, bilgi grafikleri ve taranmış sayfalar gibi zengin görsel içerikleri geleneksel metinlerle birleştiren 36 sayfalık PDF belgesi.
Belge Düzeni becerisi (önizleme), sayfa numaraları veya sınırlayıcı bölgeler gibi çeşitli belgelerden locationMetadata ile birlikte metin ve normalleştirilmiş görüntüleri ayıklamak için kullanılır.
Belge Düzeni becerisi sınırlı bölgesel kullanılabilirliğe sahiptir, Azure AI hizmetlerine bağlıdır ve günlük dizin oluşturucu başına 20 belgeyi aşan işlemler için faturalanabilir bir kaynak gerektirir. Çok modüllü içeriği dizine eklemeye yönelik daha düşük maliyetli bir çözüm için bkz. Görüntü sözelleştirmeyi kullanarak çok modüllü içeriği dizinleme ve Belge Ayıklama becerisi.
Arama ve bağlam sağlama için görsel içeriğin metin tabanlı açıklamaları olan görsel alt yazıları oluşturmak için GenAI Prompt becerisi (önizleme).
Metin ve görüntü eklemelerini depolamak için yapılandırılmış bir arama dizini ve vektör tabanlı benzerlik araması desteği.
Uyarı
Bu öğretici için imageAction
ayarlanması gereklidir ve generateNormalizedImages
göre için görüntü ayıklama ek ücreti uygulanır.
REST istemcisi ve Search REST API'lerini kullanarak şunları yapacaksınız:
- Örnek verileri ayarlama ve veri
azureblob
kaynağını yapılandırma - Metin ve görüntü ekleme desteğiyle dizin oluşturma
- Ayıklama, altyazı oluşturma, gömme ve bilgi deposu dosya projeksiyon adımlarıyla beceri kümesi tanımlama
- İçeriği işlemek ve dizin oluşturmak için dizin oluşturucu oluşturma ve çalıştırma
- Oluşturduğunuz dizini arama
Önkoşullar
Aktif bir aboneliğe sahip bir Azure hesabı. Ücretsiz hesap oluşturun.
Azure AI Arama. Geçerli aboneliğinizde bir hizmet oluşturun veya mevcut bir hizmeti bulun. Hizmetiniz Temel katmanda veya daha yüksek bir katmanda olmalıdır. Bu öğretici Ücretsiz katmanında desteklenmez.
Dosyaları indirme
Aşağıdaki örnek PDF'yi indirin:
Örnek verileri Azure Depolama'ya yükleme
Azure Depolama'da doc-intelligence-multimodality-container adlı yeni bir kapsayıcı oluşturun.
Azure Depolama'da rol ataması oluşturma ve Bağlantı dizesinde yönetilen kimlik belirtme
Sistem tarafından atanan yönetilen kimlik kullanılarak yapılan bağlantılar için. Hesap anahtarı veya parolası olmadan ResourceId içeren bir bağlantı dizesi sağlayın. ResourceId depolama hesabının abonelik kimliğini, depolama hesabının kaynak grubunu ve depolama hesabı adını içermelidir. bağlantı dizesi aşağıdaki örneğe benzer:
"credentials" : { "connectionString" : "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;" }
Kullanıcı tarafından atanan yönetilen kimlik kullanılarak yapılan bağlantılar için. Hesap anahtarı veya parolası olmadan ResourceId içeren bir bağlantı dizesi sağlayın. ResourceId depolama hesabının abonelik kimliğini, depolama hesabının kaynak grubunu ve depolama hesabı adını içermelidir. Aşağıdaki örnekte gösterilen söz dizimini kullanarak bir kimlik sağlayın. userAssignedIdentity değerini kullanıcı tarafından atanan yönetilen kimliğe ayarlama Bağlantı dizesi aşağıdaki örneğe benzer:
"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" }
Arama hizmeti URL'si ve API anahtarı kopyalama
Bu öğretici kapsamında, Azure AI Search bağlantıları için bir uç nokta ve bir API anahtarı gerekir. Bu değerleri Azure portalından alabilirsiniz. Alternatif bağlantı yöntemleri için bkz. Yönetilen kimlikler.
Azure portalında oturum açın, arama hizmetine Genel Bakış sayfasına gidin ve URL'yi kopyalayın. Örnek uç nokta
https://mydemo.search.windows.net
şeklinde görünebilir.Ayarlarbir yönetici anahtarı kopyalayın. Yönetici anahtarları nesneleri eklemek, değiştirmek ve silmek için kullanılır. Değiştirilebilir iki yönetici anahtarı vardır. İkisini de kopyalayın.
REST dosyanızı ayarlama
Visual Studio Code'u başlatın ve yeni bir dosya oluşturun.
İstekte kullanılan değişkenler için değerler sağlayın.
@baseUrl = PUT-YOUR-SEARCH-SERVICE-ENDPOINT-HERE @apiKey = 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=PUT-YOUR-IMAGE-PROJECTION-CONTAINER-HERE
Veya
.rest
dosya uzantısını kullanarak.http
dosyayı kaydedin.
REST istemcisiyle ilgili yardım için bkz . Hızlı Başlangıç: REST kullanarak tam metin arama.
Veri kaynağı oluşturun
Veri Kaynağı Oluştur (REST), hangi verilerin dizine alınacağını belirten bir veri kaynağı bağlantısı oluşturur.
### Create a data source using system-assigned managed identities
POST {{baseUrl}}/datasources?api-version=2025-05-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"name": "doc-intelligence-image-verbalization-ds",
"description": "A data source to store multi-modality documents",
"type": "azureblob",
"subtype": null,
"credentials": {
"connectionString": "ResourceId=/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/MY-DEMO-RESOURCE-GROUP/providers/Microsoft.Storage/storageAccounts/MY-DEMO-STORAGE-ACCOUNT/;"
},
"container": {
"name": "doc-intelligence-multimodality-container",
"query": null
},
"dataChangeDetectionPolicy": null,
"dataDeletionDetectionPolicy": null,
"encryptionKey": null,
"identity": null
}
Dizin oluşturma
Dizin Oluştur (REST), arama hizmetinizde bir arama dizini oluşturur. Dizin, tüm parametreleri ve parametrelerin özniteliklerini belirtir.
İç içe JSON için dizin alanlarının kaynak alanlarla aynı olması gerekir. Azure AI Search şu anda iç içe JSON ile alan eşlemelerini desteklemediğinden alan adlarının ve veri türlerinin tamamen eşleşmesi gerekir. Aşağıdaki dizin ham içerikteki JSON öğelerine hizalanır.
### Create an index
POST {{baseUrl}}/indexes?api-version=2025-05-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"name": "doc-intelligence-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": "{{vectorizer}}"
}
],
"algorithms": [
{
"name": "defaulthnsw",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"metric": "cosine"
}
}
],
"vectorizers": [
{
"name": "{{vectorizer}}",
"kind": "azureOpenAI",
"azureOpenAIParameters": {
"resourceUri": "{{openAIResourceUri}}",
"deploymentId": "text-embedding-3-large",
"apiKey": "{{openAIKey}}",
"modelName": "text-embedding-3-large"
}
}
]
},
"semantic": {
"defaultConfiguration": "semanticconfig",
"configurations": [
{
"name": "semanticconfig",
"prioritizedFields": {
"titleField": {
"fieldName": "document_title"
},
"prioritizedContentFields": [
],
"prioritizedKeywordsFields": []
}
}
]
}
}
Önemli noktalar:
Metin ve görüntü ekleme işlemleri alanda
content_embedding
depolanır ve 3072 ve vektör arama profili gibi uygun boyutlarda yapılandırılmalıdır.location_metadata
her metin öbekleri ve normalleştirilmiş görüntü için sınırlayıcı çokgen ve sayfa numarası meta verilerini yakalar ve hassas uzamsal arama veya kullanıcı arabirimi katmanlarını etkinleştirir.Vektör araması hakkında daha fazla bilgi için bkz. Azure AI Search'te vektörler.
Anlam derecelendirmesi hakkında daha fazla bilgi için bkz. Azure AI Search'te anlam derecelendirmesi
Beceri kümesi oluşturma
Beceri Kümesi Oluştur (REST), arama hizmetinizde bir arama dizini oluşturur. Dizin, tüm parametreleri ve parametrelerin özniteliklerini belirtir.
### Create a skillset
POST {{baseUrl}}/skillsets?api-version=2025-05-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"description": "A sample skillset for multi-modality using image verbalization",
"skills": [
{
"@odata.type": "#Microsoft.Skills.Util.DocumentIntelligenceLayoutSkill",
"name": "document-cracking-skill",
"description": "Document Layout skill for document cracking",
"context": "/document",
"outputMode": "oneToMany",
"outputFormat": "text",
"extractionOptions": ["images", "locationMetadata"],
"chunkingProperties": {
"unit": "characters",
"maximumLength": 2000,
"overlapLength": 200
},
"inputs": [
{
"name": "file_data",
"source": "/document/file_data"
}
],
"outputs": [
{
"name": "text_sections",
"targetName": "text_sections"
},
{
"name": "normalized_images",
"targetName": "normalized_images"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
"name": "text-embedding-skill",
"description": "Azure Open AI Embedding skill for text",
"context": "/document/text_sections/*",
"inputs": [
{
"name": "text",
"source": "/document/text_sections/*/content"
}
],
"outputs": [
{
"name": "embedding",
"targetName": "text_vector"
}
],
"resourceUri": "{{openAIResourceUri}}",
"deploymentId": "text-embedding-3-large",
"apiKey": "",
"dimensions": 3072,
"modelName": "text-embedding-3-large"
},
{
"@odata.type": "#Microsoft.Skills.Custom.ChatCompletionSkill",
"uri": "{{chatCompletionResourceUri}}",
"timeout": "PT1M",
"apiKey": "",
"name": "genAI-prompt-skill",
"description": "GenAI Prompt skill for image verbalization",
"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": "verbalizedImage-embedding-skill",
"description": "Azure Open AI Embedding skill for verbalized image embedding",
"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",
"apiKey": "",
"dimensions": 3072,
"modelName": "text-embedding-3-large"
},
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"name": "#5",
"context": "/document/normalized_images/*",
"inputs": [
{
"name": "normalized_images",
"source": "/document/normalized_images/*",
"inputs": []
},
{
"name": "imagePath",
"source": "='my_container_name/'+$(/document/normalized_images/*/imagePath)",
"inputs": []
}
],
"outputs": [
{
"name": "output",
"targetName": "new_normalized_images"
}
]
}
],
"indexProjections": {
"selectors": [
{
"targetIndexName": "{{index}}",
"parentKeyFieldName": "text_document_id",
"sourceContext": "/document/text_sections/*",
"mappings": [
{
"name": "content_embedding",
"source": "/document/text_sections/*/text_vector"
},
{
"name": "content_text",
"source": "/document/text_sections/*/content"
},
{
"name": "location_metadata",
"source": "/document/text_sections/*/locationMetadata"
},
{
"name": "document_title",
"source": "/document/document_title"
}
]
},
{
"targetIndexName": "{{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": "location_metadata",
"source": "/document/normalized_images/*/locationMetadata"
}
]
}
],
"parameters": {
"projectionMode": "skipIndexingParentDocuments"
}
},
"knowledgeStore": {
"storageConnectionString": "{{storageConnection}}",
"projections": [
{
"files": [
{
"storageContainer": "{{imageProjectionContainer}}",
"source": "/document/normalized_images/*"
}
]
}
]
}
}
Bu beceri kümesi metin ve görüntüleri ayıklar, görüntüleri sözlüleştirir ve görüntü meta verilerini dizine yansıtmak üzere şekillendirir.
Önemli noktalar:
Alan
content_text
iki şekilde doldurulur:Belge Düzeni becerisi kullanılarak ayıklanan ve öbeklenen belge metninden.
GenAI İstemi becerisini kullanarak normalleştirilmiş her görüntü için açıklayıcı alt yazılar oluşturan görüntü içeriğinden.
content_embedding
alanı, hem sayfa metni hem de sözlü resim açıklamaları için 3072 boyutlu gömüler içerir. Bunlar, Azure OpenAI'nin büyük metin gömme-3 modeli kullanılarak oluşturulmuştur.content_path
, belirlenen görüntü projeksiyon kapsayıcısı içindeki görüntü dosyasının göreli yolunu içerir. Bu alan yalnızcaextractOption
veya["images", "locationMetadata"]
olarak ayarlandığında belgelerden["images"]
ayıklanan görüntüler için oluşturulur ve kaynak alandaki/document/normalized_images/*/imagePath
zenginleştirilmiş belgeden eşlenebilir.Azure OpenAI ekleme becerisi, metin verilerinin eklenmesine olanak tanır. Daha fazla bilgi için bkz. Azure OpenAI Ekleme becerisi.
Dizin oluşturucu oluşturma ve çalıştırma
Dizin Oluşturucu Oluştur, arama hizmetinizde bir dizin oluşturucu oluşturur. Dizin oluşturucu veri kaynağına bağlanır, verileri yükler, beceri kümesi çalıştırır ve zenginleştirilmiş verilerin dizinini oluşturur.
### Create and run an indexer
POST {{baseUrl}}/indexers?api-version=2025-05-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"dataSourceName": "doc-intelligence-image-verbalization-ds",
"targetIndexName": "doc-intelligence-image-verbalization-index",
"skillsetName": "doc-intelligence-image-verbalization-skillset",
"parameters": {
"maxFailedItems": -1,
"maxFailedItemsPerBatch": 0,
"batchSize": 1,
"configuration": {
"allowSkillsetToReadFileData": true
}
},
"fieldMappings": [
{
"sourceFieldName": "metadata_storage_name",
"targetFieldName": "document_title"
}
],
"outputFieldMappings": []
}
Sorgu çalıştırma
İlk belge yüklenir yüklenmez aramaya başlayabilirsiniz.
### Query the index
POST {{baseUrl}}/indexes/doc-intelligence-image-verbalization-index/docs/search?api-version=2025-05-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"search": "*",
"count": true
}
İsteği gönderin. Bu, dizinde alınabilir olarak işaretlenmiş tüm alanları ve belge sayısını döndüren, belirtilmemiş bir tam metin arama sorgusudur. Yanıt şöyle görünmelidir:
{
"@odata.count": 100,
"@search.nextPageParameters": {
"search": "*",
"count": true,
"skip": 50
},
"value": [
],
"@odata.nextLink": "https://<YOUR-SEARCH-SERVICE-NAME>.search.windows.net/indexes/doc-intelligence-image-verbalization-index/docs/search?api-version=2025-05-01-preview "
}
Yanıt olarak 100 belge iade edilir.
Filtreler için Mantıksal işleçleri (ve veya değil) ve karşılaştırma işleçlerini (eq, ne, gt, lt, ge, le) de kullanabilirsiniz. Dize karşılaştırmaları büyük/küçük harfe duyarlıdır. Daha fazla bilgi ve örnek için bkz. Basit arama sorguları örnekleri.
Uyarı
$filter
parametresi yalnızca dizin oluşturma sırasında filtrelenebilir olarak işaretlenmiş alanlarda çalışır.
### Query for only images
POST {{baseUrl}}/indexes/doc-intelligence-image-verbalization-index/docs/search?api-version=2025-05-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"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 (only populated for text chunks), and the content path where the image is saved in the knowledge store (only populated for images)
POST {{baseUrl}}/indexes/doc-intelligence-image-verbalization-index/docs/search?api-version=2025-05-01-preview HTTP/1.1
Content-Type: application/json
api-key: {{apiKey}}
{
"search": "energy",
"count": true,
"select": "content_id, document_title, content_text, content_path"
}
Sıfırla ve yeniden çalıştır
Indexleyiciler, yürütme geçmişini temizleyerek tam bir yeniden çalıştırmaya izin verecek şekilde sıfırlanabilir. Aşağıdaki POST istekleri sıfırlamaya yöneliktir ve ardından yeniden çalıştırılır.
### Reset the indexer
POST {{baseUrl}}/indexers/doc-intelligence-image-verbalization-indexer/reset?api-version=2025-05-01-preview HTTP/1.1
api-key: {{apiKey}}
### Run the indexer
POST {{baseUrl}}/indexers/doc-intelligence-image-verbalization-indexer/run?api-version=2025-05-01-preview HTTP/1.1
api-key: {{apiKey}}
### Check indexer status
GET {{baseUrl}}/indexers/doc-intelligence-image-verbalization-indexer/status?api-version=2025-05-01-preview HTTP/1.1
api-key: {{apiKey}}
Kaynakları temizle
Kendi aboneliğinizde çalışırken, bir projenin sonunda artık ihtiyacınız olmayan kaynakları kaldırmak iyi bir fikirdir. Çalışır durumda bırakılan kaynaklar sana pahalıya mal olabilir. Kaynakları tek tek silebilir veya kaynak grubunu silip kaynak kümesinin tamamını silebilirsiniz.
Dizinleri, dizin oluşturucuları ve veri kaynaklarını silmek için Azure portalını kullanabilirsiniz.
Ayrıca bakınız
Artık çok modlu dizin oluşturma senaryosunun örnek uygulaması hakkında bilgi sahibi olduğunuz için bkz: