Skapa ett index för agentisk hämtning i Azure AI-sökning

Observera

Azure AI-sökning är tillgängligt via Azure-portalen, REST-API:er och Azure-SDK:er. Den ligger också till grund för Foundry IQ, det hanterade kunskapsskiktet som omvandlar företagsinnehåll till återanvändbara, behörighetsmedvetna kunskapsbaser för agenter i Microsoft Foundry-portalen.

Den här artikeln beskriver de obligatoriska indexfälten och konfigurationerna för agentisk hämtning. Inget av dessa krav är nya. Du kan använda ett befintligt index som uppfyller kriterierna, även om det skapades med en tidigare API-version.

Varje indexerad kunskapskälla är beroende av ett underliggande index. Beroende på hur du konfigurerar din pipeline kan indexet vara något av följande:

  • Befintlig: Ett fristående index som exponeras via en kunskapskälla för sökindex. Indexet måste uppfylla kriterierna i den här artikeln.

  • Genereras: Ett index som skapas automatiskt av en indexerad kunskapskälla. Genererade index uppfyller alla kriterier som standard.

Villkor för agentisk hämtning

I följande tabell ordnas de indexelement som påverkar agentisk hämtning efter kravnivå.

Indexelement Krav Notes
searchable och retrievable strängfält Krävs Används för frågekörning och resultathämtning.
Semantisk konfiguration Krävs Använd defaultSemanticConfiguration eller åsidosätt den semantiska konfigurationen i kunskapskällan.
Källhänvisningsfält Rekommenderad Användardefinierade fält som tillskriver svar på källinnehåll, till exempel dokumentnamn, sidnummer eller segment-ID.
Vektorfält och en vektoriserare Rekommenderad Aktiverar text-till-vektorkonvertering vid frågetillfället.
Bedömningsprofil Valfritt Ökar relevansen för specifika fält. Ange defaultScoringProfile att tillämpas automatiskt.
Analyzer Valfritt Styr hur text tokeniseras, till exempel hantering av blanksteg eller specialtecken.
Synonymkartor Valfritt Expanderar frågor med terminologi eller jargong.

Exempel på indexdefinition

I följande exempel visas ett index som fungerar för agentisk hämtning. Den uppfyller kriterierna för obligatoriska element och innehåller vektorfält som bästa praxis.

{
  "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": []
  }
}

Ett väl utformat index för generativ AI eller generering utökad med informationshämtning (RAG) har följande komponenter:

  • En beskrivning som en LLM eller agent kan använda för att avgöra om ett index ska användas eller väljas bort.

  • Delar av text som kan läsas av människor som du kan skicka som indatatoken till en LLM för svarsformulering.

  • En semantisk rankerkonfiguration eftersom agentisk hämtning använder semantisk rangordning på nivå 2 (L2) för att identifiera de mest relevanta segmenten.

  • (Valfritt) Vektorekvivalenter av de mänskligt läsbara textsegmenten för kompletterande vektorsökning.

Text uppdelad i segment är viktig eftersom LLM:er bearbetar och genererar tokeniserade strängar av ren text som är läsbar för människor. Därför vill du ha searchable fält som tillhandahåller oformaterade strängar och som retrievable ingår i svaret. I Azure AI-sökning kan du skapa segmenterad text med hjälp av definierade lösningar eller lösningar från tredje part.

Ett inbyggt antagande för segmenterat innehåll är att de ursprungliga källdokumenten har stora mängder utförligt innehåll. Om källinnehållet är strukturerade data, till exempel en produktdatabas, bör indexet avstå från segmentering och i stället inkludera fält som mappar till den ursprungliga datakällan, till exempel ett produktnamn, en kategori eller en beskrivning. Attribution av searchable och retrievable gäller även för strukturerade data. searchable gör innehållet sökbart för frågor och retrievable lägger till det i sökresultaten (underlagsdata).

Vektorinnehåll kan vara användbart eftersom det lägger till likhetssökning till informationshämtning. Vid frågetillfället, när vektorfält finns i indexet, kör den agentiska hämtningsmotorn en vektorfråga parallellt med textfrågan. Eftersom vektorfrågor letar efter liknande innehåll i stället för att matcha ord kan en vektorfråga hitta ett mycket relevant resultat som en textfråga kan missa. Att lägga till vektorer kan förbättra och förbättra kvaliteten på dina jordningsdata, men de är inte absolut nödvändiga. Azure AI-sökning har en inbyggd metod för vektorisering.

Vektorfält används endast för frågekörning på Azure AI-sökning. Du behöver inte vektorn i resultaten eftersom den inte är mänsklig- eller LLM-läsbar. För att minimera utrymmeskraven rekommenderar vi att du ställer in retrievable och stored till false. Mer information finns i Optimera lagring och bearbetning av vektorer.

Om du använder vektorer är det viktigt att ha en vektoriserare definierad i vektorsökningskonfigurationen. Det fastställer om ditt vektorfält används under frågekörningen. Vektoriseraren kodar strängunderfrågor till vektorer vid frågetillfället för likhetssökning över vektorerna. Vektoriseraren måste vara samma inbäddningsmodell som används för att skapa vektorerna i indexet.

Som standard ingår alla searchable fält i frågekörningen och alla retrievable fält returneras i resultat. Du kan välja vilka fält som ska användas för varje åtgärd i definitionen av kunskapskällan för sökindex.

Lägg till en beskrivning

Ett indexfält description är en användardefinierad sträng som du kan använda för att ge vägledning till LLMs- och MCP-servrar (Model Context Protocol) när du bestämmer dig för att använda ett specifikt index för en fråga. Den här text som kan läsas av människor är ovärderlig när ett system måste komma åt flera index och fatta ett beslut baserat på beskrivningen.

En indexbeskrivning är en schemauppdatering och du kan lägga till den utan att behöva återskapa hela indexet.

  • Stränglängden är högst 4 000 tecken.

  • Innehållet måste vara läsbart för människor i Unicode. Ditt användningsfall bör avgöra vilket språk du ska använda (till exempel engelska eller ett annat språk).

Lägga till en semantisk konfiguration

Indexet måste ha minst en semantisk konfiguration. Den semantiska konfigurationen måste ha:

  • En namngiven konfiguration.
  • Ställ in prioritizedContentFields till minst ett strängfält som är både searchable och retrievable.

Det finns två sätt att ange en semantisk konfiguration efter namn. Om indexet har defaultSemanticConfiguration inställt på en namngiven konfiguration använder hämtningen den. Du kan också ange den semantiska konfigurationen i kunskapskällan för sökindex.

I konfigurationen krävs det prioritizedContentFields. Rubrik och nyckelord är valfria. För segmenterat innehåll kanske du inte heller har det. Men om du lägger till entitetsigenkänning eller extrahering av nyckelfraser kan du ha några nyckelord associerade med varje segment som kan vara användbara i sökscenarier, kanske i en bedömningsprofil.

I följande exempel visas en semantisk konfiguration som fungerar för agentisk hämtning.

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

Observera

Svaret innehåller title, terms, och content, som mappas till de prioriterade fälten i den här konfigurationen.

Lägga till en vektoriserare

Om ditt index innehåller vektorfält innehåller frågeplanen dessa fält om de är searchable och har en vectorizer tilldelning.

En vektoriserare anger en inbäddningsmodell som tillhandahåller text-till-vektorkonverteringar vid frågetillfället. Den måste peka på samma inbäddningsmodell som används för att koda vektorinnehållet i ditt index. Du kan använda valfri inbäddningsmodell som stöds av Azure AI-sökning. Du anger vektoriserare för vektorfält via en vektorprofil.

Vektorfältdefinitionen i indexexemplet visar nyckelfältattributen: dimensions, vilket är antalet inbäddningar som genereras av modellen och 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": []
  }

Vektorprofiler är konfigurationer av vektoriserare, algoritmer och komprimeringstekniker. Varje vektorfält kan bara använda en profil, men ditt index kan ha många om du vill ha unika profiler för varje vektorfält.

Att fråga vektorer och anropa en vektoriserare ger svarstid till den övergripande begäran, men om du vill ha likhetssökning kan det vara värt kompromissen.

I följande exempel visas en vektoriserare som fungerar för agentisk hämtning som den visas i en vectorSearch-konfiguration. Det finns inget i vektoriserardefinitionen som behöver ändras för att fungera med agentisk hämtning.

"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": []
}

Lägga till en bedömningsprofil

Bedömningsprofiler är kriterier för relevansförstärkning. De tillämpas på fält som inte är vektorfält (text och tal) och utvärderas under frågekörningen, även om det exakta beteendet beror på den API-version som används för att skapa indexet.

En bedömningsprofil är mer sannolikt att lägga till värde i din lösning om ditt index baseras på strukturerade data. Strukturerade data indexeras i flera diskreta fält, vilket innebär att din bedömningsprofil kan ha kriterier som riktar sig mot innehållet eller egenskaperna för ett visst fält.

Om du skapar indexet med 2025-05-01-preview eller senare körs bedömningsprofilen sist. Om indexet skapas med en tidigare API-version utvärderas bedömningsprofiler innan semantisk omrankning. Den faktiska ordningen för semantiskt rankade resultat bestäms av egenskapen rankingOrder i indexet, som antingen är inställd boostedRerankerScore på (en bedömningsprofil tillämpades) eller rerankerScore (ingen bedömningsprofil).

Du kan använda valfri bedömningsprofil som passar ditt index. I följande exempel visas en bedömningsprofil som ökar sökpoängen för en matchning om matchningen hittas i ett specifikt fält. Fält viktas genom att öka multiplikatorer. Om en matchning till exempel hittas i fältet "Kategori" multipliceras den ökade poängen med 5.

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

Lägga till en analysator

Analysverktyg gäller för textfält och kan vara språkanalysverktyg eller anpassade analysverktyg som styr tokenisering i indexet, till exempel att bevara specialtecken eller blanksteg.

Analysverktyg definieras i ett sökindex och tilldelas till fält. Exempel på fältsamling innehåller en analysreferens för textsegmenten. I det här exemplet ersätts standardanalysatorn (standard Lucene) med en Microsoft språkanalysator för det engelska språket.

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

Lägga till en synonymkarta

Synonymkartor expanderar frågor genom att lägga till synonymer för namngivna termer. Du kan till exempel ha vetenskapliga eller medicinska termer för vanliga termer.

Synonymkartor definieras som en resurs på den översta nivån i ett sökindex och tilldelas till fält. Exempel på fältsamling innehåller inte någon synonymkarta, men i följande exempel visas hur en synonymkarta med variantstavningar av namn på land/region kan tilldelas till ett hypotetiskt "locations"-fält.

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

Lägga till ditt index i en kunskapskälla

Om du har ett fristående index som redan finns och inte genereras av en kunskapskälla skapar du följande objekt: