Magia Colab

Ten notatnik przedstawia magiczne polecenia Colab dla PaLM. Magia ułatwia tworzenie, testowanie, porównywanie i ocenianie promptów w notatniku Colab.

Zobacz na ai.google.dev Uruchom w Google Colab Wyświetl źródło na GitHubie

Konfiguracja

Aby zainstalować i przetestować tę funkcję, wykonaj podane niżej czynności.

Instalowanie magii PaLM

Aby używać magicznych poleceń PaLM w Colab lub innym środowisku IPython, musisz najpierw pobrać i zainstalować pakiet Pythona google-generativeai.

%pip install -q google-generativeai

Poznaj magię PaLM

Następnie wczytaj magię %%palm, korzystając z magii %load_ext:

%load_ext google.generativeai.notebook

Testowanie instalacji

Aby przetestować instalację magicznych poleceń, uruchom polecenie %%palm --help. Pamiętaj, że będziesz też potrzebować klucza interfejsu PaLM API, jeśli jeszcze go nie masz (patrz następny krok).

%%palm --help
usage: palm [-h] {run,compile,compare,eval} ...

A system for interacting with LLMs.

positional arguments:
  {run,compile,compare,eval}

options:
  -h, --help            show this help message and exit

Uzyskiwanie klucza interfejsu PaLM API

Aby korzystać z interfejsu PaLM API, musisz utworzyć klucz interfejsu API. (Trzeba to zrobić tylko raz).

Ustawianie klucza interfejsu API w notatniku

Ustaw klucz interfejsu API, uruchamiając komórkę poniżej.

%env GOOGLE_API_KEY=YOUR PALM KEY

Magiczne polecenia PaLM: run, compile, compare i evaluate

Magia PaLM udostępnia 4 różne polecenia:

  1. run
  2. compile
  3. compare
  4. evaluate

Polecenie: palm run

Polecenie run wysyła zawartość komórki do modelu.

Ponieważ uruchamianie promptów jest bardzo powszechne, magia PaLM domyślnie przyjmuje polecenie run, jeśli nie zostanie wydane. Na przykład następne dwie komórki są identyczne.

%%palm run
The opposite of hot is
%%palm
The opposite of hot is

Interpretowanie wyników

Kolumna Prompt zawiera tekst wysłany do modelu, a kolumna text_result zawiera wynik. Pozostałe kolumny będziemy wprowadzać w miarę postępów w tym przewodniku.

Szablony promptów

Prompty nie muszą być stałymi ciągami znaków. Możesz wstawiać wartości do promptu za pomocą obiektów zastępczych szablonu ({curly braces}).

english_words = {
    # Each value here (hot, cold) will be substituted in for {word} in the prompt
    'word': ['hot', 'cold']
}
%%palm --inputs english_words
The opposite of {word} is

Interpretowanie wyników

Kolumna Input Num śledzi indeks słowa wejściowego na listach. W tych przykładach Input Num z 0 to 'hot', a 1 to 'cold'.

Określanie wielu zestawów danych wejściowych

Możesz też podać wiele zestawów danych wejściowych naraz.

extreme_temperatures = {
    'word': ['hot', 'cold']
}
minor_temperatures = {
    'word': ['warm', 'chilly']
}
%%palm --inputs extreme_temperatures minor_temperatures
The opposite of {word} is

Odczytywanie danych z Arkuszy Google

Magia PaLM może też odczytywać i zapisywać dane w Arkuszach Google. Aby uzyskać dostęp do danych z Arkuszy, musisz się zalogować. Ta sekcja zawiera informacje o odczytywaniu danych z Arkuszy. W późniejszej sekcji opisujemy, jak zapisywać dane wyjściowe w Arkuszach Google.

Zaloguj się i autoryzuj dostęp do Arkuszy

Formatowanie arkusza kalkulacyjnego do wykorzystania z magią PaLM

Przekaż identyfikator lub adres URL arkusza Google do flagi --sheets_input_names, aby wczytać go jako dane szablonu.

Aby użyć danych w szablonie promptu, użyj tego formatu w arkuszu kalkulacyjnym:

  1. Umieść nazwy zmiennych (szablonu promptu) w pierwszym wierszu arkusza.
  2. Umieść dane zastępujące każdą zmienną w poniższych wierszach.

Jeśli na przykład szablon promptu zawiera 2 zmienne do zastąpienia – name i temperament, możesz utworzyć arkusz kalkulacyjny w ten sposób:

nazwa usposobienie
Milo bezczelny
Duże w prostym stylu
Subra nieśmiałość
%%palm --sheets_input_names https://docs.google.com/spreadsheets/d/1UHfpkmBqIX5RjeJcGXOevIEhMmEoKlf5f9teqwQyHqc/edit
Create a single sentence description of a monkey's personality. The monkey's name is {name} and it has a {temperament} temperament.

Sprawdź, jak to działa.

Aby wypróbować tę funkcję na podstawie własnych danych, utwórz nowy arkusz i przekaż identyfikator do --sheets_input_names. Oprócz identyfikatora i adresu URL możesz też wyszukiwać arkusze według tytułu, np. %%palm --sheets_input_names "Animal adjectives".

Łączenie danych wejściowych w Arkuszach z danymi w Pythonie

Dane wejściowe z Arkuszy można też łączyć z funkcją --inputs:

new_monkeys = {
    'name': ['Hackerella'],
    'temperament': ['clever'],
}
%%palm --inputs new_monkeys --sheets_input_names 1UHfpkmBqIX5RjeJcGXOevIEhMmEoKlf5f9teqwQyHqc 1UHfpkmBqIX5RjeJcGXOevIEhMmEoKlf5f9teqwQyHqc
Create a single sentence description of a monkey's personality. The monkey's name is {name} and it has a {temperament} temperament.

Polecenie: palm eval

Użyj funkcji %%palm eval, aby porównać dane wyjściowe promptu ze znanymi danymi podstawowymi.

test_data = {
    "word": ["dog", "cat", "house"]
}
ground_truth = ["chien", "chat", "maison"]
%%palm eval --inputs test_data --ground_truth ground_truth
English: Hello
French: Bonjour
English: {word}
French:

Dane wyjściowe modelu po przetwarzaniu

Aby przeprowadzić testy danych podstawowych, konieczne może być przetworzenie danych wyjściowych modelu.

Funkcje przetwarzania końcowego umożliwiają zdefiniowanie funkcji, która przetwarza dane wyjściowe modelu. W przypadku polecenia eval podczas ostatecznej kontroli równości używana jest tylko kolumna wyników.

Użyj dekoratora post_process_replace_fn do zdefiniowania funkcji, która ma zostać przetworzona po przetworzeniu wyników:

from google.generativeai.notebook import magics

# Define a function to extract only the first response.
@magics.post_process_replace_fn
def extract_and_normalize(input):
  first_line, *unused = input.split('English:')
  return first_line.strip().lower()

Zdefiniowana powyżej funkcja extract_and_normalize pobierze dane wyjściowe z modelu i przytnie powtarzające się pary językowe, pozostawiając tylko pierwszą odpowiedź. Więcej informacji o przetwarzaniu znajdziesz w sekcji Przetwarzanie końcowe.

%%palm eval --inputs test_data --ground_truth ground_truth | extract_and_normalize
English: Hello
French: Bonjour
English: {word}
French:

Polecenie: palm compile

Użyj polecenia %%palm compile, aby przekonwertować prompt ze zmiennymi na funkcję wywoływaną z poziomu Pythona.

Wszystkie flagi i przetwarzanie końcowe są „kompilowane” do funkcji i będą używane po wywołaniu.

W tym przykładzie tworzona jest funkcja o nazwie translate_en_to_fr przy użyciu funkcji przetwarzania końcowego extract_and_normalize z okresu przed.

%%palm compile translate_en_to_fr | extract_and_normalize
English: Hello
French: Bonjour
English: {word}
French:
'Saved function to Python variable: translate_en_to_fr'
en_words = ['cat', 'dog']
translate_en_to_fr({'word': en_words})

Formaty wyjściowe

Domyślnie „skompilowana” funkcja zwraca dane wyjściowe w postaci obiektu, który jest wyświetlany jako Pandas DataFrame. Możesz jednak przekonwertować obiekt wyników na funkcję DataFrame lub słownik za pomocą funkcji .as_dict() lub .as_dataframe().

Więcej informacji znajdziesz w opisie flagi --outputs.

results = translate_en_to_fr({'word': en_words}).as_dict()

fr_words = results['text_result']

for en, fr in zip(en_words, fr_words):
  print(f'{fr} is French for {en}')
chat is French for cat
chien is French for dog

Polecenie: palm compare

%%palm compare uruchamia skompilowane prompty i tworzy tabelę z wynikami porównania obok siebie, dzięki czemu możesz sprawdzić różnice.

%%palm compile few_shot_prompt
English: Hello
French: Bonjour
English: {word}
French:
'Saved function to Python variable: few_shot_prompt'
%%palm compile zero_shot_prompt
{word} translated to French is:
'Saved function to Python variable: zero_shot_prompt'
words = {
    "word": ["dog", "cat", "house"]
}
%%palm compare few_shot_prompt zero_shot_prompt --inputs words

Niestandardowe funkcje porównania

Domyślnie compare sprawdza tylko, czy w zwróconych wynikach są równe. Możesz jednak określić co najmniej 1 funkcję niestandardową za pomocą flagi --compare_fn:

def average_word_length(lhs, rhs):
  """Count the average number of words used across prompts."""
  return (len(lhs.split(' ')) + len(rhs.split(' '))) / 2

def shortest_answer(lhs, rhs):
  """Label the prompt that generated the shortest output."""
  if len(lhs) < len(rhs):
    return 'first'
  elif len(lhs) > len(rhs):
    return 'second'
  else:
    return 'same'
%%palm compare few_shot_prompt zero_shot_prompt --inputs words --compare_fn average_word_length shortest_answer

Inne polecenia

Pomoc

Flaga --help pokazuje obsługiwane polecenia, które można przekazywać bezpośrednio do: %%palm

Dołącz --help, aby wyświetlić szczegółową dokumentację każdego polecenia. Przykład:

%%palm run --help
usage: palm run [-h] [--model_type {echo,text}] [--temperature TEMPERATURE]
                [--model MODEL] [--candidate_count CANDIDATE_COUNT] [--unique]
                [--inputs INPUTS [INPUTS ...]]
                [--sheets_input_names SHEETS_INPUT_NAMES [SHEETS_INPUT_NAMES ...]]
                [--outputs OUTPUTS [OUTPUTS ...]]
                [--sheets_output_names SHEETS_OUTPUT_NAMES [SHEETS_OUTPUT_NAMES ...]]

options:
  -h, --help            show this help message and exit
  --model_type {echo,text}, -mt {echo,text}
                        The type of model to use.
  --temperature TEMPERATURE, -t TEMPERATURE
                        Controls the randomness of the output. Must be
                        positive. Typical values are in the range: [0.0, 1.0].
                        Higher values produce a more random and varied
                        response. A temperature of zero will be deterministic.
  --model MODEL, -m MODEL
                        The name of the model to use. If not provided, a
                        default model will be used.
  --candidate_count CANDIDATE_COUNT, -cc CANDIDATE_COUNT
                        The number of candidates to produce.
  --unique              Whether to dedupe candidates returned by the model.
  --inputs INPUTS [INPUTS ...], -i INPUTS [INPUTS ...]
                        Optional names of Python variables containing inputs
                        to use to instantiate a prompt. The variable must be
                        either: a dictionary {'key1': ['val1', 'val2'] ...},
                        or an instance of LLMFnInputsSource such as
                        SheetsInput.
  --sheets_input_names SHEETS_INPUT_NAMES [SHEETS_INPUT_NAMES ...], -si SHEETS_INPUT_NAMES [SHEETS_INPUT_NAMES ...]
                        Optional names of Google Sheets to read inputs from.
                        This is equivalent to using --inputs with the names of
                        variables that are instances of SheetsInputs, just
                        more convenient to use.
  --outputs OUTPUTS [OUTPUTS ...], -o OUTPUTS [OUTPUTS ...]
                        Optional names of Python variables to output to. If
                        the Python variable has not already been defined, it
                        will be created. If the variable is defined and is an
                        instance of LLMFnOutputsSink, the outputs will be
                        written through the sink's write_outputs() method.
  --sheets_output_names SHEETS_OUTPUT_NAMES [SHEETS_OUTPUT_NAMES ...], -so SHEETS_OUTPUT_NAMES [SHEETS_OUTPUT_NAMES ...]
                        Optional names of Google Sheets to write inputs to.
                        This is equivalent to using --outputs with the names
                        of variables that are instances of SheetsOutputs, just
                        more convenient to use.

Modele

Użyj flagi --model, aby określić wariant modelu PaLM, którego chcesz używać.

Aby pobrać obsługiwane modele, zapoznaj się z metodą list_models(). Magii PaLM można używać z każdym modelem obsługującym metodę generateText.

%%palm run --model models/text-bison-001
My favourite color is

Parametry modelu

Możesz też konfigurować parametry modelu, takie jak --candidate_count i --temperature.

%%palm run --model models/text-bison-001 --temperature 0.5
My favourite color is

Debugowanie: model echa

Dostępny jest też model echo, który powtarza Ci tę prośbę. Nie wykonuje on żadnych wywołań interfejsu API ani nie zużywa limitu, dzięki czemu jest to szybki i prosty sposób na przetestowanie danych wyjściowych lub końcowych przetwarzania.

%%palm --model_type echo
A duck's quack does not echo.

Eksportuj dane wyjściowe do Pythona

Oprócz wyświetlania danych wyjściowych w tabeli PaLM magia PaLM może zapisywać dane wyjściowe modelu w zmiennych Pythona, co pozwala je dokładniej modyfikować lub eksportować wyniki.

W tym przykładzie dane wyjściowe są zapisywane w zmiennej Pythona: fave_colors

%%palm --outputs fave_colors
The best colors to wear in spring-time are

Zmienne wyjściowe to obiekty niestandardowe, które domyślnie będą wyświetlane jako elementy DataFrame Pandas. Można je bezpośrednio przekształcić w słownik Pythona lub ramkę danych, wywołując as_dict() lub as_pandas_dataframe().

from pprint import pprint

pprint(fave_colors.as_dict())
{'Input Num': [0],
 'Prompt': ['The best colors to wear in spring-time are'],
 'Prompt Num': [0],
 'Result Num': [0],
 'text_result': ['* Pastels: These soft, muted colors are perfect for the '
                 'springtime, as they are fresh and airy. Some popular pastel '
                 'colors include baby blue, mint green, and pale pink.\n'
                 '* Brights: If you want to make a statement, bright colors '
                 'are a great option for spring. Some popular bright colors '
                 'include fuchsia, cobalt blue, and yellow.\n'
                 '* Neutrals: Neutral colors are always a good choice, as they '
                 'can be easily dressed up or down. Some popular neutrals '
                 'include beige, gray, and white.\n'
                 '\n'
                 'When choosing colors to wear in the spring, it is important '
                 'to consider the occasion and your personal style. For '
                 'example, if you are attending a formal event, you may want '
                 'to choose a more muted color palette, such as pastels or '
                 'neutrals. If you are going for a more casual look, you may '
                 'want to choose brighter colors, such as brights or pastels.']}

Zapisywanie w Arkuszach Google

Dane wyjściowe możesz zapisywać z powrotem w Arkuszach Google przy użyciu polecenia --sheets_output_names. Aby uzyskać dostęp do prywatnych Arkuszy, musisz się zalogować i mieć odpowiednie uprawnienia.

Aby wypróbować tę funkcję, utwórz nowy arkusz i nazwij go Translation results. Podobnie jak w przypadku flagi wejściowej, flaga --sheets_output_names w miejscu nazwy tekstowej akceptuje też adres URL lub identyfikator arkusza.

%%palm --inputs english_words --sheets_output_names "Translation results"
English: Hello
French: Bonjour
English: {word}
French:

Wyniki zostaną zapisane w nowej karcie i będą zawierać te same dane, które widzisz w Colab.

Przykład zapisanego arkusza

Generuję wielu kandydatów

Aby wygenerować więcej niż 1 wynik dla jednego promptu, możesz przekazać do modelu --candidate_count. Domyślne ustawienie to 1, co powoduje wyświetlanie tylko najlepszych wyników.

Czasami model generuje te same dane wyjściowe dla różnych kandydatów. Można je filtrować za pomocą flagi --unique, która usuwa duplikaty wyników z grupy kandydatów (ale nie w wielu promptach).

%%palm run --temperature 1.0 --candidate_count 8 --unique
In a single word, my favourite color is

Kolumna Result Num umożliwia rozróżnienie wielu kandydatów wygenerowanych w odpowiedzi na ten sam prompt.

Dane wyjściowe modelu po przetwarzaniu

Szeroki zakres możliwych danych wyjściowych i struktur może utrudniać dostosowanie danych wyjściowych modelu do domeny, której dotyczy problem. Magia PaLM udostępnia opcje przetwarzania końcowego, które umożliwiają modyfikowanie lub przetwarzanie danych wyjściowych modelu za pomocą kodu w Pythonie.

Funkcje przetwarzania mogą dodać nową kolumnę do danych wyjściowych lub zmodyfikować kolumnę text_result. Kolumna text_result jest ostatnią kolumną, która jest używana przez polecenia eval i compare do określenia ostatecznych danych wyjściowych.

Oto kilka przykładowych funkcji, których możesz użyć podczas obróbki. Jedna z nich dodaje nową kolumnę, a druga aktualizuje kolumnę wyników przy użyciu dekoratora post_process_replace_fn.

import re
from google.generativeai.notebook import magics

# Add a new column.
def word_count(result):
  return len(result.split(' '))

# Modify the text_result column
@magics.post_process_replace_fn
def extract_first_sentence(result):
  """Extracts the first word from the raw result."""
  first, *_ = re.split(r'\.\s*', result)
  return first

Aby ich używać, dołącz je do polecenia %%palm, korzystając w ten sposób z operatora pionowej (|).

%%palm run | word_count | extract_first_sentence
The happiest thing I can imagine is

Kolejność ma tutaj znaczenie. Po wywołaniu funkcji word_count do obliczenia liczby słów używane są pierwotne dane wyjściowe modelu. Jeśli zamienisz te elementy, liczba słów będzie odpowiadać liczbie słów w pierwszym zdaniu.

Więcej informacji