Udostępnij za pośrednictwem


Tworzenie niestandardowej aplikacji czatu w języku Python przy użyciu zestawu SDK przepływu monitów

Ważne

Niektóre funkcje opisane w tym artykule mogą być dostępne tylko w wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy korzystania z niej w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

W tym przewodniku Szybki start przeprowadzimy Cię przez proces konfigurowania lokalnego środowiska deweloperskiego przy użyciu zestawu SDK przepływu monitów. Napiszemy monit, uruchomimy go w ramach kodu aplikacji, prześledziemy wykonywane wywołania LLM i uruchomimy podstawową ocenę danych wyjściowych usługi LLM.

Wymagania wstępne

Zanim będzie można skorzystać z tego przewodnika Szybki start, utwórz zasoby potrzebne dla aplikacji:

  • Centrum AI Studio do nawiązywania połączenia z zasobami zewnętrznymi.
  • Projekt do organizowania artefaktów projektu i udostępniania śladów i przebiegów oceny.
  • Wdrożony model czatu usługi Azure OpenAI (gpt-35-turbo lub gpt-4)

Ukończ przewodnik Szybki start dotyczący narzędzia AI Studio, aby utworzyć te zasoby, jeśli jeszcze tego nie zrobiono. Te zasoby można również utworzyć, postępując zgodnie z przewodnikiem dotyczącym zestawu SDK, aby utworzyć centrum i artykuł dotyczący projektu .

Ponadto musisz mieć uprawnienia niezbędne do dodawania przypisań ról dla kont magazynu w ramach subskrypcji platformy Azure. Udzielanie uprawnień (dodawanie przypisania roli) jest dozwolone tylko przez właściciela określonych zasobów platformy Azure. Może być konieczne zwrócenie się do administratora IT o pomoc w celu udzielenia dostępu do wywołania usługi Azure OpenAI Przy użyciu tożsamości.

Udzielanie dostępu do wywoływania usługi Azure OpenAI przy użyciu tożsamości

Aby użyć najlepszych rozwiązań w zakresie zabezpieczeń, zamiast kluczy interfejsu API używamy identyfikatora Entra firmy Microsoft do uwierzytelniania w usłudze Azure OpenAI przy użyciu tożsamości użytkownika.

Użytkownik lub administrator musi udzielić tożsamości użytkownika roli użytkownika openAI usług Cognitive Services w zasobie usług Azure AI Services, którego używasz. Ta rola umożliwia wywoływanie usługi Azure OpenAI przy użyciu tożsamości użytkownika.

Aby udzielić sobie dostępu do zasobu usług Azure AI Services, którego używasz:

  1. W programie AI Studio przejdź do projektu i wybierz pozycję Ustawienia w okienku po lewej stronie.

  2. W sekcji Połączenie zasobów wybierz nazwę połączenia z typem AIServices.

    Zrzut ekranu przedstawiający stronę ustawień projektu z wyróżnionym sposobem wybierania połączonego zasobu usług sztucznej inteligencji w celu jego otwarcia.

    Uwaga

    Jeśli nie widzisz połączenia usługi AIServices , zamiast tego użyj połączenia Azure OpenAI .

  3. Na stronie szczegółów zasobu wybierz link pod nagłówkiem Zasób , aby otworzyć zasób usług sztucznej inteligencji w witrynie Azure Portal.

    Zrzut ekranu przedstawiający szczegóły połączenia usług sztucznej inteligencji pokazujący sposób otwierania zasobu w witrynie Azure Portal.

  4. Na lewej stronie w witrynie Azure Portal wybierz pozycję Kontrola dostępu (IAM)>+ Dodaj>przypisanie roli.

  5. Wyszukaj rolę użytkownika OpenAI usług Cognitive Services, a następnie wybierz ją. Następnie kliknij przycisk Dalej.

    Zrzut ekranu przedstawiający stronę, aby wybrać rolę użytkownika OpenAI usług Cognitive Services.

  6. Wybierz pozycję Użytkownik, grupa lub jednostka usługi. Następnie wybierz pozycję Wybierz członków.

  7. W otwartym okienku Wybierz członków wyszukaj nazwę użytkownika, dla którego chcesz dodać przypisanie roli. Wybierz użytkownika, a następnie wybierz pozycję Wybierz.

    Zrzut ekranu przedstawiający stronę z przypisaną nową rolą użytkownika.

  8. Kontynuuj pracę kreatora i wybierz pozycję Przejrzyj i przypisz , aby dodać przypisanie roli.

Instalowanie interfejsu wiersza polecenia platformy Azure i logowanie

Teraz instalujemy interfejs wiersza polecenia platformy Azure i logujemy się z lokalnego środowiska deweloperskiego, aby można było wywoływać usługę Azure OpenAI przy użyciu poświadczeń użytkownika.

W większości przypadków można zainstalować interfejs wiersza polecenia platformy Azure z poziomu terminalu przy użyciu następującego polecenia:

winget install -e --id Microsoft.AzureCLI

Możesz postępować zgodnie z instrukcjami Instalowanie interfejsu wiersza polecenia platformy Azure, jeśli te polecenia nie działają w konkretnym systemie operacyjnym lub konfiguracji.

Po zainstalowaniu interfejsu wiersza polecenia platformy Azure zaloguj się przy użyciu polecenia i zaloguj się przy użyciu az login przeglądarki:

az login

Teraz utworzymy naszą aplikację i wywołamy usługę Azure OpenAI Service z poziomu kodu.

Tworzenie nowego środowiska języka Python

Najpierw musimy utworzyć nowe środowisko języka Python, za pomocą których można zainstalować pakiety zestawu SDK przepływu monitu. Nie instaluj pakietów w globalnej instalacji języka Python. Zawsze należy używać środowiska wirtualnego lub conda podczas instalowania pakietów języka Python. W przeciwnym razie możesz przerwać globalną instalację języka Python.

W razie potrzeby zainstaluj język Python

Zalecamy używanie języka Python w wersji 3.10 lub nowszej, ale wymagana jest co najmniej wersja python 3.8. Jeśli nie masz zainstalowanej odpowiedniej wersji języka Python, możesz postępować zgodnie z instrukcjami w samouczku języka Python programu VS Code, aby uzyskać najprostszy sposób instalowania języka Python w systemie operacyjnym.

Utworzenie środowiska wirtualnego

Jeśli masz już zainstalowany język Python w wersji 3.10 lub nowszej, możesz utworzyć środowisko wirtualne przy użyciu następujących poleceń:

py -3 -m venv .venv
.venv\scripts\activate

Aktywowanie środowiska języka Python oznacza, że po uruchomieniu python lub pip z poziomu wiersza polecenia będziesz używać interpretera języka Python zawartego .venv w folderze aplikacji.

Uwaga

Możesz użyć deactivate polecenia , aby zamknąć środowisko wirtualne języka Python i później ponownie aktywować je w razie potrzeby.

Instalowanie zestawu SDK przepływu monitów

W tej sekcji użyjemy przepływu monitów, aby skompilować aplikację. Przepływ monitów to zestaw narzędzi programistycznych zaprojektowanych w celu usprawnienia kompleksowego cyklu tworzenia aplikacji sztucznej inteligencji opartych na usłudze LLM, od ideacji, tworzenia prototypów, testowania, oceny, wdrażania produkcyjnego i monitorowania.

Użyj narzędzia pip, aby zainstalować zestaw SDK przepływu monitów w utworzonym środowisku wirtualnym.

pip install promptflow
pip install azure-identity

Zestaw SDK przepływu monitów przyjmuje zależność od wielu pakietów, które można wybrać oddzielnie zainstalować, jeśli nie chcesz ich wszystkich:

  • promptflow-core: zawiera podstawowe środowisko uruchomieniowe przepływu monitów używane do wykonywania kodu LLM
  • promptflow-tracing: uproszczona biblioteka używana do emitowania śladów OpenTelemetry w standardach
  • promptflow-devkit: zawiera narzędzia do testowania przepływu monitów i przeglądarki śledzenia dla lokalnych środowisk deweloperskich
  • openai: biblioteki klienta do korzystania z usługi Azure OpenAI
  • python-dotenv: służy do ustawiania zmiennych środowiskowych przez odczytywanie ich z .env plików

Konfigurowanie zmiennych środowiskowych

Nazwa punktu końcowego i wdrożenia usług sztucznej inteligencji jest wymagana do wywołania usługi Azure OpenAI z kodu. W tym przewodniku .env Szybki start zapiszesz te wartości w pliku, który jest plikiem zawierającym zmienne środowiskowe, które aplikacja może odczytać. Te wartości można znaleźć na placu zabaw czatu programu AI Studio.

  1. .env Utwórz plik i wklej następujący kod:

    AZURE_OPENAI_ENDPOINT=endpoint_value
    AZURE_OPENAI_DEPLOYMENT_NAME=deployment_name
    AZURE_OPENAI_API_VERSION=2024-02-15-preview
    
  2. Przejdź do placu zabaw czatu w projekcie AI Studio. Najpierw zweryfikuj, czy czat współpracuje z modelem, wysyłając wiadomość do usługi LLM.

  3. Znajdź nazwę wdrożenia usługi Azure OpenAI na placu zabaw czatu. Wybierz wdrożenie z listy rozwijanej i umieść kursor nad nazwą wdrożenia, aby go wyświetlić. W tym przykładzie nazwa wdrożenia to gpt-35-turbo-16k.

    Zrzut ekranu przedstawiający otwarty plac zabaw czatu programu AI Studio z wyróżnioną nazwą wdrożenia i przyciskiem wyświetl kod.

  4. .env W pliku zastąp deployment_name ciąg nazwą wdrożenia z poprzedniego kroku. W tym przykładzie używamy nazwy gpt-35-turbo-16kwdrożenia .

  5. <> Wybierz przycisk Wyświetl kod i skopiuj wartość punktu końcowego.

    Zrzut ekranu przedstawiający wyskakujące okienko kodu widoku z wyróżnionym przyciskiem w celu skopiowania wartości punktu końcowego.

  6. .env W pliku zastąp endpoint_value wartość punktu końcowego skopiowaną z okna dialogowego w poprzednim kroku.

Ostrzeżenie

Uwierzytelnianie oparte na kluczach jest obsługiwane, ale nie jest zalecane przez firmę Microsoft. Jeśli chcesz użyć kluczy, możesz dodać klucz do .envpliku , ale upewnij się, że plik .env znajduje się w .gitignore pliku, aby nie został przypadkowo zaewidencjonowany w repozytorium git.

Tworzenie podstawowego monitu czatu i aplikacji

Najpierw utwórz plik szablonu monitu, w tym celu użyjemy polecenia Prompty , który jest formatem szablonu monitu obsługiwanego przez przepływ monitów.

chat.prompty Utwórz plik i skopiuj do niego następujący kod:

---
name: Chat Prompt
description: A basic prompt that uses the chat API to answer questions
model:
    api: chat
    configuration:
        type: azure_openai
    parameters:
        max_tokens: 256
        temperature: 0.2
inputs:
    chat_input:
        type: string
    chat_history:
        type: list
        is_chat_history: true
        default: []
outputs:   
  response:
    type: string
sample:
    chat_input: What is the meaning of life?
---
system:
You are an AI assistant who helps people find information.

{% for item in history %}
{{item.role}}:
{{item.content}}
{% endfor %}

user:
{{chat_input}}

Teraz utwórzmy plik w języku Python, który używa tego szablonu monitu. chat.py Utwórz plik i wklej do niego następujący kod:

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
result = prompty(
    chat_history=[
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
    ],
    chat_input="Do other Azure AI services support this too?")

print(result)

Teraz z poziomu konsoli uruchom kod języka Python:

python chat.py

Powinny zostać wyświetlone dane wyjściowe z uruchomienia monitu:

Yes, other Azure AI services also support various capabilities and features. Some of the Azure AI services include Azure Cognitive Services, Azure Machine Learning, Azure Bot Service, and Azure Databricks. Each of these services offers different AI capabilities and can be used for various use cases. If you have a specific service or capability in mind, feel free to ask for more details.

Śledzenie wykonywania kodu czatu

Teraz przyjrzymy się, jak śledzenie przepływu monitów może zapewnić wgląd w różne wywołania LLM, które występują w naszych skryptach języka Python.

Na początku chat.py pliku dodaj następujący kod, aby włączyć śledzenie przepływu monitów:

from promptflow.tracing import start_trace
start_trace()

Uruchom ponownie:chat.py

python chat.py

Tym razem w danych wyjściowych zostanie wyświetlony link, aby wyświetlić ślad przepływu monitu wykonania:

Starting prompt flow service...
Start prompt flow service on port 23333, version: 1.10.1.
You can stop the prompt flow service with the following command:'pf service stop'.
Alternatively, if no requests are made within 1 hours, it will automatically stop.
You can view the trace detail from the following URL:
http://localhost:23333/v1.0/ui/traces/?#collection=aistudio-python-quickstart&uiTraceId=0x59e8b9a3a23e4e8893ec2e53d6e1e521

Jeśli wybierzesz ten link, zobaczysz ślad przedstawiający kroki wykonywania programu, co zostało przekazane do usługi LLM i danych wyjściowych odpowiedzi.

Zrzut ekranu przedstawiający ślad przedstawiający kroki wykonywania programu.

Śledzenie przepływu monitów umożliwia również śledzenie określonych wywołań funkcji i śladów dzienników w programie AI Studio. Aby uzyskać więcej informacji, zapoznaj się z tematem Jak używać śledzenia w zestawie SDK przepływu monitów.

Ocena monitu

Teraz pokażmy, jak możemy użyć ewaluatorów przepływu monitów, aby wygenerować metryki, które mogą ocenić jakość konwersacji w skali od 0 do 5. Ponownie uruchomimy monit, ale tym razem zapisujemy wyniki w tablicy zawierającej pełną konwersację, a następnie przekazujemy je do ChatEvaluator oceny.

Najpierw zainstaluj element promptflow-evals package:

pip install promptflow-evals

Teraz skopiuj następujący kod do evaluate.py pliku:

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration
from promptflow.evals.evaluators import ChatEvaluator

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

chat_history=[
    {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
    {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
]
chat_input="Do other Azure AI services support this too?"

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
response = prompty(chat_history=chat_history, chat_input=chat_input)

conversation = chat_history
conversation += [
    {"role": "user", "content": chat_input},
    {"role": "assistant", "content": response}
]

chat_eval = ChatEvaluator(model_config=model_config)
score = chat_eval(conversation=conversation)

print(score)

evaluate.py Uruchom skrypt:

python evaluate.py

Powinny zostać wyświetlone dane wyjściowe, które wyglądają następująco:

{'gpt_coherence': 5.0, 'gpt_fluency': 5.0, 'evaluation_per_turn': {'gpt_coherence': {'score': [5.0, 5.0]}, 'gpt_fluency': {'score': [5.0, 5.0]}}}

Wygląda na to, że zdobyliśmy 5 punktów w celu zapewnienia spójności i biegłości odpowiedzi LLM w tej konwersacji!

Aby uzyskać więcej informacji na temat używania ewaluatorów przepływu monitów, w tym sposobu tworzenia własnych niestandardowych ewaluatorów i wyników oceny dzienników w programie AI Studio, zapoznaj się z tematem Ocena aplikacji przy użyciu zestawu SDK przepływu monitów.