Azure AI Arama zenginleştirme işlem hattında özel Web API'si becerisi

Note

Azure Yapay Zeka Arama Azure portalı, REST API'leri ve Azure SDK’ları aracılığıyla kullanılabilir. Ayrıca kuruluş içeriğini Microsoft Foundry portalındaki aracılar için yeniden kullanılabilir, izin kullanan bilgi bankalarına dönüştüren yönetilen bilgi katmanı Foundry IQ'yu temel alır.

Özel işlemler sağlayan bir Web API uç noktasını çağırarak yapay zeka zenginleştirmesini genişletmek için Özel Web API'sini kullanın. Yerleşik beceriler gibi Özel Web API'sinde de girişler ve çıkışlar bulunur. Girişlere bağlı olarak, dizin oluşturucu çalıştırıldığında Web API'niz bir JSON yükü alır ve yanıt olarak bir JSON yükü ve bir başarı durum kodu döndürür. Yanıt, özel beceriniz tarafından belirtilen çıkışları içermelidir. Diğer tüm yanıtlar hata olarak kabul edilir ve zenginleştirme yapılmaz. JSON yükünün yapısı bu belgenin ilerleyen bölümlerinde açıklanmıştır.

Özel Web API'sinin becerisi, Azure Verilerinizde OpenAI özelliğinin uygulanmasında da kullanılır. Azure OpenAI rol tabanlı erişim için yapılandırılmışsa ve vektör dizinini oluştururken hata alırsanız403 Forbidden, Azure Yapay Zeka Arama sistem tarafından atanmış bir kimliğe sahip olduğunu ve Azure OpenAI üzerinde güvenilir bir hizmet olarak çalıştığını doğrulayın.

Note

Dizin oluşturucu, Web API'sinden döndürülen belirli standart HTTP durum kodları için iki kez yeniden denenir. Bu HTTP durum kodları şunlardır:

  • 502 Bad Gateway
  • 503 Service Unavailable
  • 429 Too Many Requests

@odata.type

Microsoft.Skills.Custom.WebApiSkill

Beceri parametreleri

Parametreler büyük/küçük harfe duyarlıdır.

Parametre adı Description
uri JSON yükünün gönderildiği Web API'sinin URI'sini. Yalnızca https URI düzenine izin verilir. GET ile beceri kümesini aldığınızda, hizmet işlev anahtarlarının ?code= açığa çıkmasını önlemek için olarak sorgu parametresi değerini ?code=<redacted> döndürür. Depolanan URI'yi değiştirmeden beceriyi güncelleştirmek için olarak uriayarlayın<unchanged>.
authResourceId (İsteğe bağlı) Ayarlandığında, bu becerinin kodu barındıran işlev veya uygulama bağlantısında sistem tarafından yönetilen bir kimlik kullanması gerektiğini belirten bir dize. Bu özellik, bir uygulama (istemci) kimliğini veya bir uygulamanın kaydını şu biçimlerden herhangi birinde Microsoft Entra ID alır: api://<appId>, <appId>/.defaultveya api://<appId>/.default. Bu değer, dizin oluşturucu tarafından alınan kimlik doğrulama belirtecinin kapsamını daraltmak için kullanılır ve işleve veya uygulamaya Özel Web API'sinin beceri isteğiyle birlikte gönderilir. Bu özelliğin ayarlanması, arama hizmetinizin yönetilen kimlik için yapılandırılmasını ve Azure işlev uygulamanızın bir Microsoft Entra oturum açma işlemi için yapılandırılmasını gerektirir. Bu parametreyi kullanmak için API'yi veya üzerini api-version=2023-10-01-preview çağırın. Doğru değeri seçme konusunda rehberlik için bkz. Değeri anlamaauthResourceId.
authIdentity (İsteğe bağlı) Arama hizmeti tarafından kodu barındıran işleve veya uygulamaya bağlanmak için kullanılan kullanıcı tarafından yönetilen kimlik. Sistem veya kullanıcı tarafından yönetilen kimlik kullanabilirsiniz. Sistem tarafından yönetilen kimlik kullanmak için boş bırakın authIdentity .
httpMethod Yükü gönderirken kullanılacak yöntem. İzin verilen yöntemler veya'dır PUTPOST
httpHeaders Anahtarların üst bilgi adlarını, değerlerin de yüküyle birlikte Web API'nize gönderilen üst bilgi değerlerini temsil ettiği anahtar-değer çiftleri koleksiyonu. Aşağıdaki üst bilgilerin bu koleksiyonda olması yasaktır: , , , , , Accept, Accept-Charset, Accept-Encoding, Content-LengthContent-Type, Cookie. HostTEUpgradeVia GET ile beceri kümesini aldığınızda hizmet, taşıyıcı belirteçleri ve API anahtarları gibi kimlik bilgilerinin açığa çıkmasını önlemek için tüm üst bilgi değerlerini döndürür <redacted> . Depolanan üst bilgi değerlerini değiştirmeden beceriyi güncelleştirmek için her değeri olarak <unchanged>ayarlayın. Hizmet, özgün depolanmış değeri geri yükler.
timeout (İsteğe bağlı) Belirtildiğinde, API çağrısı yapan http istemcisinin zaman aşımını gösterir. XSD "dayTimeDuration" değeri (ISO 8601 süre değerinin kısıtlanmış bir alt kümesi) olarak biçimlendirilmelidir. Örneğin, PT60S 60 saniye için. Ayarlanmamışsa, varsayılan değer olarak 30 saniye seçilir. Zaman aşımı en fazla 230 saniye ve en az 1 saniye olarak ayarlanabilir.
batchSize (İsteğe bağlı) API çağrısı başına kaç "veri kaydı" gönderildiğini gösterir (aşağıdaki JSON yük yapısına bakın). Ayarlanmamışsa, varsayılan olarak 1000 seçilir. Dizin aktarım hızı ile API'nizdeki yük arasında uygun bir denge elde etmek için bu parametreyi kullanın.
degreeOfParallelism (İsteğe bağlı) Belirtildiğinde, dizin oluşturucunun sağladığınız uç noktaya paralel olarak yaptığı çağrı sayısını gösterir. Uç noktanız baskı altında başarısız oluyorsa bu değeri azaltabilir veya uç noktanız yükü işleyebilirse yükseltebilirsiniz. Ayarlanmazsa, varsayılan 5 değeri kullanılır. degreeOfParallelism en fazla 10 ve en az 1 olarak ayarlanabilir.

authResourceId Değeri anlama

Özel Web API'sinin becerisi yönetilen kimlik doğrulaması kullandığında, Azure Yapay Zeka Arama bir Microsoft Entra erişim belirteci alır ve özel beceri uç noktasına gönderir. authResourceId özelliği, belirtecin istendiği hedef kitle veya Uygulama Kimliği URI'si olarak da bilinen kaynak tanımlayıcısını belirtir. Değer, belirteç doğrulaması sırasında hedef uygulamanın beklediği değerle eşleşmelidir. Aksi takdirde, kimlik doğrulaması bir 401 Unauthorized yanıtla başarısız olur.

değeri, authResourceId özel becerinizi barındıran uygulamayı tanımlar. Arama hizmetinizin veya dizin oluşturucunuzun URL'si değildir.

Aşağıdaki tabloda yaygın biçimler gösterilmektedir:

Hedef uygulama authResourceId Değer
Korumalı web uygulamasını Microsoft Entra api://<application-client-id>
Özel Uygulama Kimliği URI'si ile yapılandırılan uygulama Özel Uygulama Kimliği URI'si, örneğin api://contoso-customskill
Azure İşlevi Microsoft Entra ID tarafından korunuyor İşlev uygulamasının uygulama kaydı için yapılandırılan Uygulama Kimliği URI'si, örneğin api://contoso-funcapp

özelliği, kapsam soneki olan ve olmayan .default biçimleri kabul eder. Uygulama Kimliği URI'sini doğrudan eşleştirmek için kullanın api://<appId> . gibi .defaultbir api://<appId>/.default sonek eklerseniz, erişim belirtecinin aud talebi sonek olmadan temel Uygulama Kimliği URI'sini içerir.

Azure İşlevi için Microsoft Entra kimlik doğrulamasını yapılandırma ve ayarlama authResourceIdadımları için bkz. Azure İşlev uygulamasına bağlanmak için arama hizmeti yönetilen kimliğini kullanma.

Örnek: Microsoft Entra ID tarafından korunan Azure İşlevi

Bu örnekte, Azure Yapay Zeka Arama tarafından authResourceId belirtilen hedef kitle için bir erişim belirteci alır ve özel beceri uç noktasını çağırırken belirteci içerir.

{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "uri": "https://contoso-function.azurewebsites.net/api/enrich",
  "authResourceId": "api://contoso-customskill"
}

Beceri girişleri

Bu becerinin önceden tanımlanmış girişi yoktur. Girişler, var olan herhangi bir alan veya özel becerinize geçirmek istediğiniz zenginleştirme ağacındaki herhangi bir düğüm.

Beceri çıkışları

Bu becerinin önceden tanımlanmış çıkışı yok. Becerinin çıkışının arama dizinindeki bir alana gönderilmesi gerekiyorsa dizin oluşturucuda bir çıkış alanı eşlemesi tanımladığınızdan emin olun.

Örnek tanım

{
  "@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

GET kullanarak bir beceri kümesi aldığınızda, hizmet tüm <redacted> değerler için ve httpHeaders içindeki ?code=<redacted>herhangi bir ?code= sorgu parametresi için döndürüruri. Her iki değer de Arama Hizmeti Katkıda Bulunanı rolüne sahip olan ancak dış hizmette rol bulunmayan arayanların kimlik bilgilerinin açığa çıkmasını engeller. Bu depolanan değerleri değiştirmeden beceriyi güncelleştirmek için, etkilenen her alan için geçin <unchanged> .

Aşağıdaki örnekte, üst bilgi tabanlı kimlik doğrulaması ve Azure İşlev URI'sini kullanan bir beceri için GET yanıtı gösterilmektedir:

{
  "@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>"
  }
}

Mevcut değerleri değiştirmeden bu beceriyi güncelleştirmek için kullanın <unchanged>:

{
  "uri": "<unchanged>",
  "httpHeaders": {
    "Authorization": "<unchanged>",
    "Ocp-Apim-Subscription-Key": "<unchanged>"
  }
}

Örnek giriş JSON yapısı

Bu JSON yapısı, Web API'nize gönderdiğiniz yükü temsil eder. Her zaman şu kısıtlamaları izler:

  • Üst düzey varlık çağrılır values ve bir nesne dizisidir. Bu nesnelerin sayısı en çok olandır batchSize.

  • Dizideki her nesnenin values sahip olduğu:

    • recordId Bu kaydı tanımlamak için kullanılan benzersiz bir dize olan özellik.

    • data JSON nesnesi olan bir özellik. özelliğinin data alanları, beceri tanımının bölümünde belirtilen inputs "adlara" karşılık gelir. Bu alanların değerleri bu alanların (belgedeki source bir alandan veya başka bir beceriden olabilir) kaynaklanabilir.

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

Örnek çıkış JSON yapısı

"Çıkış", Web API'nizden döndürülen yanıta karşılık gelir. Web API'sinin yalnızca bir JSON yükü döndürmesi (yanıt üst bilgisine Content-Type bakarak doğrulanmış) ve aşağıdaki kısıtlamaları karşılaması gerekir:

  • adlı valuesbir üst düzey varlık olmalıdır ve bu bir nesne dizisi olmalıdır.

  • Dizideki nesne sayısı, Web API'sine gönderilen nesne sayısıyla aynı olmalıdır.

  • Her nesnenin sahip olması gerekenler:

    • Bir recordId özellik.

    • data Alanların içindeki "adlarla" output eşleşen zenginleştirmeler olduğu ve değerinin zenginleştirme olarak kabul edildiği bir nesne olan özellik.

    • Dizin errors oluşturucu yürütme geçmişine eklenen hataları listeleyen bir özellik. Bu özellik gereklidir, ancak bir null değere sahip olabilir.

    • warnings Dizin oluşturucu yürütme geçmişine eklenen uyarıları listeleyen bir dizi özelliği. Bu özellik gereklidir, ancak bir null değere sahip olabilir.

  • içindeki nesnelerin values istekte veya yanıtta sıralanması önemli değildir. Ancak, web API'sine recordId yönelik özgün isteğin parçası olmayan bir recordIdiçeren yanıttaki tüm kayıtların atılması için bağıntı için kullanılır.

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

Hata durumları

Web API'nizin kullanılamaması veya başarılı olmayan durum kodları göndermesine ek olarak, aşağıdaki durumları hata olarak göz önünde bulundurun:

  • Web API'sinin bir başarı durum kodu döndürmesine rağmen yanıt olmadığını application/jsongösteriyorsa, yanıt geçersizdir ve zenginleştirme yapılmaz.

  • Yanıt values dizisi geçersiz kayıtlar içeriyorsa (örneğin, eksik veya çoğaltılmış recordId), geçersiz kayıtlar zenginleştirilir. Özel beceriler geliştirirken Web API beceri sözleşmesine bağlı kalın. Beklenen sözleşmeyi izleyen Power Skill deposunda sağlanan bu örneğe başvurabilirsiniz.

Web API'sinin kullanılamadığı veya HTTP hatası döndürdüğü durumlarda, dizin oluşturucu yürütme geçmişi HTTP hatasıyla ilgili kullanılabilir ayrıntıları içeren kolay bir hata içerir.

Yönetilen kimlik kimlik doğrulaması için güvenlikle ilgili dikkat edilmesi gerekenler

Özel Web API'siyle yönetilen kimlik doğrulamasını kullanırken Azure Yapay Zeka Arama tarafından authResourceId tanımlanan uygulama için bir Microsoft Entra erişim belirteci alır ve bu belirteci tarafından uribelirtilen uç noktaya gönderilen isteklere ekler. Tarafından uri başvuruda bulunan uç nokta genellikle Azure İşleviniz, Azure App Service, Azure API Management uç noktanız veya Microsoft Entra korumalı başka bir uygulamadır. Uç nokta ile tarafından authResourceIdtanımlanan uygulama arasındaki ilişkiyi yapılandırmak ve sürdürmek sizin sorumluluğundadır.

Kimlik doğrulama yöntemi ne olursa olsun, özel beceri girişleri müşteri tarafından sağlanan belgelerden veya bu belgelerden türetilen değerlerden değerler içerebilir. Tüm özel beceri girişlerine güvenilmeyen olarak davranın. Azure Yapay Zeka Arama, özel uygulamanız için içeriklerini yorumlamadan, doğrulamadan veya kısıtlamadan beceri kümesinde yapılandırılan girişleri uç noktanıza iletir.

Giden isteklerde veya diğer güvenlik duyarlı işlemlerde kullanmadan önce özel becerinizdeki belge türetilmiş değerleri doğrulayın ve kısıtlayın. Yalnızca becerinin gerektirdiği hedeflere ve bağlantı noktalarına izin veren giriş doğrulamasını, hedef izin listelerini, URL ve konak adı doğrulamasını, protokol kısıtlamalarını ve en az ayrıcalıklı ağ erişimini kullanın. Daha fazla bilgi için bkz . Ağ ve bağlantı için mimari stratejileri.

Güvenli bir dağıtımın korunmasına yardımcı olmak için şu uygulamaları izleyin:

  • uri özelliğini yalnızca Azure Yapay Zeka Arama istekleri alması amaçlanan güvenilen uç noktalara işaret eden şekilde yapılandırın.
  • Erişim belirtecini alması ve doğrulaması beklenen Microsoft Entra uygulamasını tanımlamak için yapılandırınauthResourceId.
  • İstekleri işlemeden önce uygulama alma isteklerinin hedef kitle (), veren (aud), kiracı (isstid) ve gerekli uygulama rolleri veya izinleri dahil olmak üzere standart belirteç taleplerini doğruladığından emin olun.
  • Azure Yapay Zeka Arama yönetilen kimliğe izinler verirken en az ayrıcalık ilkesini uygulayın.
  • Özel Web API'si beceri tanımlarını, Microsoft Entra uygulama kayıtlarını ve Azure Yapay Zeka Arama yönetilen kimliklere verilen uygulama rolü atamalarını ve izinlerini düzenli aralıklarla gözden geçirin. Yerleşik değişiklik yönetimi ve güvenlik gözden geçirme süreçlerinizle yapılandırma değişikliklerini gözden geçirin.
  • Azure İşlevleri, App Services, API'ler ve API ağ geçitleri için uç nokta yapılandırmalarını düzenli aralıklarla gözden geçirin.
  • Beklenmeyen veya yetkisiz etkinlikler için uygulama oturum açma günlüklerini, kimlik doğrulama olaylarını ve API erişim günlüklerini izleyin.
  • Artık gerekli olmayan kullanılmayan uç noktaları, izinleri, uygulama kayıtlarını ve rol atamalarını kaldırın.

Beceri kümesi yapılandırmasına erişimi kısıtlama

Beceri kümelerini oluşturabilen, değiştirebilen veya çalıştırabilen kullanıcılar hem hedef uç noktayı hem de Özel Web API'sinin kullandığı kimlik doğrulama yapılandırmasını denetleyebilir. Bu izinleri güvenilen yöneticilerle kısıtlayın ve yönetilen kimlik özellikli özel becerileri yapılandırırken standart değişiklik yönetimi ve güvenlik gözden geçirme işlemlerinizi izleyin.

Important

değeri, authResourceId erişim belirteci için hedeflenen alıcı uygulamasını tanımlar. içinde uri belirtilen uç noktanın, bu uygulama için belirteçleri alması ve doğrulaması beklenen uç nokta olduğundan emin olun. Yanlış yapılandırma, kimlik doğrulaması hatalarına veya isteklerin istenmeyen bir uç noktaya gönderilmesine neden olabilir.

Ayrıca bakınız