Колаб Магия

В этом блокноте представлены магические команды Colab для PaLM. Magics упрощает разработку, тестирование, сравнение и оценку подсказок прямо в блокноте Colab.

Посмотреть на ai.google.dev Запустить в Google Colab Посмотреть исходный код на GitHub

Настраивать

Следуйте инструкциям ниже, чтобы установить и протестировать магию.

Установка магии PaLM

Чтобы использовать магические команды PaLM в Colab или другой среде IPython, вам сначала необходимо загрузить и установить пакет Python google-generativeai .

%pip install -q google-generativeai

Загрузка магии PaLM

Затем загрузите магию %%palm , используя магию %load_ext :

%load_ext google.generativeai.notebook

Проверьте установку

Чтобы проверить правильность установки магических команд, запустите %%palm --help . Обратите внимание, что вам также понадобится ключ PaLM API, если у вас его еще нет (см. следующий шаг).

%%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

Получение ключа PaLM API

Чтобы использовать API PaLM, вам необходимо создать ключ API . (Вам нужно сделать этот шаг только один раз.)

Установите ключ API в блокноте

Установите свой ключ API, запустив ячейку ниже.

%env GOOGLE_API_KEY=YOUR PALM KEY

Волшебные команды PaLM: run , compile , compare и evaluate

Магия PaLM предоставляет четыре разные команды:

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

Команда: palm run

Команда run отправляет содержимое ячейки в модель.

Поскольку запуск подсказок очень распространен, магия PaLM по умолчанию использует команду run , если команда не задана. Например, следующие две ячейки идентичны.

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

Понимание вывода

В столбце Prompt отображается текст, отправленный в модель, а в столбце text_result — результат. Остальные столбцы будут представлены по мере вашего изучения этого руководства.

Шаблоны подсказок

Подсказки не обязательно должны быть фиксированными строками. Вы можете вставлять значения в приглашение, используя заполнители шаблона, используя {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

Понимание вывода

Столбец Input Num отслеживает индекс входного слова в списке(ах). В этих примерах Input Num 0 — это 'hot' , а 1'cold' .

Указание нескольких наборов входных данных

Вы также можете указать несколько наборов входных данных одновременно.

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

Чтение данных из Google Таблиц

Магия PaLM также может читать и писать в Google Sheets. Чтобы получить доступ к данным Таблиц, вам необходимо войти в систему. В этом разделе основное внимание уделяется чтению данных из Таблиц; в следующем разделе показано, как записать вывод в Google Sheet.

Войдите в систему и разрешите доступ к Таблицам.

Форматирование электронной таблицы для использования с магией PaLM

Передайте идентификатор или URL-адрес Google Sheet в флаг --sheets_input_names , чтобы загрузить его как данные шаблона.

Используйте следующий формат в своей электронной таблице, чтобы использовать данные в шаблоне приглашения:

  1. Поместите имена переменных (шаблона приглашения) в первую строку листа.
  2. Поместите данные для замены каждой переменной в строки ниже.

Например, если в вашем шаблоне подсказки есть две переменные, которые нужно заменить: name и temperament , вы должны написать свою таблицу следующим образом:

имя темперамент
Майло нахальный
Бигсли расслабленный
Субра застенчивый
%%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.

Попробуй сам!

Чтобы попробовать это, используя свои собственные данные, создайте новый лист и передайте идентификатор --sheets_input_names . Помимо идентификатора и URL-адреса, вы также можете искать свои листы по названию, например %%palm --sheets_input_names "Animal adjectives" .

Объединение входных данных Таблиц с входными данными Python

Входные данные листов также можно комбинировать с --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.

Команда: palm eval

Используйте %%palm eval чтобы сравнить выходные данные подсказки с известными достоверными данными.

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:

Результаты модели постобработки

Чтобы выполнить достоверное тестирование, вам может потребоваться постобработка выходных данных модели.

Функции постобработки позволяют определить функцию, которая обрабатывает выходные данные модели. В случае команды eval при окончательной проверке равенства используется только столбец результата.

Используйте декоратор post_process_replace_fn , чтобы определить функцию для постобработки результатов:

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()

Определенная выше функция extract_and_normalize возьмет выходные данные модели и обрежет все повторяющиеся языковые пары, оставив только первый ответ. Посетите раздел постобработки , чтобы узнать больше о постобработке.

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

Команда: palm compile

Используйте команду %%palm compile , чтобы преобразовать приглашение с заполнителями в функцию, вызываемую из Python.

Все флаги и постобработка «компилируются» в функцию и будут использоваться при вызове.

В этом примере создается функция translate_en_to_fr с использованием функции постобработки extract_and_normalize из предыдущей версии .

%%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})

Выходные форматы

По умолчанию «скомпилированная» функция возвращает свои выходные данные в виде объекта, который будет отображаться как Pandas DataFrame . Однако вы можете преобразовать объект результатов в DataFrame или словарь с помощью .as_dict() или .as_dataframe() соответственно.

Для получения дополнительной информации см. флаг --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

Команда: palm compare

%%palm compare запускает скомпилированные запросы и создает таблицу с результатами сравнения, чтобы вы могли проверить различия.

%%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

Пользовательские функции сравнения

По умолчанию compare только проверки на равенство возвращаемых результатов. Однако вы можете указать одну или несколько пользовательских функций с помощью флага --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

Другие команды

Помощь

Флаг --help отображает поддерживаемые команды, которые вы можете передать непосредственно %%palm

Добавьте --help для просмотра подробной документации по каждой команде. Например,

%%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.

Модели

Используйте флаг --model , чтобы указать вариант модели PaLM, который вы хотите использовать.

См. метод list_models() для получения поддерживаемых моделей. Магию PaLM можно использовать с любой моделью, поддерживающей generateText .

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

Параметры модели

Вы также можете настроить параметры модели, такие как --candidate_count и --temperature .

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

Отладка: модель эха

Также доступна echo модель, которая вернет вам подсказку. Он не выполняет никаких вызовов API и не использует вашу квоту, поэтому может быть быстрым и простым способом протестировать выходные данные или постобработку.

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

Экспорт вывода в Python

Помимо отображения табличных результатов, магия PaLM может сохранять выходные данные модели в переменных Python, что позволяет вам манипулировать ими в дальнейшем или экспортировать результаты.

В этом примере выходные данные сохраняются в переменной Python: fave_colors .

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

Выходные переменные — это пользовательские объекты, которые по умолчанию отображаются как Pandas DataFrame . Их можно явно включить в словарь Python или фрейм данных, вызвав as_dict() или 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.']}

Напишите в Google Таблицы

Вы можете сохранить вывод обратно в Google Sheets, используя --sheets_output_names . Вы должны войти в систему и иметь соответствующие разрешения для доступа к личным таблицам.

Чтобы попробовать это, создайте новый лист и назовите его Translation results . Как и флаг ввода, флаг --sheets_output_names также принимает URL-адрес или идентификатор листа вместо текстового имени.

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

Результаты сохраняются на новой вкладке и содержат те же данные, которые вы видите здесь, в Colab.

Пример сохраненного листа

Генерация нескольких кандидатов

Чтобы сгенерировать более одного вывода для одного приглашения, вы можете передать в модель --candidate_count . По умолчанию для него установлено значение 1, что выводит только верхний результат.

Иногда модель генерирует одинаковые результаты для всех кандидатов. Их можно отфильтровать с помощью флага --unique , который устраняет дубликаты результатов из пакета кандидатов (но не для нескольких запросов).

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

Столбец Result Num различает несколько кандидатов, созданных по одному и тому же запросу.

Вывод модели постобработки

Широкий диапазон возможных результатов и структур может затруднить адаптацию результатов модели к вашей проблемной области. Магия PaLM предоставляет возможности постобработки, которые позволяют вам изменять или обрабатывать выходные данные модели с помощью кода Python.

Функции постобработки могут либо добавить новый столбец к выходным данным, либо изменить столбец text_result . Столбец text_result является последним столбцом и используется командами eval и compare для определения окончательного результата.

Вот несколько примеров функций, которые можно использовать при постобработке. Один добавляет новый столбец, а другой обновляет столбец результатов, используя декоратор 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

Чтобы использовать эти функции, добавьте их к команде %%palm с помощью оператора вертикальной черты ( | ), например так.

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

Здесь важен порядок. Когда вызывается word_count , исходные выходные данные модели используются для расчета количества слов. Если вы поменяете их местами, количество слов вместо этого будет количеством слов в извлеченном первом предложении.

дальнейшее чтение