Azure AI 검색 에이전트 검색을 위한 인덱스 만들기

참고

Azure AI 검색 Azure 포털, REST API 및 Azure SDK 통해 사용할 수 있습니다. 또한 엔터프라이즈 콘텐츠를 Microsoft Foundry 포털의 에이전트에 대해 재사용 가능한 사용 권한 인식 기술 자료로 변환하는 관리되는 기술 계층인 Foundry IQ를 뒷받침합니다.

이 문서에서는 에이전트 검색에 필요한 인덱스 필드 및 구성에 대해 설명합니다. 이러한 요구 사항 중 어느 것도 새로운 것이 아닙니다. 이전 API 버전으로 만든 경우에도 조건을 충족하는 기존 인덱스를 사용할 수 있습니다.

인덱싱된 각 지식 원본은 기본 인덱스에 따라 달라집니다. 파이프라인을 설정하는 방법에 따라 인덱스가 다음 중 하나일 수 있습니다.

  • 기존:검색 인덱스 지식 원본을 통해 제공되는 독립형 인덱스입니다. 인덱스가 이 문서의 조건을 충족해야 합니다.

  • 생성:인덱싱된 지식 원본에 의해 자동으로 생성되는 인덱스입니다. 생성된 인덱스는 기본적으로 모든 조건을 충족합니다.

에이전트 검색 기준

다음 표에서는 요구 사항 수준별로 에이전트 검색에 영향을 주는 인덱스 요소를 구성합니다.

Index 요소 요구 사항 비고
searchable 및 retrievable 문자열 필드 Required 쿼리 실행 및 결과 검색에 사용됩니다.
의미 체계 구성 Required defaultSemanticConfiguration를 사용하거나 지식 원본에서 시맨틱 구성을 재정의하세요.
인용 필드 권장 문서 이름, 페이지 번호 또는 청크 ID와 같은 원본 콘텐츠에 대한 응답을 특성으로 지정하는 사용자 정의 필드입니다.
벡터 필드 및 벡터라이저 권장 쿼리 시 텍스트-벡터 변환을 사용하도록 설정합니다.
점수 산정 프로필 Optional 특정 필드의 관련성을 높입니다. 자동으로 적용되도록 설정합니다 defaultScoringProfile .
분석기 Optional 공백 또는 특수 문자 처리와 같은 텍스트 토큰화 방법을 제어합니다.
동의어 맵 Optional 용어 또는 전문 용어를 사용하여 쿼리를 확장합니다.

인덱스 정의 예제

다음 예에서는 에이전트형 검색에 적합한 인덱스를 보여줍니다. 필수 요소에 대한 조건을 충족하고 모범 사례로 벡터 필드를 포함합니다.

{
  "name": "earth_at_night",
  "description": "Contains images and descriptions of our planet in darkness as captured from space by Earth-observing satellites and astronauts on the International Space Station over the past 25 years.",
  "fields": [
    {
      "name": "id", "type": "Edm.String",
      "searchable": true, "retrievable": true, "filterable": true, "sortable": true, "facetable": true,
      "key": true,
      "stored": true,
      "synonymMaps": []
    },
    {
      "name": "page_chunk", "type": "Edm.String",
      "searchable": true, "retrievable": true, "filterable": false, "sortable": false, "facetable": false,
      "analyzer": "en.microsoft",
      "stored": true,
      "synonymMaps": []
    },
    {
      "name": "page_chunk_vector_text_3_large", "type": "Collection(Edm.Single)",
      "searchable": true, "retrievable": false, "filterable": false, "sortable": false, "facetable": false,
      "dimensions": 3072,
      "vectorSearchProfile": "hnsw_text_3_large",
      "stored": false,
      "synonymMaps": []
    },
    {
      "name": "page_number", "type": "Edm.Int32",
      "searchable": false, "retrievable": true, "filterable": true, "sortable": true, "facetable": true,
      "stored": true,
      "synonymMaps": []
    },
    {
      "name": "chapter_number", "type": "Edm.Int32",
      "searchable": false, "retrievable": true, "filterable": true, "sortable": true, "facetable": true,
      "stored": true,
      "synonymMaps": []
    }
  ],
  "semantic": {
    "defaultConfiguration": "semantic_config",
    "configurations": [
      {
        "name": "semantic_config",
        "flightingOptIn": false,
        "prioritizedFields": {
          "prioritizedContentFields": [
            {
              "fieldName": "page_chunk"
            }
          ],
          "prioritizedKeywordsFields": []
        }
      }
    ]
  },
  "vectorSearch": {
    "algorithms": [
      {
        "name": "alg",
        "kind": "hnsw",
        "hnswParameters": {
          "metric": "cosine",
          "m": 4,
          "efConstruction": 400,
          "efSearch": 500
        }
      }
    ],
    "profiles": [
      {
        "name": "hnsw_text_3_large",
        "algorithm": "alg",
        "vectorizer": "azure_openai_text_3_large"
      }
    ],
    "vectorizers": [
      {
        "name": "azure_openai_text_3_large",
        "kind": "azureOpenAI",
        "azureOpenAIParameters": {
          "resourceUri": "https://YOUR-AOAI-RESOURCE.openai.azure.com",
          "deploymentId": "text-embedding-3-large",
          "modelName": "text-embedding-3-large"
        }
      }
    ],
    "compressions": []
  }
}

생성 AI 또는 RAG(검색 보강 생성)를 위해 잘 설계된 인덱스에는 다음과 같은 구성 요소가 있습니다.

  • LLM이나 에이전트가 인덱스를 사용할지 여부를 판단할 때 근거로 삼을 수 있는 설명입니다.

  • 답변 생성을 위해 LLM에 입력 토큰으로 전달할 수 있는, 사람이 읽을 수 있는 형태의 텍스트 청크입니다.

  • 에이전트 검색은 L2(수준 2) 의미 체계 순위를 사용하여 가장 관련성이 높은 청크를 식별하기 때문에 의미 체계 순위 구성입니다.

  • (선택 사항) 상호 보완적인 벡터 검색을 위해 사람이 읽을 수 있는 텍스트 청크의 벡터에 해당하는 버전입니다.

LLM은 사람이 읽을 수 있는 일반 텍스트 콘텐츠의 토큰화된 문자열을 사용하고 내보내기 때문에 청크 분할 텍스트가 중요합니다. 이러한 이유로 일반 텍스트 문자열을 제공하고 응답에 포함된 searchable 필드를 원합니다 retrievable. Azure AI 검색에서는 기본 제공 또는 타사 솔루션을 사용하여 청크로 분할된 텍스트를 만들 수 있습니다.

청크 분할 콘텐츠에 대한 내재적 가정은 원래 원본 문서에 많은 양의 자세한 콘텐츠가 포함되어 있다는 것입니다. 원본 콘텐츠가 제품 데이터베이스와 같은 구조화된 데이터인 경우 인덱스는 청크를 포기하고 제품 이름, 범주 또는 설명과 같은 원래 데이터 원본에 매핑되는 필드를 포함해야 합니다. searchable 및 retrievable에 대한 출처 표시는 구조화된 데이터에도 적용됩니다. searchable는 콘텐츠가 쿼리 범위에 포함되도록 하고, retrievable는 이를 검색 결과(그라운딩 데이터)에 추가합니다.

벡터 콘텐츠는 정보 검색에 유사성 검색 을 추가하므로 유용할 수 있습니다. 쿼리 시 벡터 필드가 인덱스에 있으면 에이전트 검색 엔진은 텍스트 쿼리와 병렬로 벡터 쿼리를 실행합니다. 벡터 쿼리는 일치하는 단어가 아닌 유사한 콘텐츠를 찾기 때문에 벡터 쿼리는 텍스트 쿼리가 놓칠 수 있는 관련성이 높은 결과를 찾을 수 있습니다. 벡터를 추가하면 접지 데이터의 품질이 향상되고 향상될 수 있지만 반드시 필요한 것은 아닙니다. Azure AI 검색에는 벡터화에 대한 내장된 접근 방식이 있습니다.

벡터 필드는 Azure AI 검색 쿼리 실행에만 사용됩니다. 사람이 아니거나 LLM을 읽을 수 없으므로 결과에 벡터가 필요하지 않습니다. 공간 요구 사항을 최소화하려면 false로 설정하는 retrievablestored 것이 좋습니다. 자세한 내용은 벡터 스토리지 및 처리 최적화를 참조하세요.

벡터를 사용하는 경우 벡터 검색 구성에 정의된 벡터 라이저 를 사용하는 것이 중요합니다. 쿼리 실행 중에 벡터 필드가 사용되는지 여부를 결정합니다. 벡터라이저는 벡터에 대한 유사성 검색을 위해 쿼리 시 문자열 하위 쿼리를 벡터로 인코딩합니다. 벡터라이저는 인덱스에 벡터를 만드는 데 사용되는 것과 동일한 포함 모델이어야 합니다.

기본적으로 모든 searchable 필드는 쿼리 실행에 포함되며 모든 retrievable 필드는 결과에 반환됩니다. 검색 인덱스 지식 원본 정의에서 각 작업에 사용할 필드를 선택할 수 있습니다.

설명 추가

인덱스 description 필드는 쿼리에 특정 인덱스를 사용하도록 결정할 때 LLM 및 MCP(모델 컨텍스트 프로토콜) 서버에 지침을 제공하는 데 사용할 수 있는 사용자 정의 문자열입니다. 사람이 읽을 수 있는 이 텍스트는 시스템에서 여러 인덱스에 액세스하고 설명에 따라 결정을 내려야 하는 경우 매우 중요합니다.

인덱스 설명은 스키마 업데이트이며 전체 인덱스를 다시 작성하지 않고도 추가할 수 있습니다.

  • 문자열 길이는 최대 4,000자입니다.

  • 콘텐츠는 유니코드에서 사람이 읽을 수 있어야 합니다. 사용 사례는 사용할 언어(예: 영어 또는 다른 언어)를 결정해야 합니다.

의미 체계 구성 추가

인덱스의 의미 체계 구성이 하나 이상 있어야 합니다. 의미 체계 구성에는 다음이 있어야 합니다.

  • 명명된 구성입니다.
  • prioritizedContentFields은 적어도 searchable 및 retrievable를 모두 포함하는 하나 이상의 문자열 필드로 설정됩니다.

이름으로 의미 체계 구성을 지정하는 방법에는 두 가지가 있습니다. 인덱 defaultSemanticConfiguration 스가 명명된 구성으로 설정된 경우 검색에서 사용합니다. 또는 검색 인덱스 지식 원본 내에서 의미 체계 구성을 지정할 수 있습니다.

구성 내에서 prioritizedContentFields 항목이 필요합니다. 제목 및 키워드는 선택 사항입니다. 청크된 콘텐츠의 경우, 둘 중 하나 또는 모두가 없을 수 있습니다. 그러나 엔터티 인식 또는 핵심 구 추출을 추가하는 경우 검색 시나리오(점수 매기기 프로필)에서 유용할 수 있는 각 청크와 연결된 키워드가 있을 수 있습니다.

다음 예제에서는 에이전트 검색에 대해 작동하는 의미 체계 구성을 보여 줍니다.

"semantic":{
   "defaultConfiguration":"semantic_config",
   "configurations":[
      {
         "name":"semantic_config",
         "flightingOptIn":false,
         "prioritizedFields":{
            "titleField":{
               "fieldName":""
            },
            "prioritizedContentFields":[
               {
                  "fieldName":"page_chunk"
               }
            ],
            "prioritizedKeywordsFields":[
               {
                  "fieldName":"Category"
               },
               {
                  "fieldName":"Tags"
               },
               {
                  "fieldName":"Location"
               }
            ]
         }
      }
   ]
}

참고

응답은 title, terms, content를 제공하고, 이는 이 구성의 우선 순위가 지정된 필드에 매핑됩니다.

벡터라이저 추가

인덱스에 벡터 필드가 포함되어 있는 경우, 해당 필드가 searchable이고 vectorizer 할당이 있으면 쿼리 계획에 이러한 필드가 포함됩니다.

벡터라이저는 쿼리 시 텍스트-벡터 변환을 제공하는 포함 모델을 지정합니다. 인덱스 내의 벡터 콘텐츠를 인코딩하는 데 사용되는 것과 동일한 포함 모델을 가리킵니다. Azure AI 검색 지원하는 임베딩 모델을 사용할 수 있습니다. 벡터 프로필을 통해 벡터 필드에 벡터라이저를 지정합니다.

인덱스 예제의 벡터 필드 정의 는 키 필드 특성을 dimensions보여 줍니다. 즉, 모델에서 생성된 포함 횟수입니다 vectorSearchProfile.

  {
    "name": "page_chunk_text_3_large", "type": "Collection(Edm.Single)",
    "searchable": true, "retrievable": false, "filterable": false, "sortable": false, "facetable": false,
    "dimensions": 3072,
    "vectorSearchProfile": "hnsw_text_3_large",
    "stored": false,
    "synonymMaps": []
  }

벡터 프로필은 벡터라이저, 알고리즘 및 압축 기술의 구성입니다. 각 벡터 필드는 하나의 프로필만 사용할 수 있지만 모든 벡터 필드에 고유한 프로필을 원하는 경우 인덱스에 많은 프로필이 있을 수 있습니다.

벡터를 쿼리하고 벡터라이저를 호출하면 전체 요청에 대기 시간이 추가되지만 유사성 검색을 원하는 경우 장만할 만한 가치가 있을 수 있습니다.

다음 예제에서는 vectorSearch 구성에 나타나는 에이전트 검색에 대해 작동하는 벡터라이저를 보여 줍니다. 에이전트 검색을 사용하도록 변경해야 하는 벡터라이저 정의에는 아무것도 없습니다.

"vectorSearch": {
  "algorithms": [
    {
      "name": "alg",
      "kind": "hnsw",
      "hnswParameters": {
        "metric": "cosine",
        "m": 4,
        "efConstruction": 400,
        "efSearch": 500
      }
    }
  ],
  "profiles": [
    {
      "name": "hnsw_text_3_large",
      "algorithm": "alg",
      "vectorizer": "azure_openai_text_3_large"
    }
  ],
  "vectorizers": [
    {
      "name": "azure_openai_text_3_large",
      "kind": "azureOpenAI",
      "azureOpenAIParameters": {
        "resourceUri": "https://YOUR-AOAI-RESOURCE.openai.azure.com",
        "deploymentId": "text-embedding-3-large",
        "modelName": "text-embedding-3-large"
      }
    }
  ],
  "compressions": []
}

점수 매기기 프로필 추가

점수 매기기 프로필은 관련성 향상을 위한 기준입니다. 정확한 동작은 인덱스를 만드는 데 사용되는 API 버전에 따라 달라지지만 벡터가 아닌 필드(텍스트 및 숫자)에 적용되고 쿼리 실행 중에 평가됩니다.

인덱스가 구조화된 데이터를 기반으로 하는 경우 점수 매기기 프로필이 솔루션에 값을 추가할 가능성이 높습니다. 구조적 데이터는 여러 개별 필드로 인덱싱됩니다. 즉, 점수 매기기 프로필에 특정 필드의 콘텐츠 또는 특성을 대상으로 하는 기준이 있을 수 있습니다.

2025-05-01-preview 이상을 사용하여 인덱스를 만들면 점수 매기기 프로필이 마지막으로 실행됩니다. 이전 API 버전을 사용하여 인덱스를 만든 경우 의미 체계를 다시 시작하기 전에 점수 매기기 프로필이 평가됩니다. 의미 체계적으로 순위가 지정된 결과의 실제 순서는 인덱스의 rankingOrder 속성 (점수 매기기 프로필이 적용됨)으로 설정 boostedRerankerScore 되거나 rerankerScore (점수 매기기 프로필이 없음) 결정됩니다.

인덱싱에 적합한 점수 매기기 프로필을 사용할 수 있습니다. 다음 예제에서는 일치 항목이 특정 필드에 있는 경우 일치 항목의 검색 점수를 높이는 점수 매기기 프로필을 보여 줍니다. 필드는 부스팅 승수에 의해 가중치가 적용됩니다. 예를 들어 "범주" 필드에서 일치 항목이 발견되면 가중 점수에 5를 곱합니다.

"scoringProfiles": [
    {
      "name": "boostSearchTerms",
      "text": {
        "weights": {
          "Location": 2,
          "Category": 5
        }
      }
    }
]

분석기 추가

분석기는 텍스트 필드에 적용되며 특수 문자 또는 공백 유지와 같이 인덱스의 토큰화를 제어하는 언어 분석기 또는 사용자 지정 분석기일 수 있습니다.

분석기는 검색 인덱스 내에서 정의되고 필드에 할당됩니다. 필드 컬렉션 예제에는 텍스트 청크에 대한 분석기 참조가 포함됩니다. 이 예제에서는 기본 분석기(표준 Lucene)가 영어에 대한 Microsoft 언어 분석기로 바뀝니다.

{
  "name": "page_chunk", "type": "Edm.String",
  "searchable": true, "retrievable": true, "filterable": false, "sortable": false, "facetable": false,
  "analyzer": "en.microsoft",
  "stored": true,
  "synonymMaps": []
}

동의어 맵 추가

동의어 맵 은 명명된 용어의 동의어를 추가하여 쿼리를 확장합니다. 예를 들어 일반적인 용어에 대한 과학적 또는 의학적 용어가 있을 수 있습니다.

동의어 맵은 검색 인덱스의 최상위 리소스로 정의되고 필드에 할당됩니다. 필드 컬렉션 예제에는 동의어 맵이 포함되지 않지만 다음 예제에서는 국가/지역 이름의 변형 맞춤법이 있는 동의어 맵을 가상의 "위치" 필드에 할당하는 방법을 보여 줍니다.

{
    "name":"locations",
    "type":"Edm.String",
    "searchable":true,
    "synonymMaps":[ "country-region-synonyms" ]
}

지식 출처에 인덱스를 추가하세요

이미 존재하며 기술 소스에서 생성되지 않은 독립 실행형 인덱스가 있는 경우 다음 개체를 만듭니다.