Opracowywanie przepływu

Przepływ monitów to narzędzie programistyczne zaprojektowane w celu usprawnienia całego cyklu tworzenia aplikacji sztucznej inteligencji obsługiwanych przez duże modele językowe (LLM). Wraz z rozwojem aplikacji sztucznej inteligencji opartych na usłudze LLM na całym świecie przepływ monitów zapewnia kompleksowe rozwiązanie, które upraszcza proces tworzenia prototypów, eksperymentowania, iteracji i wdrażania aplikacji sztucznej inteligencji.

Dzięki przepływowi monitów będziesz mieć następujące możliwości:

  • Orkiestruj przepływy wykonywalne za pomocą narzędzi LLM, monitów i języka Python za pomocą wizualizowanego grafu.
  • Testowanie, debugowanie i iterowanie przepływów z łatwością.
  • Utwórz warianty monitów i porównaj ich wydajność.

W tym artykule dowiesz się, jak utworzyć i opracować pierwszy przepływ monitów w usłudze Azure Machine Edukacja Studio.

Tworzenie i opracowywanie przepływu monitów

W programie Studio wybierz kartę Przepływ monitu na pasku nawigacyjnym po lewej stronie. Wybierz pozycję Utwórz , aby utworzyć pierwszy przepływ monitu. Przepływ można utworzyć przez sklonowanie przykładów dostępnych w galerii lub utworzenie przepływu od podstaw. Jeśli masz już pliki przepływu w lokalnym lub udziale plików, możesz również zaimportować pliki, aby utworzyć przepływ.

Zrzut ekranu przedstawiający tworzenie przepływu monitu od podstaw lub galerii.

Tworzenie przepływu

Po lewej stronie jest to widok spłaszczany, główny obszar roboczy, w którym można utworzyć przepływ, na przykład dodać narzędzia w przepływie, edytować monit, ustawiać dane wejściowe przepływu, uruchamiać przepływ, wyświetlać dane wyjściowe itp.

Zrzut ekranu przedstawiający główny obszar roboczy przepływu monitu.

W prawym górnym rogu jest to widok plików przepływu. Każdy przepływ może być reprezentowany przez folder zawierający plik "flow.dag.yaml", pliki kodu źródłowego i foldery systemowe. Możesz dodawać nowe pliki, edytować istniejące pliki i usuwać pliki. Możesz również wyeksportować pliki do lokalizacji lokalnej lub zaimportować pliki z lokalizacji lokalnej.

Oprócz wbudowanego edytowania węzła w widoku spłaszczającym można również włączyć przełącznik Tryb nieprzetworzonego pliku i wybrać nazwę pliku, aby edytować plik na karcie otwierania pliku.

W prawym dolnym rogu jest to widok wykresu tylko dla wizualizacji. Przedstawia on strukturę przepływu, którą tworzysz. Można powiększać, powiększać, powiększać, automatycznie układ itp.

Uwaga

Nie można edytować widoku grafu bezpośrednio, ale możesz wybrać węzeł, aby zlokalizować odpowiednią kartę węzła w widoku spłaszczanego, a następnie przeprowadzić edycję śródliniową.

Sesja obliczeniowa

Przed rozpoczęciem tworzenia należy najpierw rozpocząć sesję obliczeniową. Sesja obliczeniowa służy jako zasób obliczeniowy wymagany do uruchomienia przepływu monitu, który zawiera obraz platformy Docker zawierający wszystkie niezbędne pakiety zależności. Jest to element must-have do wykonywania przepływu.

Zrzut ekranu przedstawiający uruchamianie sesji obliczeniowej w programie Studio.

Dane wejściowe i wyjściowe przepływu

Dane wejściowe przepływu to dane przekazywane do przepływu jako całości. Zdefiniuj schemat wejściowy, określając nazwę i typ. Ustaw wartość wejściową poszczególnych danych wejściowych, aby przetestować przepływ. Możesz odwołać się do danych wejściowych przepływu w dalszej części węzłów przepływu przy użyciu ${input.[input name]} składni.

Dane wyjściowe przepływu to dane generowane przez przepływ jako całość, które podsumowuje wyniki wykonywania przepływu. Możesz wyświetlić i wyeksportować tabelę danych wyjściowych po zakończeniu przebiegu przepływu lub przebiegu wsadowego. Zdefiniuj wartość wyjściową przepływu, odwołując się do danych wyjściowych pojedynczego węzła przepływu przy użyciu składni ${[node name].output} lub ${[node name].output.[field name]}.

 Zrzut ekranu przedstawiający dane wejściowe i wyjściowe przepływu.

Opracowywanie przepływu przy użyciu różnych narzędzi

W przepływie można korzystać z różnych rodzajów narzędzi, na przykład LLM, Python, Serp API, Content Sejf ty itp.

Wybierając narzędzie, dodasz nowy węzeł do przepływu. Należy określić nazwę węzła i ustawić niezbędne konfiguracje dla węzła.

Na przykład w przypadku węzła LLM należy wybrać połączenie, wdrożenie, ustawić monit itp. Połączenie ion pomaga bezpiecznie przechowywać klucze tajne lub inne poufne poświadczenia wymagane do interakcji z usługą Azure OpenAI i zarządzać nimi. Jeśli nie masz jeszcze połączenia, najpierw utwórz je i upewnij się, że zasób usługi Azure OpenAI ma wdrożenia czatu lub ukończenia. Narzędzie LLM i Prompt obsługuje używanie języka Jinja jako języka tworzenia szablonów w celu dynamicznego generowania monitu. Na przykład można użyć {{}} polecenia , aby ująć nazwę wejściową zamiast stałego tekstu, aby można było go zamienić na bieżąco.

Aby użyć narzędzia języka Python, należy ustawić skrypt języka Python, ustawić wartość wejściową itp. Należy zdefiniować funkcję języka Python z danymi wejściowymi i wyjściowymi w następujący sposób.

 Zrzut ekranu przedstawiający pisanie skryptu języka Python dla węzła języka Python.

Po zakończeniu tworzenia monitu lub skryptu języka Python możesz wybrać pozycję Weryfikuj i przeanalizuj dane wejściowe , aby system automatycznie analizować dane wejściowe węzła na podstawie szablonu monitu i danych wejściowych funkcji języka Python. Wartość wejściowa węzła można ustawić w następujący sposób:

  • Ustawianie wartości bezpośrednio w polu wejściowym
  • Odwołuj się do danych wejściowych przepływu przy użyciu ${input.[input name]} składni
  • Odwołuj się do danych wyjściowych węzła przy użyciu składni ${[node name].output} lub ${[node name].output.[field name]}

Odwołując się do danych wyjściowych węzła, można połączyć węzły razem. Można na przykład odwołać się do danych wyjściowych węzła LLM w danych wejściowych węzła języka Python, aby węzeł języka Python mógł korzystać z danych wyjściowych węzła LLM, a w widoku grafu można zobaczyć, że dwa węzły są połączone ze sobą.

Włączanie kontroli warunkowej w przepływie

Usługa Prompt Flow oferuje nie tylko usprawniony sposób wykonywania przepływu, ale także oferuje zaawansowaną funkcję dla deweloperów — kontrolę warunkową, która umożliwia użytkownikom ustawianie warunków wykonywania dowolnego węzła w przepływie.

Na jej rdzeniu kontrola warunkowa zapewnia możliwość kojarzenia każdego węzła w przepływie z aktywowaną konfiguracją. Ta konfiguracja jest zasadniczo instrukcją "when", która określa, kiedy należy wykonać węzeł. Możliwości tej funkcji są realizowane, gdy masz złożone przepływy, w których wykonywanie niektórych zadań zależy od wyniku poprzednich zadań. Korzystając z kontroli warunkowej, można skonfigurować określone węzły do wykonania tylko wtedy, gdy zostaną spełnione określone warunki.

W szczególności możesz ustawić konfigurację aktywacji dla węzła, wybierając przycisk Aktywuj konfigurację na karcie węzła. Możesz dodać instrukcję "when" i ustawić warunek. Warunki można ustawić, odwołując się do danych wejściowych przepływu lub danych wyjściowych węzła. Można na przykład ustawić warunek ${input.[input name]} jako określoną wartość lub ${[node name].output} określoną wartość.

Jeśli warunek nie zostanie spełniony, węzeł zostanie pominięty. Stan węzła jest wyświetlany jako "Pomiń".

Zrzut ekranu przedstawiający ustawienie aktywuj konfigurację w celu włączenia kontroli warunkowej.

Testowanie przepływu

Przepływ można przetestować na dwa sposoby:

  • Uruchamianie pojedynczego węzła.
    • Aby uruchomić jeden węzeł, wybierz ikonę Uruchom w węźle w widoku spłaszczanym. Po zakończeniu działania możesz szybko sprawdzić wynik w sekcji danych wyjściowych węzła.
  • Uruchom cały przepływ.
    • Aby uruchomić cały przepływ, wybierz przycisk Uruchom w prawym górnym rogu.

Wyświetlanie wyniku testu i śladu (wersja zapoznawcza)

W przypadku całego przebiegu przepływu po wykonaniu przepływu możesz zobaczyć stan uruchomienia na banerze uruchamiania. Następnie możesz wybrać pozycję Wyświetl ślad , aby wyświetlić ślad w celu sprawdzenia wyniku i obserwowania wykonywania przepływu, gdzie można wyświetlić dane wejściowe i wyjściowe całego przepływu oraz każdy węzeł wraz z bardziej szczegółowymi informacjami dotyczącymi debugowania. Jest ona dostępna podczas uruchamiania i po zakończeniu przebiegu.

 Zrzut ekranu przedstawiający przycisk wyświetl dane wyjściowe w dwóch lokalizacjach.

Omówienie widoku śledzenia

Typ śledzenia przepływu monitu jest wyznaczony jako Przepływ. W widoku śledzenia można zaobserwować wyraźną sekwencję narzędzi używanych do orkiestracji przepływu.

Każdy poziom 2 w katalogu głównym przepływu reprezentuje węzeł w przepływie, wykonywany w postaci wywołania funkcji, dlatego rodzaj zakresu jest identyfikowany jako funkcja. Czas trwania każdego wykonania węzła można zobaczyć w drzewie rozpiętości.

W drzewie rozpiętości wywołania LLM można łatwo rozpoznać jako zakres LLM . Zawierają one informacje na temat czasu trwania wywołania usługi LLM i skojarzonego kosztu tokenu.

Klikając zakres, możesz wyświetlić szczegółowe informacje po prawej stronie. Obejmuje to dane wejściowe i wyjściowe, Nieprzetworzone dane Json i Wyjątek, z których wszystkie są przydatne do obserwacji i debugowania.  Zrzut ekranu przedstawiający szczegóły śledzenia.

Uwaga

W zestawie SDK przepływu monitu zdefiniowaliśmy typy zakresu serwal, w tym LLM, Function, Embedding, Retrieval i Flow. System automatycznie tworzy zakresy z informacjami wykonywania w wyznaczonych atrybutach i zdarzeniach.

Aby dowiedzieć się więcej o typach rozpiętości, zobacz Trace span (Zakres śledzenia).

Po zakończeniu przebiegu przepływu, aby sprawdzić wyniki, możesz wybrać przycisk Wyświetl wyniki testu, aby sprawdzić wszystkie historyczne rekordy przebiegu na liście. Domyślnie są wyświetlane rekordy uruchamiania utworzone w ciągu ostatnich siedmiu dni. Możesz wybrać filtr, aby zmienić warunek.

Zrzut ekranu przedstawiający wynik testu przepływu.

Możesz również wybrać nazwę rekordu przebiegu, aby wyświetlić szczegółowe informacje w widoku śledzenia.

Opracowywanie przepływu czatu

Przepływ czatu jest przeznaczony do tworzenia aplikacji konwersacyjnych, opierając się na możliwościach standardowego przepływu i zapewniając rozszerzoną obsługę danych wejściowych/wyjściowych czatów i zarządzania historią czatu. Dzięki przepływowi czatów można łatwo utworzyć czatbot, który obsługuje dane wejściowe i wyjściowe czatu.

Na stronie tworzenia przepływu czatu przepływ czatu przepływ czatu jest oznaczony etykietą "czat", aby odróżnić go od standardowego przepływu i przepływu oceny. Aby przetestować przepływ czatu, wybierz przycisk "Czat", aby wyzwolić okno czatu na potrzeby konwersacji.

Zrzut ekranu przedstawiający stronę tworzenia przepływu czatu.

Dane wejściowe/wyjściowe czatu i historia czatu

Najważniejszymi elementami, które odróżniają przepływ czatu od standardowego przepływu, są dane wejściowe czatu, historia czatu i dane wyjściowe czatu.

  • Dane wejściowe czatu: dane wejściowe czatu odnoszą się do wiadomości lub zapytań przesłanych przez użytkowników do czatbota. Efektywne obsługa danych wejściowych czatu ma kluczowe znaczenie dla pomyślnej konwersacji, ponieważ obejmuje zrozumienie intencji użytkownika, wyodrębnienie odpowiednich informacji i wyzwolenie odpowiednich odpowiedzi.
  • Historia czatów: historia czatów to rekord wszystkich interakcji między użytkownikiem i czatbotem, w tym zarówno danych wejściowych użytkownika, jak i wygenerowanych danych wyjściowych sztucznej inteligencji. Utrzymywanie historii czatów jest niezbędne do śledzenia kontekstu konwersacji i zapewnienia, że sztuczna inteligencja może generować kontekstowo odpowiednie odpowiedzi.
  • Dane wyjściowe czatu: dane wyjściowe czatu odnoszą się do wiadomości generowanych przez sztuczną inteligencję, które są wysyłane do użytkownika w odpowiedzi na swoje dane wejściowe. Generowanie kontekstowo odpowiednich i angażujących danych wyjściowych czatu jest niezbędne dla pozytywnego środowiska użytkownika.

Przepływ czatu może mieć wiele danych wejściowych, historię czatu i dane wejściowe czatu są wymagane w przepływie czatu.

  • W sekcji Dane wejściowe przepływu czatu dane wejściowe przepływu można oznaczyć jako dane wejściowe czatu. Następnie możesz wypełnić wartość wejściową czatu, wpisując w polu czatu.

  • Przepływ monitów może ułatwić użytkownikowi zarządzanie historią czatów. Sekcja chat_history w sekcji Dane wejściowe jest zarezerwowana do reprezentowania historii czatów. Wszystkie interakcje w polu czatu, w tym dane wejściowe czatu użytkownika, wygenerowane dane wyjściowe czatu i inne dane wejściowe i wyjściowe przepływu, są automatycznie przechowywane w historii czatów. Użytkownik nie może ręcznie ustawić wartości chat_history w sekcji Dane wejściowe. Jest on ustrukturyzowany jako lista danych wejściowych i wyjściowych:

    [
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    },
    {
        "inputs": {
        "<flow input 1>": "xxxxxxxxxxxxxxx",
        "<flow input 2>": "xxxxxxxxxxxxxxx",
        "<flow input N>""xxxxxxxxxxxxxxx"
        },
        "outputs": {
        "<flow output 1>": "xxxxxxxxxxxx",
        "<flow output 2>": "xxxxxxxxxxxxx",
        "<flow output M>": "xxxxxxxxxxxxx"
        }
    }
    ]
    

Uwaga

Funkcja automatycznego zapisywania historii czatów lub zarządzania nią jest funkcją na stronie tworzenia podczas przeprowadzania testów w polu czatu. W przypadku przebiegów wsadowych użytkownicy muszą uwzględnić historię czatów w zestawie danych przebiegu wsadowego. Jeśli nie ma dostępnej historii czatów do testowania, po prostu ustaw chat_history na pustą listę [] w zestawie danych uruchomień wsadowych.

Monit autora z historią czatu

Włączenie historii czatu do monitów jest niezbędne do tworzenia kontekstowych i angażujących odpowiedzi czatbota. W monitach możesz odwołać chat_history się do pobierania poprzednich interakcji. Dzięki temu można odwoływać się do poprzednich danych wejściowych i wyjściowych, aby utworzyć kontekstowe odpowiedzi.

Użyj gramatyki pętli dla języka Jinja, aby wyświetlić listę danych wejściowych i wyjściowych z pliku chat_history.

{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}

Testowanie przy użyciu pola czatu

Pole czatu zapewnia interaktywny sposób testowania przepływu czatu, symulując rozmowę z czatbotem. Aby przetestować przepływ czatu przy użyciu okna czatu, wykonaj następujące kroki:

  1. Wybierz przycisk Czat, aby otworzyć okno czatu.
  2. Wpisz dane wejściowe testu w polu czatu i wybierz klawisz Enter , aby wysłać je do czatbota.
  3. Przejrzyj odpowiedzi czatbota, aby upewnić się, że są one kontekstowo odpowiednie i dokładne.
  4. Umożliwia szybkie obserwowanie i debugowanie danych śledzenia .

 Zrzut ekranu przedstawiający środowisko czatu przepływu czatu.

Następne kroki