Aracılığıyla paylaş


Öğretici: Azure Container Apps ile LangChain'de kod yorumlayıcı oturumlarını kullanma

LangChain , büyük dil modelleri (LLM) kullanarak uygulama oluşturmayı basitleştirmek için tasarlanmış bir çerçevedir. LangChain ile yapay zeka aracısı oluşturduğunuzda LLM, kullanıcı girişini yorumlar ve bir yanıt oluşturur. Yapay zeka aracısı genellikle bir yanıt üretmek için matematiksel ve sembolik mantık gerçekleştirmesi gerektiğinde zorlar. Azure Container Apps dinamik oturumlarını LangChain ile tümleştirerek aracıya özel görevleri gerçekleştirmek için kullanması için bir kod yorumlayıcısı verirsiniz.

Bu öğreticide, web API'sinde LangChain AI aracısını çalıştırmayı öğreneceksiniz. API, kullanıcı girişini kabul eder ve yapay zeka aracısı tarafından oluşturulan bir yanıt döndürür. Aracı, hesaplamalar yapmak için dinamik oturumlarda bir kod yorumlayıcı kullanır.

Not

Azure Container Apps dinamik oturumları şu anda önizleme aşamasındadır. Daha fazla bilgi için bkz . önizleme sınırlamaları .

Önkoşullar

Azure kaynakları oluşturma

Bu hızlı başlangıçtaki örnek uygulama, Azure OpenAI'den bir LLM kullanır. LlM tarafından oluşturulan kodu çalıştırmak için Azure Container Apps oturumlarını da kullanır.

  1. Azure CLI'yi en son sürüme güncelleştirin.

     az upgrade
    
  2. Zaten yüklüyse Azure Container Apps uzantısını kaldırın ve oturumlar için komutları içeren Azure Container Apps uzantısını bir önizleme sürümü yükleyin:

    az extension remove --name containerapp
    az extension add \
        --name containerapp \
        --allow-preview true -y
    
  3. Azure'da Oturum Açın:

    az login
    
  4. Bu hızlı başlangıçta kullanılan değişkenleri ayarlayın:

    RESOURCE_GROUP_NAME=aca-sessions-tutorial
    AZURE_OPENAI_LOCATION=swedencentral
    AZURE_OPENAI_NAME=<UNIQUE_OPEN_AI_NAME>
    SESSION_POOL_LOCATION=eastasia
    SESSION_POOL_NAME=code-interpreter-pool
    

    değerini benzersiz bir adla değiştirerek <UNIQUE_OPEN_AI_NAME> Azure OpenAI hesabınızı oluşturun.

  5. Kaynak grubu oluşturma:

    az group create --name $RESOURCE_GROUP_NAME --location $SESSION_POOL_LOCATION
    
  6. Azure OpenAI hesabı oluşturma:

    az cognitiveservices account create \
        --name $AZURE_OPENAI_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $AZURE_OPENAI_LOCATION \
        --kind OpenAI \
        --sku s0 \
        --custom-domain $AZURE_OPENAI_NAME
    
  7. Azure OpenAI hesabında adlı gpt-35-turbo bir GPT 3.5 Turbo model dağıtımı oluşturun:

    az cognitiveservices account deployment create \
        --resource-group $RESOURCE_GROUP_NAME \
        --name $AZURE_OPENAI_NAME \
        --deployment-name gpt-35-turbo \
        --model-name gpt-35-turbo \
        --model-version "1106" \
        --model-format OpenAI \
        --sku-capacity "100" \
        --sku-name "Standard"
    
  8. Kod yorumlayıcı oturum havuzu oluşturma:

    az containerapp sessionpool create \
        --name $SESSION_POOL_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $SESSION_POOL_LOCATION \
        --max-sessions 100 \
        --container-type PythonLTS \
        --cooldown-period 300
    

Örnek uygulamayı yerel olarak çalıştırma

Uygulamayı Azure Container Apps'e dağıtmadan önce yerel olarak çalıştırarak test edebilirsiniz.

Uygulamayı kopyalama

  1. Azure Container Apps oturum örnekleri deposunu kopyalayın.

    git clone https://github.com/Azure-Samples/container-apps-dynamic-sessions-samples.git
    
  2. Örnek uygulamayı içeren dizine geçin:

    cd container-apps-dynamic-sessions-samples/langchain-python-webapi
    

Uygulamayı yapılandırma

  1. Bir Python sanal ortamı oluşturun ve etkinleştirin:

    python3.11 -m venv .venv
    source .venv/bin/activate
    

    Farklı bir sürüm kullanıyorsanız komuttaki Python sürümünü değiştirin. Python 3.10 veya üzerini kullanmanız önerilir.

    Not

    Windows kullanıyorsanız değerini ile .venv\Scripts\activatedeğiştirin.venv/bin/activate.

  2. Gerekli Python paketlerini yükleyin:

    python -m pip install -r requirements.txt
    
  3. Uygulamayı çalıştırmak için ortam değişkenlerini yapılandırmanız gerekir.

    1. Azure OpenAI hesap uç noktasını alın:

      az cognitiveservices account show \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.endpoint \
          --output tsv
      
    2. Azure Container Apps oturum havuzu yönetim uç noktasını alın:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query properties.poolManagementEndpoint \
          --output tsv
      
    3. Örnek uygulama dizininin kökünde bir .env dosya oluşturun (ile main.pyaynı konum). Dosyaya aşağıdaki içeriği ekleyin:

      AZURE_OPENAI_ENDPOINT=<AZURE_OPENAI_ENDPOINT>
      POOL_MANAGEMENT_ENDPOINT=<SESSION_POOL_MANAGEMENT_ENDPOINT>
      

      değerini Azure OpenAI hesap uç noktasıyla ve <SESSION_POOL_MANAGEMENT_ENDPOINT> oturum havuzu yönetim uç noktasıyla değiştirin<AZURE_OPENAI_ENDPOINT>.

  4. Uygulama, Azure hizmetleriyle kimlik doğrulaması yapmak için kullanır DefaultAzureCredential . Yerel makinenizde geçerli Azure CLI oturum açma kimlik bilgilerinizi kullanır. Uygulamanın model uç noktalarına erişmesi için Kendinize Azure OpenAI hesabında Bilişsel Hizmetler OpenAI Kullanıcı rolünü ve uygulamanın oturum havuzuna erişmesi için oturum havuzunda Azure ContainerApps Oturum Yürütücüsü rolünü vermelisiniz.

    1. Azure CLI kullanıcı adınızı alın:

      az account show --query user.name --output tsv
      
    2. Azure OpenAI hesabı kaynak kimliğini almak için aşağıdaki komutları çalıştırın:

      az cognitiveservices account show --name $AZURE_OPENAI_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
      
    3. Bilişsel Hizmetler OpenAI Kullanıcı rolünü Azure OpenAI hesabındaki Azure CLI kullanıcınıza atayın:

      az role assignment create --role "Cognitive Services OpenAI User" --assignee <CLI_USERNAME> --scope <AZURE_OPENAI_RESOURCE_ID>
      

      değerini Azure CLI kullanıcı adınızla ve <AZURE_OPENAI_RESOURCE_ID> Azure OpenAI hesabı kaynak kimliğiyle değiştirin<CLI_USERNAME>.

    4. Oturum havuzu kaynak kimliğini almak için aşağıdaki komutları çalıştırın:

      az containerapp sessionpool show --name $SESSION_POOL_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
      
    5. Kimliğini kullanarak Azure ContainerApps Oturum Yürütücüsü rolünü oturum havuzundaki Azure CLI kullanıcınıza atayın:

      az role assignment create \
          --role "Azure ContainerApps Session Executor" \
          --assignee <CLI_USERNAME> \
          --scope <SESSION_POOL_RESOURCE_ID>
      

      değerini Azure CLI kullanıcı adınızla ve <SESSION_POOL_RESOURCE_ID> oturum havuzu kaynak kimliğiyle değiştirin<CLI_USERNAME>.

Uygulamayı çalıştırma

Örnek uygulamayı çalıştırmadan önce düzenleyicide main.py açın ve kodu gözden geçirin. Uygulama, sorgu dizesinde kullanıcı iletisini kabul eden bir web API'si oluşturmak için FastAPI kullanır.

Aşağıdaki kod satırları bir SessionPythonREPLTool örneği oluşturur ve bunu LangChain aracısına sağlar:

repl = SessionsPythonREPLTool(pool_management_endpoint=pool_management_endpoint)

tools = [repl]
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = agents.create_tool_calling_agent(llm, tools, prompt)

Hesaplamalar yapması gerektiğinde aracı, kodu çalıştırmak için SessionPythonREPLTool'u kullanır. Kod, oturum havuzundaki bir oturumda yürütülür. Varsayılan olarak, aracın örneğini oluşturduğunuz sırada rastgele bir oturum tanımlayıcısı oluşturulur. Aracı, aracıyı birden çok Python kod parçacığı çalıştırmak için kullanıyorsa aynı oturumu kullanır. Her son kullanıcının benzersiz bir oturumu olduğundan emin olmak için her kullanıcı için ayrı bir aracı ve araç kullanın.

SessionPythonREPLTool paketinde langchain-azure-dynamic-sessions kullanılabilir.

  1. Örnek uygulamayı çalıştırın:

    fastapi dev main.py
    
  2. Bir tarayıcıyı açın ve http://localhost:8000/docs dizinine gidin. Örnek uygulama için Swagger kullanıcı arabirimini görürsünüz.

  3. /chat Uç noktayı genişletin ve Deneyin'i seçin.

  4. Alanına girin What time is it right now? message ve Yürüt'e tıklayın.

    Aracı geçerli saatle yanıt verir. Terminalde aracı tarafından oluşturulan Python kodunu gösteren günlükleri görürsünüz. Bu günlükler geçerli saati alır ve bir kod yorumlayıcı oturumunda çalıştırmış olur.

  5. Uygulamayı durdurmak için terminale girin Ctrl+C .

İsteğe bağlı: Örnek uygulamayı Azure Container Apps'e dağıtma

FastAPI uygulamasını Azure Container Apps'e dağıtmak için bir kapsayıcı görüntüsü oluşturmanız ve bunu bir kapsayıcı kayıt defterine göndermeniz gerekir. Ardından görüntüyü Azure Container Apps'e dağıtabilirsiniz. komutu bu az containerapp up adımları tek bir komutta birleştirir.

Ardından uygulama için yönetilen kimliği yapılandırmanız ve Azure OpenAI'ye ve oturum havuzuna erişmek için uygun rolleri atamanız gerekir.

  1. Container Apps ortamı ve uygulama adı için değişkenleri ayarlayın:

    ENVIRONMENT_NAME=aca-sessions-tutorial-env
    CONTAINER_APP_NAME=chat-api
    
  2. Uygulamayı derleme ve Azure Container Apps'e dağıtma:

    az containerapp up \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --location $SESSION_POOL_LOCATION \
        --environment $ENVIRONMENT_NAME \
        --env-vars "AZURE_OPENAI_ENDPOINT=<OPEN_AI_ENDPOINT>" "POOL_MANAGEMENT_ENDPOINT=<SESSION_POOL_MANAGMENT_ENDPOINT>" \
        --source .
    

    değerini Azure OpenAI hesap uç noktasıyla ve <SESSION_POOL_MANAGMENT_ENDPOINT> oturum havuzu yönetim uç noktasıyla değiştirin<OPEN_AI_ENDPOINT>.

  3. Uygulama için sistem tarafından atanan yönetilen kimliği etkinleştirin:

    az containerapp identity assign \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --system-assigned
    
  4. Uygulamanın Azure OpenAI'ye ve oturum havuzuna erişmesi için yönetilen kimliğe uygun rolleri atamanız gerekir.

    1. Yönetilen kimliğin asıl kimliğini alın:

      az containerapp show \
          --name $CONTAINER_APP_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query identity.principalId \
          --output tsv
      
    2. Oturum havuzu kaynak kimliğini alın:

      az containerapp sessionpool show \
          --name $SESSION_POOL_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query id \
          --output tsv
      
    3. Yönetilen kimliği oturum havuzundaki Azure ContainerApps Session Executor ve Contributor rollerini atayın:

      Aşağıdaki komutu çalıştırmadan önce ve <SESSION_POOL_RESOURCE_ID> değerini önceki adımlarda aldığınız değerlerle değiştirin<PRINCIPAL_ID>.

      az role assignment create \
          --role "Azure ContainerApps Session Executor" \
          --assignee <PRINCIPAL_ID> \
          --scope <SESSION_POOL_RESOURCE_ID>
      
      az role assignment create \
          --role "Contributor" \
          --assignee <PRINCIPAL_ID> \
          --scope <SESSION_POOL_RESOURCE_ID>
      
    4. Azure OpenAI hesabı kaynak kimliğini alın:

      az cognitiveservices account show \
          --name $AZURE_OPENAI_NAME \
          --resource-group $RESOURCE_GROUP_NAME \
          --query id \
          --output tsv
      
    5. Yönetilen kimliğe Cognitive Services OpenAI User Azure OpenAI hesabındaki rolü atayın:

      Aşağıdaki komutu çalıştırmadan önce ve <AZURE_OPENAI_RESOURCE_ID> değerini önceki adımlarda aldığınız değerlerle değiştirin<PRINCIPAL_ID>.

      az role assignment create \
          --role "Cognitive Services OpenAI User" \
          --assignee <PRINCIPAL_ID> \
          --scope <AZURE_OPENAI_RESOURCE_ID>
      
  5. Uygulamanın tam etki alanı adını (FQDN) alın:

    az containerapp show \
        --name $CONTAINER_APP_NAME \
        --resource-group $RESOURCE_GROUP_NAME \
        --query properties.configuration.ingress.fqdn \
        --output tsv
    
  6. Dağıtılan uygulamayı test etmek için https://<FQDN>/docs tarayıcıyı açın.

Kaynakları temizleme

Kaynaklarla işiniz bittiğinde ücret yansıtılmasını önlemek için bunları silebilirsiniz:

az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait

Sonraki adımlar