Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Note
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.
Använd den anpassade webb-API-färdigheten för att utöka AI-berikandet genom att anropa en webb-API-slutpunkt som tillhandahåller anpassade åtgärder. Precis som inbyggda kunskaper har en anpassad webb-API-färdighet indata och utdata. Beroende på indata får webb-API:et en JSON-nyttolast när indexeraren körs och returnerar en JSON-nyttolast som ett svar, tillsammans med en statuskod för lyckad körning. Svaret måste innehålla de utdata som anges av din anpassade färdighet. Andra svar anses vara ett fel och inga berikningar utförs. Strukturen för JSON-nyttolasten beskrivs senare i det här dokumentet.
Den anpassade webb-API-färdigheten används också i implementeringen av funktionen Azure OpenAI On Your Data. Om Azure OpenAI har konfigurerats för rollbaserad åtkomst och du får 403 Forbidden fel när du skapar vektorindexet kontrollerar du att Azure AI-sökning har en systemtilldelad identitet och körs som en betrodd tjänst på Azure OpenAI.
Note
Indexeraren försöker igen två gånger för vissa STANDARD HTTP-statuskoder som returneras från webb-API:et. Dessa HTTP-statuskoder är:
502 Bad Gateway503 Service Unavailable429 Too Many Requests
@odata.type
Microsoft.Skills.Custom.WebApiSkill
Kompetensparametrar
Parametrar är skiftlägeskänsliga.
| Parameternamn | Description |
|---|---|
uri |
URI:n för webb-API:et som JSON-nyttolasten skickas till.
Endast https-URI-schemat tillåts. När du hämtar kunskapsuppsättningen med GET returnerar ?code= tjänsten frågeparametervärdet för ?code=<redacted> att förhindra exponering av funktionsnycklar. Om du vill uppdatera färdigheten utan att ändra den lagrade URI:n anger du uri till <unchanged>. |
authResourceId |
(Valfritt) En sträng som, när den anges, anger att den här färdigheten ska använda en systemhanterad identitet på anslutningen till den funktion eller app som är värd för koden. Den här egenskapen tar ett program-ID (klient)-ID eller en apps registrering i Microsoft Entra ID i något av följande format: api://<appId>, <appId>/.defaulteller api://<appId>/.default. Det här värdet används för att begränsa autentiseringstoken som hämtats av indexeraren och skickas tillsammans med den anpassade webb-API:ns kunskapsbegäran till funktionen eller appen. Om du anger den här egenskapen måste din söktjänst konfigureras för hanterad identitet och att azure-funktionsappen har konfigurerats för en Microsoft Entra-inloggning. Om du vill använda den här parametern anropar du API:et med api-version=2023-10-01-preview eller senare. Information om hur du väljer rätt värde finns i Förstå värdetauthResourceId. |
authIdentity |
(Valfritt) En användarhanterad identitet som används av söktjänsten för att ansluta till funktionen eller appen som är värd för koden. Du kan använda antingen en system- eller användarhanterad identitet. Lämna tom om du vill använda en systemhanterad identitet authIdentity . |
httpMethod |
Den metod som ska användas när nyttolasten skickas. Tillåtna metoder är PUT eller POST |
httpHeaders |
En samling nyckel/värde-par där nycklarna representerar rubriknamn och värden representerar huvudvärden som skickas till webb-API:et tillsammans med nyttolasten. Följande rubriker får inte vara i den här samlingen: , , , , , Accept, Accept-Charset, Accept-Encoding, Content-Length, , Content-Type, . CookieHostTEUpgradeVia När du hämtar kunskapsuppsättningen med GET returnerar <redacted> tjänsten för alla rubrikvärden för att förhindra exponering av autentiseringsuppgifter som ägartoken och API-nycklar. Om du vill uppdatera kunskapen utan att ändra lagrade rubrikvärden anger du varje värde till <unchanged>. Tjänsten återställer det ursprungliga lagrade värdet. |
timeout |
(Valfritt) När det anges anger du tidsgränsen för http-klienten som gör API-anropet. Det måste formateras som ett XSD-värde "dayTimeDuration" (en begränsad delmängd av ett ISO 8601-varaktighetsvärde ). Till exempel PT60S i 60 sekunder. Om det inte anges väljs ett standardvärde på 30 sekunder. Tidsgränsen kan anges till högst 230 sekunder och minst 1 sekund. |
batchSize |
(Valfritt) Anger hur många "dataposter" (se JSON-nyttolaststrukturen nedan) som skickas per API-anrop. Om den inte har angetts väljs standardvärdet 1 000. Använd den här parametern för att uppnå en lämplig kompromiss mellan indexeringsdataflöde och belastning på ditt API. |
degreeOfParallelism |
(Valfritt) När detta anges anger det antal anrop som indexeraren gör parallellt med den slutpunkt som du anger. Du kan minska det här värdet om slutpunkten misslyckas under tryck eller höja det om slutpunkten kan hantera belastningen. Om det inte anges används standardvärdet 5.
degreeOfParallelism Kan anges till högst 10 och minst 1. |
Förstå värdet authResourceId
När en anpassad webb-API-färdighet använder hanterad identitetsautentisering hämtar Azure AI-sökning en Microsoft Entra åtkomsttoken och skickar den till den anpassade kunskapsslutpunkten. Egenskapen authResourceId anger resursidentifieraren, även kallad målgrupp eller program-ID-URI, för vilken token begärs. Värdet måste matcha vad målprogrammet förväntar sig under tokenverifieringen. Annars misslyckas autentiseringen med ett 401 Unauthorized svar.
Värdet authResourceId identifierar programmet som är värd för din anpassade kompetens. Det är inte URL:en för din söktjänst eller indexerare.
I följande tabell visas vanliga format:
| Målapplikation |
authResourceId värde |
|---|---|
| Microsoft Entra skyddat webbprogram | api://<application-client-id> |
| Program konfigurerat med en anpassad program-ID-URI | URI för anpassat program-ID, till exempel api://contoso-customskill |
| Azure funktion som skyddas av Microsoft Entra ID | Program-ID-URI som konfigurerats för funktionsappens appregistrering, till exempel api://contoso-funcapp |
Egenskapen accepterar format med och utan omfångssuffixet .default . Använd api://<appId> för att matcha program-ID-URI:n direkt. Om du inkluderar ett .default suffix, till exempel api://<appId>/.default, innehåller åtkomsttokens aud anspråk den grundläggande program-ID-URI:n utan suffixet.
Anvisningar för hur du konfigurerar Microsoft Entra autentisering för en Azure funktion och anger authResourceIdfinns i Använda en hanterad identitet för söktjänsten för att ansluta till en Azure Funktionsapp.
Exempel: Azure funktion som skyddas av Microsoft Entra ID
I det här exemplet hämtar Azure AI-sökning en åtkomsttoken för målgruppen som anges av authResourceId och inkluderar token när du anropar den anpassade kunskapsslutpunkten.
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"uri": "https://contoso-function.azurewebsites.net/api/enrich",
"authResourceId": "api://contoso-customskill"
}
Kunskapsindata
Den här färdigheten har inga fördefinierade indata. Indata är ett befintligt fält eller en nod i berikande träd som du vill skicka till din anpassade kompetens.
Färdighetsresultat
Den här färdigheten har inga fördefinierade utdata. Se till att definiera en mappning av utdatafält i indexeraren om kunskapens utdata ska skickas till ett fält i sökindexet.
Exempeldefinition
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"description": "A custom skill that can identify positions of different phrases in the source text",
"uri": "https://contoso.count-things.com",
"batchSize": 4,
"context": "/document",
"inputs": [
{
"name": "text",
"source": "/document/content"
},
{
"name": "language",
"source": "/document/languageCode"
},
{
"name": "phraseList",
"source": "/document/keyphrases"
}
],
"outputs": [
{
"name": "hitPositions"
}
]
}
Note
När du hämtar en kompetensuppsättning med hjälp av GET returnerar <redacted> tjänsten för alla httpHeaders värden och ?code=<redacted> för alla ?code= frågeparametrar i uri. Båda värdena förhindrar exponering av autentiseringsuppgifter för anropare som har rollen Search Service-deltagare men ingen roll i den externa tjänsten. Om du vill uppdatera färdigheten utan att ändra de lagrade värdena skickar <unchanged> du för varje berört fält.
I följande exempel visas ett GET-svar för en färdighet som använder rubrikbaserad autentisering och en Azure funktions-URI:
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"uri": "https://contoso.example.org/api?code=<redacted>",
"httpMethod": "POST",
"name": "myCustomSkill",
"httpHeaders": {
"Authorization": "<redacted>",
"Ocp-Apim-Subscription-Key": "<redacted>"
}
}
Om du vill uppdatera den här färdigheten utan att ändra de befintliga värdena använder du <unchanged>:
{
"uri": "<unchanged>",
"httpHeaders": {
"Authorization": "<unchanged>",
"Ocp-Apim-Subscription-Key": "<unchanged>"
}
}
Exempel på JSON-struktur för indata
Den här JSON-strukturen representerar nyttolasten som du skickar till webb-API:et. Den följer alltid dessa begränsningar:
Entiteten på den översta nivån anropas
valuesoch är en matris med objekt. Antalet objekt är som mestbatchSize.Varje objekt i matrisen
valueshar:En
recordIdegenskap som är en unik sträng som används för att identifiera posten.En
dataegenskap som är ett JSON-objekt. Fälten idataegenskapen motsvarar de "namn" som anges iinputsavsnittet i kunskapsdefinitionen. Värdena för dessa fält kommer från fältensource(som kan komma från ett fält i dokumentet eller eventuellt från en annan färdighet).
{
"values": [
{
"recordId": "0",
"data":
{
"text": "Este es un contrato en Inglés",
"language": "es",
"phraseList": ["Este", "Inglés"]
}
},
{
"recordId": "1",
"data":
{
"text": "Hello world",
"language": "en",
"phraseList": ["Hi"]
}
},
{
"recordId": "2",
"data":
{
"text": "Hello world, Hi world",
"language": "en",
"phraseList": ["world"]
}
},
{
"recordId": "3",
"data":
{
"text": "Test",
"language": "es",
"phraseList": []
}
}
]
}
Exempel på JSON-struktur för utdata
"Utdata" motsvarar svaret som returneras från webb-API:et. Webb-API:et bör endast returnera en JSON-nyttolast (verifieras genom att titta på Content-Type svarshuvudet) och bör uppfylla följande begränsningar:
Det bör finnas en entitet på den översta nivån som heter
values, som ska vara en matris med objekt.Antalet objekt i matrisen ska vara detsamma som antalet objekt som skickas till webb-API:et.
Varje objekt ska ha:
En
recordIdegenskap.En
dataegenskap, som är ett objekt där fälten är berikningar som matchar "namnen" ioutputoch vars värde anses vara berikningen.En
errorsegenskap, en matris som visar eventuella fel som har lagts till i indexerarens körningshistorik. Den här egenskapen krävs, men kan ha ettnullvärde.En
warningsegenskap, en matris som visar eventuella varningar som har lagts till i indexerarens körningshistorik. Den här egenskapen krävs, men kan ha ettnullvärde.
Ordningen på objekt i
valuesi antingen begäran eller svaret är inte viktigt.recordIdMen används för korrelation så att alla poster i svaret som innehåller enrecordId, som inte ingick i den ursprungliga begäran till webb-API:et ignoreras.
{
"values": [
{
"recordId": "3",
"data": {
},
"errors": [
{
"message" : "'phraseList' should not be null or empty"
}
],
"warnings": null
},
{
"recordId": "2",
"data": {
"hitPositions": [6, 16]
},
"errors": null,
"warnings": null
},
{
"recordId": "0",
"data": {
"hitPositions": [0, 23]
},
"errors": null,
"warnings": null
},
{
"recordId": "1",
"data": {
"hitPositions": []
},
"errors": null,
"warnings": [
{
"message": "No occurrences of 'Hi' were found in the input text"
}
]
},
]
}
Felhanteringsfall
Utöver att webb-API:et inte är tillgängligt eller skickar statuskoder som inte lyckas kan du betrakta följande fall som fel:
Om webb-API:et returnerar en statuskod för lyckade försök, men svaret anger att det inte
application/jsonär det, är svaret ogiltigt och inga berikningar utförs.Om svarsmatrisen
valuesinnehåller ogiltiga poster (till exempel saknas eller duplicerasrecordId) utökas inte de ogiltiga posterna. När du utvecklar anpassade kunskaper följer du kunskapskontraktet för webb-API:et. Du kan se det här exemplet som finns på lagringsplatsenför Power Skill som följer det förväntade kontraktet.
Om webb-API:et inte är tillgängligt eller returnerar ett HTTP-fel innehåller indexerarens körningshistorik ett användarvänligt fel med all tillgänglig information om HTTP-felet.
Säkerhetsöverväganden för hanterad identitetsautentisering
När du använder hanterad identitetsautentisering med en anpassad webb-API-färdighet hämtar Azure AI-sökning en Microsoft Entra åtkomsttoken för programmet som identifieras av authResourceId och inkluderar den token i begäranden som skickas till slutpunkten som anges av uri. Slutpunkten som refereras av uri är vanligtvis din Azure-funktion, Azure App Service, Azure API Management slutpunkt eller ett annat Microsoft Entra-skyddat program. Du ansvarar för att konfigurera och underhålla relationen mellan slutpunkten och programmet som identifieras av authResourceId.
Oavsett autentiseringsmetod kan anpassade kunskapsindata innehålla värden från dokument som tillhandahålls av kunden eller värden som härletts från dessa dokument. Behandla alla anpassade kunskapsindata som ej betrodda. Azure AI-sökning vidarebefordrar indata som konfigurerats i kunskapsuppsättningen till slutpunkten utan att tolka, validera eller begränsa deras innehåll för din anpassade implementering.
Verifiera och begränsa dokument härledda värden i din anpassade kompetens innan du använder dem i utgående begäranden eller andra säkerhetskänsliga åtgärder. Använd validering av indata, tillåtna mållistor, validering av URL och värdnamn, protokollbegränsningar och nätverksåtkomst med minst privilegier som endast tillåter de mål och portar som kompetensen kräver. Mer information finns i Arkitekturstrategier för nätverk och anslutning.
Rekommenderade säkerhetsmetoder
Följ dessa metoder för att upprätthålla en säker distribution:
- Konfigurera egenskapen så att den
uriendast pekar på betrodda slutpunkter som är avsedda att ta emot begäranden från Azure AI-sökning. - Konfigurera
authResourceIdför att identifiera det Microsoft Entra program som förväntas ta emot och verifiera åtkomsttoken. - Kontrollera att programmet som tar emot begäranden validerar standardtokenanspråk, inklusive målgrupp (
aud), utfärdare (iss), klientorganisation (tid) och eventuella nödvändiga programroller eller behörigheter innan begäranden bearbetas. - Tillämpa principen om lägsta behörighet när du beviljar behörigheter till den Azure AI-sökning hanterade identiteten.
- Granska regelbundet anpassade webb-API:ers kunskapsdefinitioner, Microsoft Entra programregistreringar och approlltilldelningar och behörigheter som beviljats Azure AI-sökning hanterade identiteter. Granska konfigurationsändringar via dina etablerade processer för ändringshantering och säkerhetsgranskning.
- Granska regelbundet slutpunktskonfigurationer för Azure Functions, App Services, API:er och API-gatewayer.
- Övervaka inloggningsloggar för program, autentiseringshändelser och API-åtkomstloggar för oväntad eller obehörig aktivitet.
- Ta bort oanvända slutpunkter, behörigheter, programregistreringar och rolltilldelningar som inte längre krävs.
Begränsa åtkomsten till konfiguration av kompetensuppsättningar
Användare som kan skapa, ändra eller köra kompetensuppsättningar kan styra både målslutpunkten och autentiseringskonfigurationen som används av en anpassad webb-API-färdighet. Begränsa dessa behörigheter till betrodda administratörer och följ standardprocesserna för ändringshantering och säkerhetsgranskning när du konfigurerar hanterade identitetsaktiverade anpassade kunskaper.
Important
Värdet authResourceId identifierar det avsedda mottagarprogrammet för åtkomsttoken. Kontrollera att slutpunkten som anges i uri är den slutpunkt som förväntas ta emot och verifiera token för programmet. Felaktig konfiguration kan leda till att autentiseringsfel eller begäranden skickas till en oavsiktlig slutpunkt.