Egyéni képesség hozzáadása egy Azure AI Search-bővítési folyamathoz

Az AI-bővítési folyamat magában foglalhatja a beépített készségeket és az egyéni készségeket is, amelyeket ön személyesen hoz létre és tesz közzé. Az egyéni kód külsőleg fut a keresési szolgáltatásba (például Azure-függvényként), de fogadja a bemeneteket, és kimeneteket küld a képességkészletnek, ugyanúgy, mint bármely más készség.

Az egyéni készségek összetettnek tűnhetnek, de a megvalósítás szempontjából egyszerűek és egyértelműek lehetnek. Ha már rendelkezik olyan csomagokkal, amelyek mintaegyező vagy besorolási modelleket biztosítanak, a blobokból kinyert tartalmat át lehet adni ezeknek a modelleknek feldolgozás céljából. Mivel az AI-bővítés Azure-alapú, a modellnek az Azure-ban is meg kell lennie. Néhány gyakori üzemeltetési módszer az Azure Functions vagy a Tárolók használata.

Ha egyéni készséget fejleszt, ez a cikk azt a felületet ismerteti, a segítségével integrálhatja a képességet a folyamatba. Az elsődleges követelmény a bemenetek elfogadása és a kimenetek olyan módon történő kibocsátása, amely a készségkészlet egészében fogyasztható. Ezért a cikk középpontjában a bővítési folyamat által igényelt bemeneti és kimeneti formátumok áll.

Az egyéni készségek előnyei

Az egyéni képességek létrehozása lehetővé teszi a tartalomra jellemző egyedi átalakítások beillesztését. Az egyéni képességek önállóan hajtják végre a szükséges bővítési lépéseket. Létrehozhat például egyéni besorolási modelleket az üzleti és pénzügyi szerződések és dokumentumok megkülönböztetéséhez, vagy hozzáadhat olyan beszédfelismerési képességet, amely részletesebben keres releváns tartalmakat a hangfájlokban. Részletes példa : Példa: Egyéni képesség létrehozása AI-bővítéshez.

A végpont és az időtúllépés időközének beállítása

Az egyéni képességek felülete a Custom Web API-képességen keresztül van megadva.

"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"description": "This skill has a 230 second timeout",
"uri": "https://[your custom skill uri goes here]",
"authResourceId": "[for managed identity connections, your app's client ID goes here]",
"timeout": "PT230S",

Az URI a függvény vagy alkalmazás HTTPS-végpontja. Az URI beállításakor győződjön meg arról, hogy az URI biztonságos (HTTPS). Ha a kód egy Azure-függvényalkalmazásban fut, az URI-nak tartalmaznia kell egy API-kulcsot a fejlécben, vagy URI-paraméterként a kérés engedélyezéséhez.

Ha a függvény vagy alkalmazás ehelyett Azure-beli felügyelt identitásokat és Azure-szerepköröket használ hitelesítéshez és engedélyezéshez, az egyéni képesség egy hitelesítési jogkivonatot is tartalmazhat a kérelemben. A következő pontok a megközelítés követelményeit írják le:

  • A keresési szolgáltatást, amely az indexelő nevében küldi el a kérelmet, úgy kell konfigurálni, hogy felügyelt identitást használjon (rendszer vagy felhasználó által hozzárendelt), hogy a hívó hitelesíthető legyen a Microsoft Entra-azonosítóval.

  • A függvényt vagy alkalmazást a Microsoft Entra-azonosítóhoz kell konfigurálni.

  • Az egyéni képességdefiníciónak tartalmaznia kell egy "authResourceId" tulajdonságot. Ez a tulajdonság az alkalmazás (ügyfél) azonosítóját használja támogatott formátumban: api://<appId>.

Alapértelmezés szerint a végponttal való kapcsolat időtúllépést eredményez, ha egy válasz nem 30 másodperces ablakban lesz visszaadva. Az indexelési folyamat szinkron, és az indexelés időtúllépési hibát eredményez, ha az adott időkeretben nem érkezik válasz. Az időtúllépési paraméter beállításával 230 másodperces maximális értékre növelheti az időközt:

Webes API-bemenetek formázása

A webes API-nak egy feldolgozandó rekordtömböt kell elfogadnia. Minden rekordnak tartalmaznia kell egy tulajdonságcsomagot, amely a webes API-hoz megadott bemenet.

Tegyük fel, hogy létre szeretne hozni egy alapszintű bővítőt, amely azonosítja a szerződés szövegében említett első dátumot. Ebben a példában az egyéni képesség egyetlen bemeneti "contractText" szöveget fogad el szerződésszövegként. A képesség egyetlen kimenettel is rendelkezik, amely a szerződés dátuma. A bővítő érdekesebbé tétele érdekében adja vissza ezt a "contractDate"-t egy többrészes összetett típus formájában.

A webes API-nak készen kell állnia a bemeneti rekordok kötegének fogadására. Az "értékek" tömb minden tagja egy adott rekord bemenetét jelöli. Minden rekordhoz a következő elemek szükségesek:

  • Egy "recordId" tag, amely egy adott rekord egyedi azonosítója. Amikor a bővítő visszaadja az eredményeket, meg kell adnia ezt a "recordId"-et, hogy a hívó a bemenetével egyezzen a rekorderedményekkel.

  • Egy "data" tag, amely lényegében egy zsák beviteli mező minden rekordhoz.

Az eredményként kapott webes API-kérés a következőképpen nézhet ki:

{
    "values": [
      {
        "recordId": "a1",
        "data":
           {
             "contractText": 
                "This is a contract that was issues on November 3, 2017 and that involves... "
           }
      },
      {
        "recordId": "b5",
        "data":
           {
             "contractText": 
                "In the City of Seattle, WA on February 5, 2018 there was a decision made..."
           }
      },
      {
        "recordId": "c3",
        "data":
           {
             "contractText": null
           }
      }
    ]
}

A gyakorlatban a kód több száz vagy több ezer rekorddal hívható meg az itt látható három helyett.

Webes API-kimenetek formázása

A kimenet formátuma egy rekordazonosítót és egy tulajdonságcsomagot tartalmazó rekordkészlet. Ez a konkrét példa csak egy kimenettel rendelkezik, de több tulajdonságot is kiadhat. Ajánlott eljárásként érdemes lehet hibaüzeneteket és figyelmeztető üzeneteket visszaadni, ha egy rekordot nem sikerült feldolgozni.

{
  "values": 
  [
      {
        "recordId": "b5",
        "data" : 
        {
            "contractDate":  { "day" : 5, "month": 2, "year" : 2018 }
        }
      },
      {
        "recordId": "a1",
        "data" : {
            "contractDate": { "day" : 3, "month": 11, "year" : 2017 }                    
        }
      },
      {
        "recordId": "c3",
        "data" : 
        {
        },
        "errors": [ { "message": "contractText field required "}   ],  
        "warnings": [ {"message": "Date not found" }  ]
      }
    ]
}

Egyéni képesség hozzáadása egy készségkészlethez

Webes API-bővítő létrehozásakor a kérelem részeként leírhatja a HTTP-fejléceket és paramétereket. Az alábbi kódrészlet bemutatja, hogyan vehetők fel a kérelemparaméterek és az opcionális HTTP-fejlécek a képességkészlet definíciójában. A HTTP-fejléc beállítása akkor hasznos, ha a konfigurációs beállításokat át kell adnia a kódnak.

{
    "skills": [
      {
        "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
        "name": "myCustomSkill",
        "description": "This skill calls an Azure function, which in turn calls TA sentiment",
        "uri": "https://indexer-e2e-webskill.azurewebsites.net/api/DateExtractor?language=en",
        "context": "/document",
        "httpHeaders": {
            "DateExtractor-Api-Key": "foo"
        },
        "inputs": [
          {
            "name": "contractText",
            "source": "/document/content"
          }
        ],
        "outputs": [
          {
            "name": "contractDate",
            "targetName": "date"
          }
        ]
      }
  ]
}

Videó megtekintése

A videó bemutatóját és bemutatóját az alábbi bemutatóban tekintheti meg.

Következő lépések

Ez a cikk az egyéni készségek készségkészletbe való integrálásához szükséges felületi követelményeket ismerteti. Folytassa ezekkel a hivatkozásokkal, hogy többet tudjon meg az egyéni készségekről és a készségek összetételéről.