Niestandardowa umiejętność internetowego interfejsu API w potoku wzbogacania usługi Azure AI Search
Umiejętność niestandardowego internetowego interfejsu API umożliwia rozszerzenie wzbogacania sztucznej inteligencji przez wywołanie punktu końcowego internetowego interfejsu API zapewniającego operacje niestandardowe. Podobnie jak w przypadku wbudowanych umiejętności, umiejętność niestandardowego internetowego interfejsu API zawiera dane wejściowe i wyjściowe. W zależności od danych wejściowych internetowy interfejs API odbiera ładunek JSON po uruchomieniu indeksatora i generuje ładunek JSON jako odpowiedź wraz z kodem stanu powodzenia. Oczekuje się, że odpowiedź będzie zawierać dane wyjściowe określone przez niestandardową umiejętność. Każda inna odpowiedź jest uważana za błąd i nie są wykonywane żadne wzbogacenia. Struktura ładunku JSON została opisana w dalszej części tego dokumentu.
Niestandardowa umiejętność internetowego interfejsu API jest również używana w implementacji funkcji Azure OpenAI On Your Data . Jeśli usługa Azure OpenAI jest skonfigurowana pod kątem dostępu opartego na rolach i otrzymujesz 403 Forbidden
wywołania podczas tworzenia indeksu wektorowego, sprawdź, czy usługa Azure AI Search ma tożsamość przypisaną przez system i działa jako zaufana usługa w usłudze Azure OpenAI.
Uwaga
Indeksator ponawia próbę dwukrotnie dla niektórych standardowych kodów stanu HTTP zwróconych z internetowego interfejsu API. Te kody stanu HTTP to:
502 Bad Gateway
503 Service Unavailable
429 Too Many Requests
@odata.type
Microsoft.Skills.Custom.WebApiSkill
Parametry umiejętności
W parametrach jest rozróżniana wielkość liter.
Nazwa parametru | opis |
---|---|
uri |
Identyfikator URI internetowego interfejsu API, do którego jest wysyłany ładunek JSON. Dozwolony jest tylko schemat identyfikatora URI https. |
authResourceId |
(Opcjonalnie) Ciąg, który w przypadku ustawienia wskazuje, że ta umiejętność powinna używać tożsamości zarządzanej przez system na połączeniu z funkcją lub aplikacją hostująca kod. Ta właściwość przyjmuje identyfikator aplikacji (klienta) lub rejestrację aplikacji w identyfikatorze Entra firmy Microsoft w dowolnym z następujących formatów: api://<appId> , , <appId>/.default api://<appId>/.default . Ta wartość służy do określania zakresu tokenu uwierzytelniania pobranego przez indeksator i jest wysyłana wraz z niestandardowym żądaniem internetowego interfejsu API umiejętności do funkcji lub aplikacji. Ustawienie tej właściwości wymaga skonfigurowania usługi wyszukiwania pod kątem tożsamości zarządzanej, a aplikacja funkcji platformy Azure jest skonfigurowana na potrzeby logowania w usłudze Microsoft Entra. Aby użyć tego parametru, wywołaj interfejs API za pomocą api-version=2023-10-01-Preview polecenia . |
authIdentity |
(Opcjonalnie) Tożsamość zarządzana przez użytkownika używana przez usługę wyszukiwania do nawiązywania połączenia z funkcją lub aplikacją hostująca kod. Możesz użyć tożsamości zarządzanej przez system lub użytkownika. Aby użyć tożsamości zarządzanej przez system, pozostaw authIdentity wartość pustą. |
httpMethod |
Metoda do użycia podczas wysyłania ładunku. Dozwolone metody są PUT lub POST |
httpHeaders |
Kolekcja par klucz-wartość, w których klucze reprezentują nazwy nagłówków i wartości reprezentują wartości nagłówków wysyłane do internetowego interfejsu API wraz z ładunkiem. Następujące nagłówki nie mogą być w tej kolekcji: Accept , Accept-Charset Upgrade Accept-Encoding Content-Length TE Content-Type Cookie Host . Via |
timeout |
(Opcjonalnie) Po określeniu wskazuje limit czasu dla klienta http wykonującego wywołanie interfejsu API. Musi być sformatowana jako wartość XSD "dayTimeDuration" (ograniczony podzestaw wartości czasu trwania ISO 8601). Na przykład PT60S przez 60 sekund. Jeśli nie zostanie ustawiona, zostanie wybrana wartość domyślna 30 sekund. Limit czasu można ustawić na maksymalnie 230 sekund i co najmniej 1 sekundę. |
batchSize |
(Opcjonalnie) Wskazuje, ile "rekordów danych" (zobacz strukturę ładunku JSON poniżej) jest wysyłanych na wywołanie interfejsu API. Jeśli nie zostanie ustawiona, zostanie wybrana wartość domyślna 1000. Zalecamy użycie tego parametru w celu osiągnięcia odpowiedniego kompromisu między indeksowaniem przepływności i obciążeniem interfejsu API. |
degreeOfParallelism |
(Opcjonalnie) Po określeniu wskazuje liczbę wywołań, które indeksator wykonuje równolegle do podanego punktu końcowego. Tę wartość można zmniejszyć, jeśli punkt końcowy ulega awarii pod presją, lub podnieść go, jeśli punkt końcowy może obsłużyć obciążenie. Jeśli nie zostanie ustawiona, zostanie użyta wartość domyślna 5. degreeOfParallelism Można ustawić wartość maksymalnie 10 i co najmniej 1. |
Dane wejściowe umiejętności
Dla tej umiejętności nie ma wstępnie zdefiniowanych danych wejściowych. Dane wejściowe to dowolne istniejące pole lub dowolny węzeł w drzewie wzbogacania, które chcesz przekazać do swojej umiejętności niestandardowej.
Dane wyjściowe umiejętności
Dla tej umiejętności nie ma wstępnie zdefiniowanych danych wyjściowych. Pamiętaj, aby zdefiniować mapowanie pól wyjściowych w indeksatorze, jeśli dane wyjściowe umiejętności powinny być wysyłane do pola w indeksie wyszukiwania.
Przykładowa definicja
{
"@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"
}
]
}
Przykładowa struktura danych wejściowych JSON
Ta struktura JSON reprezentuje ładunek wysyłany do internetowego interfejsu API. Zawsze jest to zgodne z następującymi ograniczeniami:
Jednostka najwyższego poziomu jest wywoływana
values
i jest tablicą obiektów. Liczba takich obiektów jest w większości .batchSize
Każdy obiekt w tablicy
values
ma:recordId
Właściwość, która jest unikatowym ciągiem służącym do identyfikowania tego rekordu.data
Właściwość, która jest obiektem JSON. Poladata
właściwości odpowiadają "nazwam" określonym winputs
sekcji definicji umiejętności. Wartości tych pól pochodzą z tych pól (które mogą pochodzić zsource
pola w dokumencie lub potencjalnie z innej umiejętności).
{
"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": []
}
}
]
}
Przykładowa struktura danych wyjściowych JSON
Wyrażenie "output" odpowiada odpowiedzi zwróconej z internetowego interfejsu API. Internetowy interfejs API powinien zwracać tylko ładunek JSON (zweryfikowany przez sprawdzenie nagłówka Content-Type
odpowiedzi) i powinien spełniać następujące ograniczenia:
Powinna istnieć jednostka najwyższego poziomu o nazwie
values
, która powinna być tablicą obiektów.Liczba obiektów w tablicy powinna być taka sama jak liczba obiektów wysyłanych do internetowego interfejsu API.
Każdy obiekt powinien mieć:
Właściwość
recordId
.Właściwość
data
, która jest obiektem, w którym pola są wzbogacane pasujące do "nazw" woutput
obiekcie i którego wartość jest traktowana jako wzbogacanie.Właściwość, tablica zawierająca
errors
listę błędów, które zostały dodane do historii wykonywania indeksatora. Ta właściwość jest wymagananull
, ale może mieć wartość.Właściwość, tablica
warnings
zawierająca listę wszystkich napotkanych ostrzeżeń, które są dodawane do historii wykonywania indeksatora. Ta właściwość jest wymagananull
, ale może mieć wartość.
Kolejność obiektów w
values
obiekcie w żądaniu lub odpowiedzi nie jest ważna. Parametr jest jednak używany do korelacji,recordId
więc każdy rekord w odpowiedzi zawierającejrecordId
element , który nie był częścią oryginalnego żądania do internetowego interfejsu API, zostanie odrzucony.
{
"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"
}
]
},
]
}
Przypadki błędów
Oprócz niedostępności internetowego interfejsu API lub wysyłania nieudanych kodów stanu są uznawane za błędne przypadki:
Jeśli internetowy interfejs API zwróci kod stanu powodzenia, ale odpowiedź wskazuje, że nie
application/json
jest to odpowiedź uważana za nieprawidłową i nie są wykonywane żadne wzbogacania.Jeśli w tablicy odpowiedzi
values
brakuje nieprawidłowych rekordów (na przykładrecordId
brakuje ich lub zduplikowane), dla nieprawidłowych rekordów nie jest wykonywana wzbogacanie. Ważne jest, aby stosować się do umowy umiejętności internetowego interfejsu API podczas opracowywania niestandardowych umiejętności. Możesz odwołać się do tego przykładu podanego w repozytorium Umiejętności power, które jest zgodne z oczekiwanym kontraktem.
W przypadku, gdy internetowy interfejs API jest niedostępny lub zwraca błąd HTTP, przyjazny błąd z wszelkimi dostępnymi szczegółami dotyczącymi błędu HTTP jest dodawany do historii wykonywania indeksatora.