Skip to content

Latest commit

 

History

History
177 lines (123 loc) · 9.43 KB

README.md

File metadata and controls

177 lines (123 loc) · 9.43 KB

Zadanie 2: Tworzenie prostego chatbota z wykorzystaniem Azure OpenAI i LangChain

Opis

Celem tego zadania jest stworzenie prostego chatbota, który będzie podpięty do instancji Azure OpenAI przy użyciu biblioteki LangChain. Aplikacja ma być wdrożona na usługę Azure App Service. W szczególności będziesz musiał zaimplementować endpoint /chat, który będzie obsługiwał komunikację z modelem językowym.

W katalogu src znajduje się wstępny kod, który zawiera aplikację Flask oraz kod front-endu napisany z wykorzystaniem Tailwind CSS i czystego JavaScriptu. Możesz rozszerzyć tę przykładową aplikację, aby spełnić wymagania zadania.

Należy również użyć Managed Identity, aby uzyskać podejście passwordless/secretless. Managed Identity umożliwia aplikacji automatyczne uwierzytelnianie w innych usługach Azure bez konieczności przechowywania haseł czy tajnych kluczy w kodzie, co zwiększa bezpieczeństwo i ułatwia zarządzanie dostępem.

Dodatkowo, musisz przetestować działanie content filters. Content filters służą do monitorowania i filtrowania nieodpowiednich treści generowanych przez model językowy, zapewniając, że odpowiedzi są zgodne z polityką firmy lub regulacjami prawnymi.

Cele zadania

  1. Implementacja chatbota:

    • Stworzenie aplikacji Flask z endpointem /chat, który będzie odbierał zapytania w formacie JSON i przesyłał je do Azure OpenAI za pomocą LangChain.
    • Konfiguracja aplikacji do komunikacji z Azure OpenAI, aby chatbot mógł generować odpowiedzi na podstawie zapytań użytkowników.
    • Przykładowy input:
      {
        "message": "pytanie do llm"
      }
    • Przykładowy output:
      {
        "content": "odpowiedz z llm",
        "response_metadata": "tu maja być metadane odpowiedz z llm"
      }
    • Front-end aplikacji, znajdujący się w katalogu src, obsługuje wysyłanie zapytań do endpointu /chat oraz wyświetlanie odpowiedzi użytkownikowi.
  2. Użycie Managed Identity:

    • Konfiguracja Managed Identity dla Azure App Service w celu uzyskania podejścia passwordless/secretless. Managed Identity umożliwia aplikacji bezpieczne uwierzytelnianie w innych usługach Azure bez konieczności przechowywania haseł czy tajnych kluczy, co zwiększa bezpieczeństwo i upraszcza zarządzanie dostępem.
  3. Wdrożenie aplikacji:

    • Wdrożenie aplikacji Flask na usługę Azure App Service, aby była dostępna publicznie i mogła obsługiwać zapytania użytkowników.
    • Konfiguracja Azure App Service, w tym ustawienie odpowiednich zmiennych środowiskowych i zarządzanie uprawnieniami dostępu.
  4. Testowanie i filtrowanie treści:

    • Przetestowanie działania content filters, aby zapewnić, że chatbot nie generuje nieodpowiednich treści. Content filters służą do monitorowania i filtrowania treści, aby odpowiedzi były zgodne z polityką firmy lub regulacjami prawnymi.

Przydatne informacje

Wykorzystanie wiedzy z poprzednich zadań

Pamiętaj o wykorzystaniu wiedzy z poprzednich zadań. W poprzednich zadaniach znajdziesz informacje, które są pomocne w rozwiązaniu tego zadania.

Wdrożenie aplikacji

Aplikację możesz wdrożyć bez implementacji endpointu /chat, żeby zobaczyć, że działa.

Wybór rozmiaru App Service

Przy tworzeniu App Service wybierz typ Linux oraz rozmiar P1v3, który przyspieszy działanie.

Ustawienie zmiennych środowiskowych

W katalogu src znajduje się skrypt set_env.sh do ustawiania zmiennych środowiskowych App Service z pliku .env. Aby go użyć, wykonaj następujące kroki:

  1. Upewnij się, że masz plik .env z odpowiednimi zmiennymi środowiskowymi.
  2. Ustaw zmienne środowiskowe RESOURCE_GROUP oraz WEBAPP_NAME:
    export RESOURCE_GROUP="TwojaNazwaResourceGroup"
    export WEBAPP_NAME="TwojaNazwaWebApp"
  3. Wykonaj skrypt set_env.sh:
    ./set_env.sh

Wdrażanie aplikacji

Do wdrażania aplikacji możesz użyć następujących poleceń:

  1. Spakuj kod do pliku zip:
    zip -r myapp.zip .
  2. Ustaw zmienne środowiskowe RESOURCE_GROUP oraz WEBAPP_NAME:
    export RESOURCE_GROUP="TwojaNazwaResourceGroup"
    export WEBAPP_NAME="TwojaNazwaWebApp"
  3. Wgraj plik zip za pomocą Azure CLI:
    az webapp deploy --resource-group $RESOURCE_GROUP --name $WEBAPP_NAME --src-path myapp.zip

Ładowanie zmiennych we Flask

Kiedy pracujesz z Flask i potrzebujesz załadować zmienne środowiskowe za pomocą loadenv, możesz skorzystać z kontekstu aplikacji za pomocą with app.app_context():. To zapewnia, że wszystkie operacje wykonywane wewnątrz bloku będą miały dostęp do kontekstu aplikacji, co jest niezbędne dla niektórych operacji.

Flask - The Application Context

Do czego służy app.app_context()?

app.app_context() jest używane do stworzenia kontekstu aplikacji, który umożliwia dostęp do zmiennych konfiguracyjnych, ustawień aplikacji i innych zasobów, które są przechowywane w instancji aplikacji Flask. Jest to szczególnie przydatne w sytuacjach, gdy musisz wykonać operacje na aplikacji poza kontekstem żądania HTTP.

Przykład użycia with app.app_context():

Oto przykładowy kod pokazujący, jak można użyć with app.app_context(): do załadowania zmiennych środowiskowych za pomocą loadenv i użycia ich w prostym endpointzie:

from flask import Flask, jsonify
from dotenv import load_dotenv
import os

# Załaduj zmienne środowiskowe z pliku .env
load_dotenv()

app = Flask(__name__)

# Funkcja do załadowania zmiennych konfiguracyjnych
def load_config():
    app.config['MY_VARIABLE'] = os.getenv('MY_VARIABLE')

# Użycie app.app_context() do załadowania zmiennych środowiskowych
with app.app_context():
    load_config()

# Prosty endpoint używający zmiennej konfiguracyjnej
@app.route('/get-variable', methods=['GET'])
def get_variable():
    return jsonify({"MY_VARIABLE": app.config['MY_VARIABLE']})

if __name__ == '__main__':
    app.run(debug=True)

W powyższym przykładzie:

  1. Używamy load_dotenv() do załadowania zmiennych środowiskowych z pliku .env.
  2. Tworzymy instancję aplikacji Flask.
  3. Definiujemy funkcję load_config(), która pobiera zmienną środowiskową MY_VARIABLE i ustawia ją w konfiguracji aplikacji Flask.
  4. Używamy with app.app_context(): do stworzenia kontekstu aplikacji i załadowania zmiennych środowiskowych za pomocą funkcji load_config().
  5. Definiujemy prosty endpoint /get-variable, który zwraca wartość zmiennej konfiguracyjnej MY_VARIABLE.
  6. Uruchamiamy aplikację Flask.

Dzięki temu podejściu możemy bezpiecznie i efektywnie zarządzać zasobami aplikacji Flask, nawet poza kontekstem żądania HTTP.

Jak można to zaimplementować?

Użyj langchain do realizacji zadania

1. Uruchomienie aplikacji lokalnie i wdrożenie wstępnej wersji

Aby rozpocząć pracę nad aplikacją, uruchom ją lokalnie i wdroż wstępną wersję na Azure App Service. Skorzystaj z poniższych linków, aby uzyskać szczegółowe instrukcje:

2. Rozszerzenie endpointu /chat

Rozszerz endpoint /chat, aby obsługiwał zapytania do Azure OpenAI za pomocą LangChain. Wykorzystaj wiedzę z zadania 1 oraz dokumentację:

3. Włącz Managed Identity na App Service

Skonfiguruj Managed Identity dla App Service, aby uzyskać dostęp do Azure OpenAI bez użycia haseł lub kluczy tajnych. Więcej informacji znajdziesz tutaj:

4. Nadaj uprawnienia dla tożsamości App Service do dostępu do Azure OpenAI

Upewnij się, że Managed Identity ma odpowiednie uprawnienia do dostępu do Azure OpenAI. Skorzystaj z poniższych linków, aby dowiedzieć się, jak przypisać role:

5. Ustaw zmienne środowiskowe (configuration) w App Service

Skonfiguruj zmienne środowiskowe w Azure App Service, aby aplikacja mogła korzystać z odpowiednich ustawień i poświadczeń. Więcej informacji znajdziesz tutaj:

6. Wdrożenie aplikacji

Korzystaj z sekcji Przydatne informacje lub instrukcji z zadania 1, aby poprawnie wdrożyć aplikację, ustawić zmienne środowiskowe i skonfigurować Managed Identity.

7. Przetestuj content filters

Przetestuj działanie content filters, aby upewnić się, że chatbot nie generuje nieodpowiednich treści. Zapytaj mentora, aby uzyskać przykłady promptów do testowania filtrów treści.