Aracılığıyla paylaş


Azure Container Apps'te sunucusuz kod yorumlayıcı oturumları

Azure Container Apps dinamik oturumları , bir kod yorumlayıcıya hızlı ve ölçeklenebilir erişim sağlar. Her kod yorumlayıcı oturumu bir Hyper-V sınırı tarafından tamamen yalıtılır ve güvenilmeyen kodu çalıştıracak şekilde tasarlanmıştır.

Kod yorumlayıcı oturumları için kullanılır

Kod yorumlayıcı oturumları, kötü amaçlı olabilecek veya konak sistemine veya diğer kullanıcılara zarar verebilecek kodu çalıştırmanız gereken senaryolar için idealdir, örneğin:

  • Büyük bir dil modeli (LLM) tarafından oluşturulan kod.
  • Web veya SaaS uygulamasında son kullanıcı tarafından gönderilen kod.

LangChain, LlamaIndex veya Semantik Çekirdek gibi popüler LLM çerçeveleri için, yapay zeka uygulamalarını kod yorumlayıcı oturumlarıyla tümleştirmek için araçları ve eklentileri kullanabilirsiniz.

Uygulamalarınız rest API kullanarak kod yorumlayıcı oturumuyla da tümleştirebilir. API şunları yapmanızı sağlar:

  • Oturumda kod yürütme ve sonuçları alma

  • Oturum başlatma ve bitirme sırasında dosyaları yükleyip indirin.

    Yürütülebilir kod dosyalarını veya kodunuzun işleyebileceği veri dosyalarını karşıya yükleyebilir ve indirebilirsiniz.

Yerleşik kod yorumlayıcı oturumları, altyapıyı veya kapsayıcıları yönetmeye gerek kalmadan en yaygın kod yürütme senaryolarını destekler.

Kod yürütme ortamı üzerinde tam denetime ihtiyacınız varsa veya yalıtılmış korumalı alan gerektiren farklı bir senaryonuz varsa, özel kod yorumlayıcı oturumları kullanabilirsiniz.

Kod yorumlayıcı oturum havuzu

Kod yorumlayıcı oturumlarını kullanmak için, kod yorumlayıcı oturumlarının yapılandırmasını tanımlayan oturum havuzu adlı bir Azure kaynağına ihtiyacınız vardır.

Oturum havuzunda, en fazla eşzamanlı oturum sayısı ve oturumun sonlandırılmadan önce ne kadar süreyle boşta olabileceği gibi ayarları belirtebilirsiniz.

Azure portalı, Azure CLI veya Azure Resource Manager şablonlarını kullanarak oturum havuzu oluşturabilirsiniz. Oturum havuzu oluşturduktan sonra, havuzun yönetim API'sinin uç noktalarını kullanarak bir oturumun içindeki kodu yönetebilir ve yürütebilirsiniz.

Oturum havuzu oluşturma ve yapılandırma hakkında daha fazla bilgi için bkz. Oturum havuzlarını kullanma.

Oturumda kod yürütme

Bir oturum havuzu oluşturduktan sonra uygulamanız, LLM çerçevesiyle tümleştirme kullanarak veya havuzun yönetim API'sinin uç noktalarını doğrudan kullanarak havuzdaki oturumlarla etkileşim kurabilir.

Oturum tanımlayıcıları

Önemli

Oturum tanımlayıcısı, değerini yönetmek için güvenli bir işlem kullanmanızı gerektiren hassas bilgilerdir. Bu işlemin bir bölümü, uygulamanızın her kullanıcının veya kiracının yalnızca kendi oturumlarına erişmesini sağlamasını gerektirir.

Oturumlara erişimin güvenliğinin sağlanamaması, kullanıcılarınızın oturumlarında depolanan verilere yanlış veya yetkisiz erişime neden olabilir. Daha fazla bilgi için bkz . Oturum tanımlayıcıları.

Bir havuzdaki oturumlarla etkileşim kurarken, her oturuma başvurmak için bir oturum tanımlayıcısı kullanırsınız. Oturum tanımlayıcısı, oturum havuzu içinde benzersiz olan, tanımladığınız bir dizedir. Web uygulaması oluşturuyorsanız kullanıcının kimliğini kullanabilirsiniz. Sohbet botu oluşturuyorsanız konuşma kimliğini kullanabilirsiniz.

Tanımlayıcı ile çalışan bir oturum varsa, oturum yeniden kullanılır. Tanımlayıcıyla çalışan bir oturum yoksa, otomatik olarak yeni bir oturum oluşturulur.

Kimlik Doğrulaması

Kimlik doğrulaması Microsoft Entra belirteçleri kullanılarak işlenir. Geçerli Microsoft Entra belirteçleri, oturum havuzundaki Azure ContainerApps Oturum Yürütücüsü ve Katkıda Bulunan rollerine ait bir kimlik tarafından oluşturulur.

LLM çerçevesi tümleştirmesi kullanıyorsanız, çerçeve sizin için belirteç oluşturma ve yönetimi işler. Uygulamanın, oturum havuzunda gerekli rol atamalarıyla yönetilen bir kimlikle yapılandırıldığından emin olun.

Havuzun yönetim API'sinin uç noktalarını doğrudan kullanıyorsanız, bir belirteç oluşturmanız ve bunu Authorization HTTP isteklerinizin üst bilgisine eklemeniz gerekir. Daha önce bahsedilen rol atamalarına ek olarak belirtecin değerine audsahip bir hedef kitle (https://dynamicsessions.io) talebi içermesi gerekir.

Daha fazla bilgi edinmek için bkz. kimlik doğrulaması ve yetkilendirme .

Dosyalarla çalışma

Dosyaları karşıya yükleyip indirebilir ve kod yorumlayıcı oturumundaki tüm dosyaları listeleyebilirsiniz.

Dosya yükle

Bir dosyayı bir oturuma yüklemek için POST çok parçalı form veri isteğinde uç noktaya bir istek gönderinuploadFile. Dosya verilerini istek gövdesine ekleyin. Dosya bir dosya adı içermelidir.

Karşıya yüklenen dosyalar, oturumun dosya sisteminde dizinin altında /mnt/data depolanır.

Aşağıdaki örnekte bir dosyanın oturuma nasıl yüklendiği gösterilmektedir.

İsteği göndermeden önce köşeli ayraçlar arasındaki <> yer tutucuları isteğinize özgü değerlerle değiştirin.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/upload?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Authorization: Bearer <token>

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="<FILE_NAME_AND_EXTENSION>"
Content-Type: application/octet-stream

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--

Dosya indirme

Oturumun /mnt/data dizininden dosya indirmek için GET uç noktaya bir file/content/{filename} istek gönderin. Yanıt, dosya verilerini içerir.

Aşağıdaki örnek, bir dosyayı indirme isteğinin nasıl biçimlendirileceğini GET ile gösterir.

İsteği göndermeden önce köşeli ayraçlar arasındaki <> yer tutucuları isteğinize özgü değerlerle değiştirin.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/content/<FILE_NAME_AND_EXTENSION>?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Dosyaları listeleme

Oturumun /mnt/data dizinindeki dosyaları listelemek için GET uç noktaya bir files istek gönderin.

Aşağıdaki örnekte, bir oturumun dizinindeki dosyaların nasıl listeldiğiniz gösterilmektedir.

İsteği göndermeden önce köşeli ayraçlar arasındaki <> yer tutucuları isteğinize özgü değerlerle değiştirin.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Yanıt, oturumdaki dosyaların listesini içerir.

Aşağıdaki listede, oturum içeriği istemekten bekleyebileceğiniz yanıt türünün bir örneği gösterilmektedir.

{
    "$id": "1",
    "value": [
        {
            "$id": "2",
            "properties": {
                "$id": "3",
                "filename": "test1.txt",
                "size": 16,
                "lastModifiedTime": "2024-05-02T07:21:07.9922617Z"
            }
        },
        {
            "$id": "4",
            "properties": {
                "$id": "5",
                "filename": "test2.txt",
                "size": 17,
                "lastModifiedTime": "2024-05-02T07:21:08.8802793Z"
            }
        }
    ]
}

Güvenlik

Kod yorumlayıcı oturumları, yalıtılmış ortamlarda güvenilmeyen kodu çalıştıracak şekilde tasarlanmıştır ve uygulamalarınızın ve verilerinizin korunmasını sağlar.

LLM çerçevesi tümleştirmeleri

Aşağıdaki LLM çerçeveleri, oturum havuzu yönetim API'sini doğrudan kullanmak yerine kod yorumlayıcı oturumlarıyla tümleştirmeler sağlar:

Çerçeve Paket Öğretici
LangChain Piton: langchain-azure-dynamic-sessions Öğretici
LlamaIndex Piton: llama-index-tools-azure-code-interpreter Öğretici
Semantik Çekirdek Python: semantic-kernel (sürüm 0.9.8-b1 veya üzeri) Öğretici

Yönetim API'leri uç noktaları

LLM çerçevesi tümleştirmesi kullanmıyorsanız yönetim API'sinin uç noktalarını kullanarak oturum havuzuyla doğrudan etkileşim kurabilirsiniz.

Oturumda kod yürütme

Bir oturumda kod yürütmek için POST uç noktaya istek gövdesinde çalıştırılacak kodu içeren bir code/execute istek gönderin.

Aşağıdaki örnek, Python'da Hello, world! ifadesini yazdırır.

İsteği göndermeden önce köşeli ayraçlar arasındaki <> yer tutucuları oturum havuzunuz ve oturum tanımlayıcınız için uygun değerlerle değiştirin.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: application/json
Authorization: Bearer <token>

{
    "properties": {
        "codeInputType": "inline",
        "executionType": "synchronous",
        "code": "print('Hello, world!')"
    }
}

Oturumu yeniden kullanmak için sonraki isteklerde aynı oturum tanımlayıcısını belirtin.

Oturuma dosya yükleme

Bir dosyayı bir oturuma yüklemek için POST çok parçalı form veri isteğinde uç noktaya bir istek gönderinuploadFile. Dosya verilerini istek gövdesine ekleyin. Dosya bir dosya adı içermelidir.

Karşıya yüklenen dosyalar, oturumun dosya sisteminde dizinin altında /mnt/data depolanır.

İsteği göndermeden önce köşeli ayraçlar arasındaki <> yer tutucuları isteğinize özgü değerlerle değiştirin.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/upload?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Authorization: Bearer <token>

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="<FILE_NAME_AND_EXTENSION>"
Content-Type: application/octet-stream

(data)
------WebKitFormBoundary7MA4YWxkTrZu0gW--

Not

Dosya karşıya yükleme sınırı: 128MB. Bu aşılırsa bir HTTP 413 döndürülebilir.

Oturumdan dosya indirme

Oturumun /mnt/data dizininden dosya indirmek için GET uç noktaya bir file/content/{filename} istek gönderin. Yanıt, dosya verilerini içerir.

İsteği göndermeden önce köşeli ayraçlar arasındaki <> yer tutucuları isteğinize özgü değerlerle değiştirin.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files/content/<FILE_NAME_AND_EXTENSION>?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Oturumdaki dosyaları listeleme

Oturumun /mnt/data dizinindeki dosyaları listelemek için GET uç noktaya bir files istek gönderin.

İsteği göndermeden önce köşeli ayraçlar arasındaki <> yer tutucuları isteğinize özgü değerlerle değiştirin.

GET https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/files?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Authorization: Bearer <TOKEN>

Yanıt, oturumdaki dosyaların listesini içerir.

Aşağıdaki listede, oturum içeriği istemekten bekleyebileceğiniz yanıt türünün bir örneği gösterilmektedir.

{
    "$id": "1",
    "value": [
        {
            "$id": "2",
            "properties": {
                "$id": "3",
                "filename": "test1.txt",
                "size": 16,
                "lastModifiedTime": "2024-05-02T07:21:07.9922617Z"
            }
        },
        {
            "$id": "4",
            "properties": {
                "$id": "5",
                "filename": "test2.txt",
                "size": 17,
                "lastModifiedTime": "2024-05-02T07:21:08.8802793Z"
            }
        }
    ]
}

Önceden yüklenmiş paketler

Python kod yorumlayıcı oturumları NumPy, pandas ve scikit-learn gibi popüler Python paketlerini içerir.

Önceden yüklenmiş paketlerin listesinin çıktısını almak için uç noktayı aşağıdaki kodla çağırın code/execute .

İsteği göndermeden önce köşeli ayraçlar arasındaki <> yer tutucuları isteğinize özgü değerlerle değiştirin.

POST https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/identifier/<SESSION_ID>/code/execute?api-version=2024-02-02-preview&identifier=<SESSION_ID>
Content-Type: application/json
Authorization: Bearer <TOKEN>

{
    "properties": {
        "codeInputType": "inline",
        "executionType": "synchronous",
        "code": "import pkg_resources\n[(d.project_name, d.version) for d in pkg_resources.working_set]"
    }
}

Günlük Kaydı

Kod yorumlayıcı oturumları doğrudan günlüğe kaydetmeyi desteklemez. Oturumlarla etkileşim kuran uygulamanız, istekleri oturum havuzu yönetim API'sine ve yanıtlarına kaydedebilir.

Faturalandırma

Kod yorumlayıcı oturumları, her oturumun süresine göre faturalandırılır. Daha fazla bilgi için bkz . Faturalama.

Sonraki adımlar