W tym notatniku przedstawiamy magiczne polecenia Colab dotyczące PaLM. Magiczne ułatwiają tworzenie, testowanie, porównywanie i ocenianie promptów w notatniku Colab.
Wyświetl na ai.google.dev | Wypróbuj notatnik Colab | Wyświetl notatnik na GitHubie |
Konfiguracja
Aby zainstalować i przetestować tę funkcję, wykonaj poniższe 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
Wczytuję magię PaLM
Następnie załaduj magię %%palm
, używając magii %load_ext
:
%load_ext google.generativeai.notebook
Testowanie instalacji
Aby sprawdzić, czy magiczne polecenia zostały poprawnie zainstalowane, uruchom %%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).
Ustaw klucz interfejsu API w notatniku
Ustaw klucz interfejsu API, uruchamiając poniższą komórkę.
%env GOOGLE_API_KEY=YOUR PALM KEY
Magiczne polecenia PaLM: run
, compile
, compare
i evaluate
Magia PaLM udostępnia 4 polecenia:
run
compile
compare
evaluate
Polecenie: palm run
Polecenie run
wysyła zawartość komórki do modelu.
Uruchamianie promptów jest tak powszechne, więc magia PaLM domyślnie używa polecenia run
, jeśli nie podano żadnego polecenia. 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, który został wysłany do modelu, a kolumna text_result
zawiera wynik. Pozostałe kolumny podane zostaną w miarę postępów w tym przewodniku.
Szablony promptów
Prompty nie muszą być stałymi ciągami znaków. Możesz wstrzykiwać wartości do promptu, korzystając z obiektów zastępczych szablonów za pomocą funkcji {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 z list. W
w tych przykładach, Input Num
z 0
to 'hot'
, a 1
to 'cold'
.
Określanie wielu zbiorów danych wejściowych
Możesz też określić wiele zbiorów danych wejściowych jednocześnie.
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 również odczytywać i zapisywać pliki w Arkuszach Google. Aby uzyskać dostęp do danych z Arkuszy, musisz się zalogować. Ta sekcja dotyczy odczytywania danych z Arkuszy. w dalszej sekcji znajdziesz informacje o tym, jak zapisać dane wyjściowe w Arkuszach Google.
Zaloguj się i autoryzuj dostęp do Arkuszy
Formatowanie arkusza kalkulacyjnego na potrzeby 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 arkusza kalkulacyjnego:
- Nazwy zmiennych (szablonu promptu) umieść w pierwszym wierszu arkusza.
- Umieść dane, które mają zastąpić każdą zmienną w wierszach poniżej.
Jeśli na przykład szablon promptu zawiera 2 zmienne do zastąpienia, name
i temperament
, arkusz kalkulacyjny powinien wyglądać tak:
nazwa | usposobienie |
---|---|
Milo | bezczelny |
Wielkie dzięki | zrelaksowany |
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.
Wypróbuj tę funkcję.
Aby wypróbować to za pomocą 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 Arkuszy z danymi wejściowymi w Pythonie
Dane wejściowe 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 przetwarzania końcowego
Aby przeprowadzić testy danych podstawowych (ground truth), może być konieczne końcowe przetworzenie danych wyjściowych modelu.
Funkcje po przetwarzaniu umożliwiają zdefiniowanie funkcji, która przetwarza dane wyjściowe modelu. W przypadku polecenia eval
w ostatecznym sprawdzaniu równości wyników używana jest tylko kolumna z wynikami.
Za pomocą dekoratora post_process_replace_fn
zdefiniuj funkcję przetwarzania 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 wszystkie powtarzające się pary językowe, pozostawiając tylko pierwszą odpowiedź. Więcej informacji o obróbce znajdziesz w sekcji dotyczącej obróbki końcowej.
%%palm eval --inputs test_data --ground_truth ground_truth | extract_and_normalize
English: Hello
French: Bonjour
English: {word}
French:
Polecenie: palm compile
Za pomocą polecenia %%palm compile
możesz przekonwertować prompt z obiektami zastępczymi na funkcję, którą można wywołać z poziomu Pythona.
Wszystkie oznaczenia 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
wykorzystująca funkcję przetwarzania końcowego extract_and_normalize
z okresu before.
%%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 „kompilowany” funkcja zwraca dane wyjściowe w postaci obiektu, który będzie wyświetlany jako Pandas DataFrame
. Możesz jednak przekonwertować obiekt wyników na format DataFrame
lub słownik za pomocą odpowiednio .as_dict()
lub .as_dataframe()
.
Więcej informacji zawiera flaga --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, które można wyświetlić obok siebie.
%%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 funkcja compare
sprawdza tylko, czy zwracane wyniki są równoważne. Za pomocą flagi --compare_fn
możesz jednak określić co najmniej jedną funkcję niestandardową.
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
wyświetla obsługiwane polecenia, które można przekazać bezpośrednio do %%palm
Dołącz --help
, aby wyświetlić szczegółową dokumentację każdego polecenia. Na 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 dowiedzieć się, jak pobrać obsługiwane modele, zapoznaj się z metodą list_models()
. Magii PaLM można używać z dowolnym 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, np. --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 powtórzy prośbę. Nie wykonuje żadnych wywołań interfejsu API ani nie zużywa Twojego limitu, więc może być szybkim i prostym sposobem na przetestowanie danych wyjściowych lub ich późniejszego przetworzenia.
%%palm --model_type echo
A duck's quack does not echo.
Eksportuj dane wyjściowe do Pythona
Oprócz wyświetlania w tabeli danych wyjściowych magia PaLM może zapisywać dane wyjściowe modelu w zmiennych Pythona, co pozwala na dalsze manipulowanie nimi lub eksportowanie wyników.
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 będą domyślnie wyświetlane jako DataFrame
pandy. Można je przekształcić w słownik Pythona lub w DataFrame przez wywołanie metody 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 zapisać z powrotem w Arkuszach Google przy użyciu narzędzia --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 nadaj mu nazwę Translation results
. Podobnie jak flaga danych wejściowych, flaga --sheets_output_names
również akceptuje adres URL lub identyfikator arkusza zamiast nazwy tekstowej.
%%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.
Generuję większą liczbę propozycji
Aby wygenerować więcej niż 1 wyjściowy wynik dla 1 promptu, możesz przekazać modelowi --candidate_count
. Domyślna wartość to 1, co powoduje wyświetlenie tylko najlepszego wyniku.
Czasami model będzie generować te same dane wyjściowe w przypadku różnych kandydatów. Można je filtrować za pomocą flagi --unique
, która usuwa duplikaty wyników z kandydującej grupy (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
odróżnia kilku kandydatów wygenerowanych na podstawie tego samego promptu.
Dane wyjściowe modelu po przetworzeniu
Szeroki zakres możliwych danych wyjściowych i struktur może utrudnić dostosowanie danych wyjściowych modelu do domeny, w której występuje problem. Magia PaLM udostępnia opcje przetwarzania końcowego, które pozwalają modyfikować lub przetwarzać dane wyjściowe modelu przy użyciu kodu Pythona.
Funkcje końcowe mogą dodawać do danych wyjściowych nową kolumnę lub modyfikować kolumnę text_result
. text_result
to ostatnia kolumna, która jest wykorzystywana w poleceniach eval
i compare
do określenia końcowych danych wyjściowych.
Oto kilka przykładowych funkcji, które można wykorzystać podczas przetwarzania końcowego. Jedna dodaje nową kolumnę, a druga aktualizuje kolumnę wyników za pomocą 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 korzystać z tych funkcji, dołącz je do polecenia %%palm
za pomocą operatora pionowej (|
) w podobny sposób.
%%palm run | word_count | extract_first_sentence
The happiest thing I can imagine is
Kolejność ma znaczenie. Po wywołaniu funkcji word_count
dane wyjściowe modelu pierwotnego są używane do obliczania liczby słów. Jeśli je zamienisz, liczba słów będzie równa liczbie słów w wyodrębnionym pierwszym zdaniu.
Więcej informacji
- Zapoznaj się z przewodnikiem po pojęciach związanych z modelami LLM, aby dowiedzieć się więcej.
- Zapoznaj się z wytycznymi dotyczącymi promptów, aby dowiedzieć się więcej o tworzeniu promptów i w pełni wykorzystać możliwości PaLM.
- Jeśli chcesz tworzyć prototypy różnych promptów i eksperymentować z nimi, zapoznaj się z Google AI Studio. Więcej informacji znajdziesz w krótkim wprowadzeniu do Google AI Studio.