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, bir oturumda kod yürütmenize ve sonuçları almanıza olanak tanır. Ayrıca oturuma dosya yükleyip indirebilirsiniz. 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.
Azure CLI ile oturum havuzu oluşturma
Azure CLI kullanarak bir kod yorumlayıcısı oturum havuzu oluşturmak için aşağıdaki komutlarla Azure CLI'nın en son sürümlerine ve Azure Container Apps uzantısına sahip olduğunuzdan emin olun:
# Upgrade the Azure CLI
az upgrade
# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y
az containerapps sessionpool create
Havuzu oluşturmak için komutunu kullanın. Aşağıdaki örnek adlı my-session-pool
bir Python kod yorumlayıcısı oturum havuzu oluşturur. komutunu çalıştırmadan önce öğesini kaynak grubu adınızla değiştirdiğinizden <RESOURCE_GROUP>
emin olun.
az containerapp sessionpool create \
--name my-session-pool \
--resource-group <RESOURCE_GROUP> \
--location westus2 \
--container-type PythonLTS \
--max-sessions 100 \
--cooldown-period 300 \
--network-status EgressDisabled
Oturum havuzu oluştururken aşağıdaki ayarları tanımlayabilirsiniz:
Ayar | Açıklama |
---|---|
--container-type |
Kullanılacak kod yorumlayıcı türü. Desteklenen tek değerdir PythonLTS . |
--max-sessions |
Eşzamanlı olarak izin verilen en fazla ayrılmış oturum sayısı. Maksimum değer 600 olarak belirlenmiştir. |
--cooldown-period |
Sonlandırmadan önce izin verilen boşta kalan saniye sayısı. Oturumun API'si her çağrıldığında boşta kalma süresi sıfırlanır. İzin verilen aralık ile 3600 arasındadır300 . |
--network-status |
Oturumdan giden ağ trafiğine izin verilip verilmeyeceğini belirler. Geçerli değerler (varsayılan) ve EgressEnabled değerleridir EgressDisabled . |
Önemli
Çıkışı etkinleştirirseniz oturumda çalıştırılan kod İnternet'e erişebilir. Hizmet reddi saldırıları gibi kötü amaçlı etkinlikleri gerçekleştirmek için kullanılabildiğinden koda güvenilmediğinde dikkatli olun.
Azure CLI ile havuz yönetimi API'sinin uç noktasını alma
LLM çerçevesi tümleştirmeleriyle veya doğrudan yönetim API'sinin uç noktalarını çağırarak kod yorumlayıcı oturumlarını kullanmak için havuzun yönetim API'sinin uç noktası gerekir. Uç nokta biçimindedir https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>
.
Bir oturum havuzu için yönetim API'sinin uç noktasını almak için komutunu kullanın az containerapps sessionpool show
. komutunu çalıştırmadan önce öğesini kaynak grubu adınızla değiştirdiğinizden <RESOURCE_GROUP>
emin olun.
az containerapp sessionpool show \
--name my-session-pool \
--resource-group <RESOURCE_GROUP> \
--query 'properties.poolManagementEndpoint' -o tsv
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.
Oturum tanımlayıcıları hakkında daha fazla bilgi edinmek için bkz . Oturumlara genel bakış.
Kimlik Doğrulaması
Kimlik doğrulaması, Microsoft Entra (eski adıyla Azure Active Directory) 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 https://dynamicsessions.io
sahip bir hedef kitle (aud
) talebi içermesi gerekir.
Daha fazla bilgi için bkz . Kimlik doğrulaması.
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 | Python: langchain-azure-dynamic-sessions |
Öğretici |
LlamaIndex | Python: 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.
Havuzdaki oturumları yönetmek için aşağıdaki uç noktalar kullanılabilir:
Uç nokta yolu | Metot | Açıklama |
---|---|---|
code/execute |
POST |
Bir oturumda kod yürütür. |
files/upload |
POST |
Oturuma dosya yükleme. |
files/content/{filename} |
GET |
Oturumdan dosya indirin. |
files |
GET |
Oturumdaki dosyaları listeleme. |
Havuzun yönetim API'si uç noktasını uç nokta yolu ile birleştirerek her uç nokta için tam URL oluşturun. Sorgu dizesi oturum tanımlayıcısını içeren bir identifier
parametre ve değerine 2024-02-02-preview
sahip bir api-version
parametre içermelidir.
Örneğin: https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>
Oturumda kod yürütme
Bir oturumda kod yürütmek için code/execute
uç noktaya istek gövdesinde çalıştırılacak kodu içeren bir POST
istek gönderin. Bu örnekte Python'da "Hello, world!" yazdırılı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 uploadFile
çok parçalı form veri isteğinde uç noktaya bir istek gönderinPOST
. 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--
Oturumdan dosya indirme
Oturumun /mnt/data
dizininden dosya indirmek için file/content/{filename}
uç noktaya bir GET
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 files
uç noktaya bir GET
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 .