Megosztás a következőn keresztül:


Index tervezése ügynöki lekéréshez az Azure AI Searchben

Megjegyzés:

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásszintű szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy bizonyos funkciók nem támogatottak, vagy korlátozott képességekkel rendelkeznek. További információkért lásd: Microsoft Azure Previews Kiegészítő Felhasználási Feltételek.

Az Azure AI Searchben az ügynöki lekérés egy új párhuzamos lekérdezési architektúra, amely egy csevegés-befejezési modellt használ a lekérdezéstervezéshez, és olyan allekérdezéseket hoz létre, amelyek kibővítik a kereshető és releváns lekérdezések hatókörét.

A lekérdezések belsőleg jönnek létre. A létrehozott lekérdezések bizonyos aspektusait a keresési index határozza meg. Ez a cikk ismerteti, hogy mely indexelemek befolyásolják az egyéni lekérést. A szükséges elemek egyike sem új vagy specifikus az ügynöki lekéréshez, ami azt jelenti, hogy akkor is használhat meglévő indexet, ha az megfelel a cikkben meghatározott feltételeknek, még akkor sem, ha az a korábbi API-verziók használatával lett létrehozva.

Összegezve, az targetIndexes megadott keresési indexnek az alábbi elemekkel kell rendelkeznie:

  • Sztringmezőként vannak megjelölve searchable és retrievable
  • Szemantikai konfiguráció, defaultSemanticConfiguration
  • Vektorosító, ha vektoros lekérdezéseket szeretne belefoglalni a folyamatba

Igény szerint az alábbi indexelemek növelik az optimalizálási lehetőségeket:

  • a scoringProfile és a defaultScoringProfile használatával, a relevancia növelése érdekében
  • synonymMaps terminológiához vagy szakzsargonhoz
  • analyzers nyelvészeti szabályokhoz vagy mintákhoz (például a szóközök megőrzéséhez vagy speciális karakterekhez)

Indexdefiníció példa

Íme egy példa index, amely ügynöki lekérésre használható. Megfelel a szükséges elemekre vonatkozó feltételeknek.

{
  "name": "earth_at_night",
  "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_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": []
    }
  ],
  "scoringProfiles": [],
  "suggesters": [],
  "analyzers": [],
  "normalizers": [],
  "tokenizers": [],
  "tokenFilters": [],
  "charFilters": [],
  "similarity": {
    "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
  },
  "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",
          "apiKey": "<redacted>",
          "modelName": "text-embedding-3-large"
        }
      }
    ],
    "compressions": []
  }
}

Főbb pontok:

Ügynöki lekérés esetén a rendszer kétszer használ nagy nyelvi modellt (LLM). Először is egy lekérdezési terv létrehozására szolgál. A lekérdezési terv végrehajtása és a keresési eredmények létrehozása után a rendszer ezeket az eredményeket ismét átadja az LLM-nek, ezúttal földelési adatokként. Az LLM-ek emberileg olvasható egyszerű szövegből készült tokenizált karakterláncokat használnak fel és bocsátanak ki. Ezért olyan mezőkkel kell rendelkeznie searchable , amelyek egyszerű szöveges sztringeket tartalmaznak, és a válaszban szerepelnek retrievable .

Ez az index tartalmaz egy vektormezőt, amelyet a lekérdezési időpontban használnak. Nincs szükség a vektorra az eredményekben, mert az nem olvasható ember vagy LLM számára, de searchable kell lennie. Mivel nincs szükség vektorokra a válaszban, mindkettő retrievablestored hamis.

A vektorkeresési konfigurációban definiált vektorizáló kritikus fontosságú. Meghatározza, hogy a vektormezőt használja-e a lekérdezés végrehajtása során. A vektorosító a lekérdezési időben vektorokká kódolja az albekérdezéseket a vektorok hasonlósági kereséséhez. A vektorizálónak ugyanazzal a beágyazási modellel kell rendelkeznie, amelyet a vektorok az indexben való létrehozásához használnak.

Minden searchable mező szerepel a lekérdezés végrehajtásában. Nem támogatott egy select olyan utasítás, amely kifejezetten kimondja, hogy mely mezőket kell lekérdezni.

Szemantikai konfiguráció hozzáadása

Az indexnek legalább egy szemantikai konfigurációval kell rendelkeznie. A szemantikai konfigurációnak a következőnek kell lennie:

  • Egy defaultSemanticConfiguration névvel ellátott konfigurációra állítva.
  • Legalább prioritizedContentFields egy olyan sztringmezőre van állítva, amely egyszerre searchable és retrievable.

A(z) prioritizedContentFields szükséges a konfiguráción belül. A cím és a kulcsszavak megadása nem kötelező. Szegmentált tartalom esetében előfordulhat, hogy nem rendelkezik vele. Ha azonban entitásfelismerést vagy kulcskifejezés-kinyeréseket ad hozzá, előfordulhat, hogy az egyes adattömbökhöz olyan kulcsszavak tartoznak, amelyek hasznosak lehetnek a keresési forgatókönyvekben, esetleg egy pontozóprofilban.

Íme egy példa egy szemantikai konfigurációra, amely agentikus lekérésnél működik:

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

Megjegyzés:

A válasz biztosítja a title, terms, és content elemeket, amelyek megfelelnek a konfigurációban kiemelt mezőknek.

Vektorizáló hozzáadása

Ha vektormezők vannak az indexben, a lekérdezési terv tartalmazza őket, ha vannak searchable , és rendelkeznek hozzárendeléssel vectorizer .

A vektorizáló olyan beágyazási modellt ad meg, amely a lekérdezési időpontban biztosít szöveg-vektor konverziót. Az index vektortartalmának kódolásához használt beágyazási modellre kell mutatnia. Az Azure AI Search által támogatott beágyazási modelleket használhatja. A vektorosítók vektorprofillal vannak megadva a vektormezőkben.

Idézze fel a vektormező definícióját az index példában. A vektormezők attribútumai közé tartoznak a dimenziók vagy a modell és a profil által létrehozott beágyazások száma.

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

A vektorprofilok vektorizálók, algoritmusok és tömörítési technikák konfigurációi. Minden vektormező csak egy profilt használhat, de az indexben sok lehet, ha egyedi profilokat szeretne minden vektormezőhöz.

A vektorok lekérdezése és a vektorizáló meghívása késést ad az általános kéréshez, de ha hasonlósági keresést szeretne, érdemes lehet kompromisszumot keresni.

Íme egy példa egy vektorizálóra, amely autonóm lekérésre szolgál, ahogy az a vectorSearch konfigurációjában jelenik meg. A vektorizáló definícióján nincs semmi, amit módosítani kellene az agentikus lekéréshez.

"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",
        "apiKey": "<redacted>",
        "modelName": "text-embedding-3-large"
      }
    }
  ],
  "compressions": []
}  

Pontozási profil hozzáadása

A pontozási profilok a relevancia növelésének feltételei. Ezek nem vektoros mezőkre (szövegre és számokra) vannak alkalmazva, és a lekérdezés végrehajtása során kiértékelik őket, bár a pontos viselkedés az index létrehozásához használt API-verziótól függ.

Ha az indexet a 2025-05-01 előzetes verzióval hozza létre, a pontozási profil utoljára fut. Ha az index egy korábbi API-verzióval jön létre, a pontozási profilok kiértékelése a szemantikai újrarankálás előtt történik.

Bármilyen olyan pontozási profilt használhat, amely értelmes az indexhez. Íme egy példa egy találat keresési pontszámának növelésére, ha az egyezés egy adott mezőben található. A mezők súlyozása felerősítő szorzókkal. Ha például egyezést talált a "Kategória" mezőben, a módosított pontszám ötszörözve lesz.

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

Elemzők hozzáadása

Az elemzők szövegmezőkre vonatkoznak , és lehetnek nyelvelemzők vagy egyéni elemzők, amelyek szabályozzák az index tokenizálását, például a speciális karakterek vagy a szóköz megőrzését.

Az elemzők egy keresési indexben vannak definiálva, és mezőkhöz vannak rendelve. A mezőgyűjteményi példa egy elemzőhivatkozást tartalmaz a szövegtömbökön. Ebben a példában az alapértelmezett elemző (standard Lucene) helyébe egy Microsoft nyelvi elemző kerül.

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

Szinonimatérkép hozzáadása

A szinonimatérképek a névvel ellátott kifejezések szinonimáinak hozzáadásával bővítik a lekérdezéseket. Előfordulhat például, hogy a gyakori kifejezésekhez tudományos vagy orvosi kifejezések tartoznak.

A szinonimatérképek legfelső szintű erőforrásként vannak definiálva egy keresési indexben, és mezőkhöz vannak rendelve. A mezőkollekció példa nem tartalmaz szinonimatérképet, de ha a szinonimatérképen az országnevek eltérő helyesírása szerepelne, az alábbi példa egy hipotetikus "lokációk" mezőhöz lenne rendelve.

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