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.
-
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.
- Stworzenie aplikacji Flask z endpointem
-
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.
-
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.
-
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.
Pamiętaj o wykorzystaniu wiedzy z poprzednich zadań. W poprzednich zadaniach znajdziesz informacje, które są pomocne w rozwiązaniu tego zadania.
Aplikację możesz wdrożyć bez implementacji endpointu /chat
, żeby zobaczyć, że działa.
Przy tworzeniu App Service wybierz typ Linux oraz rozmiar P1v3, który przyspieszy działanie.
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:
- Upewnij się, że masz plik
.env
z odpowiednimi zmiennymi środowiskowymi. - Ustaw zmienne środowiskowe
RESOURCE_GROUP
orazWEBAPP_NAME
:export RESOURCE_GROUP="TwojaNazwaResourceGroup" export WEBAPP_NAME="TwojaNazwaWebApp"
- Wykonaj skrypt
set_env.sh
:./set_env.sh
Do wdrażania aplikacji możesz użyć następujących poleceń:
- Spakuj kod do pliku zip:
zip -r myapp.zip .
- Ustaw zmienne środowiskowe
RESOURCE_GROUP
orazWEBAPP_NAME
:export RESOURCE_GROUP="TwojaNazwaResourceGroup" export WEBAPP_NAME="TwojaNazwaWebApp"
- Wgraj plik zip za pomocą Azure CLI:
az webapp deploy --resource-group $RESOURCE_GROUP --name $WEBAPP_NAME --src-path myapp.zip
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
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.
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:
- Używamy
load_dotenv()
do załadowania zmiennych środowiskowych z pliku.env
. - Tworzymy instancję aplikacji Flask.
- Definiujemy funkcję
load_config()
, która pobiera zmienną środowiskowąMY_VARIABLE
i ustawia ją w konfiguracji aplikacji Flask. - Używamy
with app.app_context():
do stworzenia kontekstu aplikacji i załadowania zmiennych środowiskowych za pomocą funkcjiload_config()
. - Definiujemy prosty endpoint
/get-variable
, który zwraca wartość zmiennej konfiguracyjnejMY_VARIABLE
. - Uruchamiamy aplikację Flask.
Dzięki temu podejściu możemy bezpiecznie i efektywnie zarządzać zasobami aplikacji Flask, nawet poza kontekstem żądania HTTP.
Użyj langchain do realizacji zadania
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:
Rozszerz endpoint /chat
, aby obsługiwał zapytania do Azure OpenAI za pomocą LangChain. Wykorzystaj wiedzę z zadania 1 oraz dokumentację:
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:
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:
Skonfiguruj zmienne środowiskowe w Azure App Service, aby aplikacja mogła korzystać z odpowiednich ustawień i poświadczeń. Więcej informacji znajdziesz tutaj:
Korzystaj z sekcji Przydatne informacje lub instrukcji z zadania 1, aby poprawnie wdrożyć aplikację, ustawić zmienne środowiskowe i skonfigurować Managed Identity.
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.