검색 인덱스에서 벡터라이저 구성

Important

이 기능은 추가 사용 약관에 따라 공개 미리 보기로 제공됩니다. 2023-10-01-Preview REST API는 이 기능을 지원합니다.

Azure AI Search에서 벡터라이저는 Azure OpenAI에 배포된 포함 모델과 같이 쿼리 실행 중에 텍스트를 벡터로 변환하는 벡터화를 수행하는 소프트웨어입니다.

검색 인덱스에 정의되고, 검색 가능한 벡터 필드에 적용되며, 쿼리 시 텍스트 쿼리 입력에 대한 포함을 생성하는 데 사용됩니다. 인덱싱 프로세스의 일환으로 텍스트를 벡터화해야 하는 경우 통합 벡터화(미리 보기)를 참조하세요. 인덱싱 중 기본 제공 벡터화의 경우 원시 텍스트 콘텐츠에 대한 Azure OpenAI 포함 모델을 호출하는 인덱서 및 기술 세트를 구성할 수 있습니다.

인덱스 검색에 벡터라이저를 추가하려면 Azure Portal에서 인덱스 디자이너를 사용하거나 인덱스 만들기 또는 업데이트 2023-10-01-preview REST API를 호출하거나 업데이트된 Azure 베타 SDK 패키지를 사용하여 이 기능을 제공할 수 있습니다.

필수 조건

  • Azure AI Search에서 검색 가능한 벡터 필드가 있는 인덱스입니다.

  • Azure OpenAI의 text-embedding-ada-002와 같은 배포된 포함 모델입니다. 쿼리를 벡터화하는 데 사용됩니다. 인덱스에 포함을 생성하는 데 사용되는 모델과 동일해야 합니다.

  • 포함 모델을 사용할 수 있는 권한입니다. Azure OpenAI를 사용하는 경우 호출자에게 Cognitive Services OpenAI 사용자 권한이 있어야 합니다. 또는 API 키를 제공할 수 있습니다.

  • REST 클라이언트가 있는 Visual Studio Code는 쿼리를 보내고 응답을 수락합니다.

검색 서비스에서 진단 로깅을 사용하도록 설정하여 벡터 쿼리 실행을 확인하는 것이 좋습니다.

샘플 데이터를 사용하여 벡터라이저 사용해 보기

데이터 가져오기 및 벡터화 마법사는 Azure Blob Storage에서 파일을 읽고 청크 및 벡터화된 필드가 있는 인덱스를 만들고 벡터라이저를 추가합니다. 기본적으로 마법사에서 만든 벡터라이저는 Blob 콘텐츠를 인덱싱하는 데 사용되는 것과 동일한 포함 모델로 설정됩니다.

  1. Azure Storage의 컨테이너에 샘플 데이터 파일을 업로드합니다. 우리는 무료 검색 서비스에 이러한 지침을 테스트하기 위해 NASA의 지구 책에서 몇 가지 작은 텍스트 파일을 사용했습니다.

  2. 데이터 가져오기 및 벡터화 마법사를 실행하고 데이터 원본에 대한 Blob 컨테이너를 선택합니다.

    데이터에 연결 페이지의 스크린샷.

  3. text-embedding-ada-002의 기존 배포를 선택합니다. 이 모델은 인덱싱 중에 포함을 생성하며 쿼리 중에 사용되는 벡터라이저를 구성하는 데도 사용됩니다.

    데이터 벡터화 및 보강 페이지의 스크린샷.

  4. 마법사가 완료되고 모든 인덱서 처리가 완료되면 검색 가능한 벡터 필드가 있는 인덱스가 있어야 합니다. 필드의 JSON 정의는 다음과 같습니다.

     {
         "name": "vector",
         "type": "Collection(Edm.Single)",
         "searchable": true,
         "retrievable": true,
         "dimensions": 1536,
         "vectorSearchProfile": "vector-nasa-ebook-text-profile"
     }
    
  5. 다음 예제와 유사한 벡터 프로필과 벡터라이저도 있어야 합니다.

    "profiles": [
       {
         "name": "vector-nasa-ebook-text-profile",
         "algorithm": "vector-nasa-ebook-text-algorithm",
         "vectorizer": "vector-nasa-ebook-text-vectorizer"
       }
     ],
     "vectorizers": [
       {
         "name": "vector-nasa-ebook-text-vectorizer",
         "kind": "azureOpenAI",
         "azureOpenAIParameters": {
           "resourceUri": "https://my-fake-azure-openai-resource.openai.azure.com",
           "deploymentId": "text-embedding-ada-002",
           "apiKey": "0000000000000000000000000000000000000",
           "authIdentity": null
         },
         "customWebApiParameters": null
       }
     ]
    
  6. 쿼리를 실행하는 동안 텍스트-벡터 변환을 위해 벡터라이저를 테스트하려면 건너뜁니다.

벡터라이저 및 벡터 프로필 정의

이 섹션에서는 벡터라이저를 수동으로 정의하기 위한 인덱스 스키마 수정에 대해 설명합니다.

  1. 인덱스 만들기 또는 업데이트(미리 보기)를 사용하여 검색 인덱스에 vectorizers 추가

  2. 인덱스 정의에 다음과 같은 JSON을 추가합니다. 벡터라이저 섹션은 배포된 포함 모델에 대한 연결 정보를 제공합니다. 이 단계에서는 Azure OpenAI 포함 모델과 사용자 지정 웹 API를 나란히 비교할 수 있도록 두 가지 벡터라이저 예제를 보여 줍니다.

      "vectorizers": [
        {
          "name": "my_azure_open_ai_vectorizer",
          "kind": "azureOpenAI",
          "azureOpenAIParameters": {
            "resourceUri": "https://url.openai.azure.com",
            "deploymentId": "text-embedding-ada-002",
            "apiKey": "mytopsecretkey"
          }
        },
        {
          "name": "my_custom_vectorizer",
          "kind": "customWebApi",
          "customVectorizerParameters": {
            "uri": "https://my-endpoint",
            "authResourceId": " ",
            "authIdentity": " "
          }
        }
      ]
    
  3. 동일한 인덱스에 벡터라이저 중 하나를 지정하는 벡터 프로필 섹션을 추가합니다. 또한 벡터 프로필에는 탐색 구조를 만드는 데 사용되는 벡터 검색 알고리즘이 필요합니다.

    "profiles": [ 
        { 
            "name": "my_vector_profile", 
            "algorithm": "my_hnsw_algorithm", 
            "vectorizer":"my_azure_open_ai_vectorizer" 
        }
    ]
    
  4. 벡터 필드에 벡터 프로필을 할당합니다. 다음 예제에서는 필수 키 필드, 제목 문자열 필드 및 벡터 프로필 할당이 있는 두 개의 벡터 필드로 필드 컬렉션을 보여줍니다.

    "fields": [ 
            { 
                "name": "ID", 
                "type": "Edm.String", 
                "key": true, 
                "sortable": true, 
                "analyzer": "keyword" 
            }, 
            { 
                "name": "title", 
                "type": "Edm.String"
            }, 
            { 
                "name": "vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1536, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }, 
            { 
                "name": "my-second-vector", 
                "type": "Collection(Edm.Single)", 
                "dimensions": 1024, 
                "vectorSearchProfile": "my_vector_profile", 
                "searchable": true, 
                "retrievable": true
            }
    ]
    

벡터라이저 테스트

검색 클라이언트를 사용하여 벡터라이저를 통해 쿼리를 보냅니다. 이 예제에서는 REST 클라이언트 및 샘플 인덱스가 있는 Visual Studio Code를 가정합니다.

  1. Visual Studio Code에서 검색 엔드포인트 및 검색 쿼리 API 키를 제공합니다.

     @baseUrl: 
     @queryApiKey: 00000000000000000000000
    
  2. 벡터 쿼리 요청에 붙여넣습니다. 미리 보기 REST API 버전을 사용해야 합니다.

     ### Run a query
     POST {{baseUrl}}/indexes/vector-nasa-ebook-txt/docs/search?api-version=2023-10-01-preview  HTTP/1.1
         Content-Type: application/json
         api-key: {{queryApiKey}}
    
         {
             "count": true,
             "select": "title,chunk",
             "vectorQueries": [
                 {
                     "kind": "text",
                     "text": "what cloud formations exists in the troposphere",
                     "fields": "vector",
                     "k": 3,
                     "exhaustive": true
                 }
             ]
         }
    

    쿼리에 대한 핵심 사항은 다음과 같습니다.

    • "kind": "text"은(는) 입력이 텍스트 문자열이며 검색 필드와 연결된 벡터라이저를 사용하도록 검색 엔진에 지시합니다.

    • "text": "what cloud formations exists in the troposphere"은(는) 벡터화할 텍스트 문자열입니다.

    • "fields": "vector"은(는) 쿼리할 필드의 이름입니다. 마법사에서 생성된 샘플 인덱스 사용 시 생성된 벡터 필드의 이름이 vector(으)로 지정됩니다.

  3. 요청을 보냅니다. 첫 번째 결과가 가장 관련성이 큰 세 k 가지 결과를 가져와야 합니다.

쿼리 시 설정할 벡터라이저 속성이 없습니다. 쿼리는 인덱스 내의 벡터 프로필 필드 할당에 따라 벡터라이저 속성을 읽습니다.

로그 확인

검색 서비스에 진단 로깅을 사용하도록 설정한 경우 Kusto 쿼리를 실행하여 벡터 필드에서 쿼리 실행을 확인합니다.

OperationEvent
| where TIMESTAMP > ago(30m)
| where Name == "Query.Search" and AdditionalInfo["QueryMetadata"]["Vectors"] has "TextLength"

모범 사례

Azure OpenAI 벡터라이저를 설정하는 경우 Azure OpenAI 포함 기술에 권장하는 것과 동일한 모범 사례를 고려합니다.

참고 항목