Colab-Magie

Dieses Notebook führt die magischen Colab-Befehle für PaLM ein. Mit Magien können Sie Prompts ganz einfach in einem Colab-Notebook entwickeln, testen, vergleichen und bewerten.

Auf ai.google.dev ansehen Colab-Notebook testen Notebook auf GitHub ansehen

Einrichtung

Führen Sie die folgenden Schritte aus, um die Magien zu installieren und zu testen.

PaLM-Magie installieren

Wenn Sie die magischen PaLM-Befehle in Colab oder einer anderen IPython-Umgebung verwenden möchten, müssen Sie zuerst das Python-Paket google-generativeai herunterladen und installieren.

%pip install -q google-generativeai

PaLM-Magie laden

Als Nächstes laden Sie die %%palm-Magie mithilfe der %load_ext-Magie:

%load_ext google.generativeai.notebook

Installation testen

Führen Sie %%palm --help aus, um zu prüfen, ob die magischen Befehle korrekt installiert wurden. Sie benötigen auch einen PaLM API-Schlüssel, falls Sie noch keinen haben (siehe nächster Schritt).

%%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-Schlüssel abrufen

Wenn Sie die PaLM API verwenden möchten, müssen Sie einen API-Schlüssel erstellen. Sie müssen diesen Schritt nur einmal ausführen.

API-Schlüssel im Notebook festlegen

Legen Sie den API-Schlüssel fest, indem Sie die Zelle unten ausführen.

%env GOOGLE_API_KEY=YOUR PALM KEY

Magische PaLM-Befehle: run, compile, compare und evaluate

PaLM-Magien bieten vier verschiedene Befehle:

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

Befehl: palm run

Mit dem Befehl run wird der Inhalt der Zelle an das Modell gesendet.

Da Aufforderungen häufig ausgeführt werden, verwendet PaLM-Magien standardmäßig den Befehl run, wenn kein Befehl angegeben wird. Die nächsten beiden Zellen sind beispielsweise identisch.

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

Informationen zur Ausgabe

Die Spalte Prompt zeigt den Text an, der an das Modell gesendet wurde, und die Spalte text_result zeigt das Ergebnis an. Die anderen Spalten werden im Verlauf dieses Leitfadens eingeführt.

Prompt-Vorlagen

Prompts müssen keine festen Strings sein. Mithilfe von {curly braces} können Sie mithilfe von Vorlagenplatzhaltern Werte in einen Prompt einfügen.

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

Informationen zur Ausgabe

Die Spalte Input Num verfolgt den Index des Eingabeworts in den Listen. In in diesen Beispielen: Input Num von 0 ist 'hot' und 1 ist 'cold'.

Mehrere Sätze von Eingaben angeben

Sie können auch mehrere Sätze von Eingaben gleichzeitig angeben.

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

Daten aus Google Tabellen lesen

Die PaLM-Magie kann auch in Google Tabellen lesen und schreiben. Sie müssen angemeldet sein, um auf Daten in Google Tabellen zugreifen zu können. In diesem Abschnitt geht es um das Lesen von Daten aus Google Tabellen. In einem späteren Abschnitt erfahren Sie, wie Sie die Ausgabe in eine Google-Tabelle schreiben.

Anmelden und Zugriff auf Google Tabellen autorisieren

<ph type="x-smartling-placeholder">

Eine Tabellenkalkulation für die Verwendung mit der PaLM-Magie formatieren

Übergeben Sie die ID oder URL einer Google-Tabelle an das Flag --sheets_input_names, um sie als Vorlagendaten zu laden.

Verwenden Sie das folgende Format in Ihrer Tabelle, um die Daten in einer Prompt-Vorlage zu verwenden:

  1. Geben Sie die Namen der Variablen (Ihrer Eingabeaufforderungsvorlage) in die erste Zeile des Tabellenblatts ein.
  2. Tragen Sie die zu ersetzenden Daten in die Zeilen darunter ein.

Wenn Ihre Prompt-Vorlage beispielsweise zwei zu ersetzende Variablen enthält, name und temperament, würden Sie Ihre Tabelle so schreiben:

Name Temperament
Milo frech
Bigsly entspannt
Logo: Subra schüchtern
%%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.

Versuchen Sie es selbst!

Wenn Sie dies mit Ihren eigenen Daten ausprobieren möchten, erstellen Sie eine neue Tabelle und übergeben Sie die ID an --sheets_input_names. Neben ID und URL können Sie Ihre Tabellenblätter auch anhand des Titels suchen, z.B. %%palm --sheets_input_names "Animal adjectives"

Google Tabellen-Eingaben mit Python-Eingaben kombinieren

Eingaben in Google Tabellen können auch mit --inputs kombiniert werden:

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.

Befehl: palm eval

Verwenden Sie %%palm eval, um die Ausgabe eines Prompts mit bekannten Ground-Truth-Daten zu vergleichen.

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:

Modellausgaben nach der Verarbeitung

Wenn Sie Ground-Truth-Tests durchführen möchten, müssen Sie möglicherweise die Modellausgabe nachbearbeiten.

Mit Funktionen zur Nachverarbeitung können Sie eine Funktion definieren, die die Modellausgabe verarbeitet. Im Fall des Befehls eval wird bei der abschließenden Gleichheitsprüfung nur die Ergebnisspalte verwendet.

Verwenden Sie den Decorator post_process_replace_fn, um eine Funktion zur Nachbearbeitung der Ergebnisse zu definieren:

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

Die oben definierte Funktion extract_and_normalize schneidet die Ausgabe des Modells ab und kürzt alle wiederholten Sprachpaare, sodass nur die erste Antwort übrig bleibt. Weitere Informationen finden Sie im Abschnitt zur Nachverarbeitung.

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

Befehl: palm compile

Verwenden Sie den Befehl %%palm compile, um eine Aufforderung mit Platzhaltern in eine Funktion zu konvertieren, die in Python aufgerufen werden kann.

Alle Flags und die Nachbearbeitung sind „kompiliert“. in die Funktion ein und wird beim Aufrufen verwendet.

In diesem Beispiel wird eine Funktion namens translate_en_to_fr mit der vorherigen Nachbearbeitungsfunktion extract_and_normalize erstellt.

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

Ausgabeformate

Standardmäßig wird ein „kompilierter“ -Funktion gibt die Ausgabe als Objekt zurück, das als Pandas-DataFrame angezeigt wird. Sie können das Ergebnisobjekt jedoch mit .as_dict() bzw. .as_dataframe() in DataFrame oder ein Wörterbuch umwandeln.

Weitere Informationen finden Sie unter dem Flag --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

Befehl: palm compare

%%palm compare führt kompilierte Prompts aus und erstellt eine Tabelle, in der die Vergleichsergebnisse nebeneinander angezeigt werden, sodass Sie die Unterschiede prüfen können.

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

Benutzerdefinierte Vergleichsfunktionen

Standardmäßig sucht compare in den zurückgegebenen Ergebnissen nur auf Gleichheit. Sie können jedoch mit dem Flag --compare_fn eine oder mehrere benutzerdefinierte Funktionen angeben.

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

Weitere Befehle

Hilfe

Das Flag --help zeigt die unterstützten Befehle an, die Sie direkt an %%palm übergeben können.

Hängen Sie --help an, um eine detaillierte Dokumentation für jeden Befehl aufzurufen. Beispiel:

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

Modelle

Verwenden Sie das Flag --model, um die PaLM-Modellvariante anzugeben, die Sie verwenden möchten.

Informationen zum Abrufen der unterstützten Modelle finden Sie unter der Methode list_models(). Die PaLM-Magie kann mit jedem Modell verwendet werden, das die Methode generateText unterstützt.

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

Modellparameter

Sie können auch Modellparameter wie --candidate_count und --temperature konfigurieren.

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

Debugging: Das Echo-Modell

Es ist auch ein echo-Modell verfügbar, das den Prompt an Sie zurückgibt. Er führt keine API-Aufrufe aus und verbraucht kein Kontingent, sodass er eine schnelle und einfache Möglichkeit bietet, die Ausgabe oder die Nachbearbeitung zu testen.

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

Ausgabe nach Python exportieren

Mit der PaLM-Magie wird nicht nur die tabellarische Ausgabe angezeigt, sondern auch die Modellausgabe in Python-Variablen gespeichert. So können Sie sie weiter bearbeiten oder die Ergebnisse exportieren.

In diesem Beispiel wird die Ausgabe in einer Python-Variablen gespeichert: fave_colors

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

Ausgabevariablen sind benutzerdefinierte Objekte, die standardmäßig als Pandas-DataFrames angezeigt werden. Sie können explizit in ein Python-Wörterbuch oder -DataFrame erzwungen werden, indem as_dict() oder as_pandas_dataframe() aufgerufen wird.

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.']}

In Google Tabellen schreiben

Sie können die Ausgabe mithilfe von --sheets_output_names wieder in Google Tabellen speichern. Sie müssen angemeldet sein und über die entsprechenden Berechtigungen verfügen, um auf private Tabellen zuzugreifen.

Wenn Sie dies ausprobieren möchten, erstellen Sie eine neue Tabelle und nennen Sie sie Translation results. Wie beim Eingabe-Flag akzeptiert auch das Flag --sheets_output_names die URL oder ID des Tabellenblatts anstelle des Namens in Textform.

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

Die Ergebnisse werden in einem neuen Tab gespeichert und enthalten dieselben Daten, die Sie hier in Colab sehen.

Beispiel für ein gespeichertes Tabellenblatt

Mehrere Kandidaten generieren

Wenn Sie mehr als eine Ausgabe für einen einzelnen Prompt generieren möchten, können Sie --candidate_count an das Modell übergeben. Dieser Wert ist standardmäßig auf 1 gesetzt, wodurch nur das beste Ergebnis ausgegeben wird.

Manchmal generiert das Modell für alle Kandidaten die gleiche Ausgabe. Diese können mit dem Flag --unique gefiltert werden, das Ergebnisse aus dem Kandidaten-Batch dedupliziert (aber nicht über mehrere Prompts hinweg).

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

In der Spalte Result Num wird zwischen mehreren Kandidaten unterschieden, die über denselben Prompt generiert werden.

Modellausgabe nach der Verarbeitung

Die breite Palette möglicher Ausgaben und Strukturen kann es schwierig machen, die Ausgabe des Modells an Ihre Problemdomäne anzupassen. Die PaLM-Magie bietet Optionen zur Nachbearbeitung, mit denen Sie die Modellausgabe mithilfe von Python-Code ändern oder verarbeiten können.

Nachbearbeitungsfunktionen können der Ausgabe entweder eine neue Spalte hinzugefügt oder die Spalte text_result geändert werden. Die Spalte text_result ist die letzte Spalte und wird von den Befehlen eval und compare verwendet, um die endgültige Ausgabe zu bestimmen.

Hier sind einige Beispielfunktionen für die Nachbearbeitung. Mit dem einen wird eine neue Spalte hinzugefügt und mit dem anderen die Ergebnisspalte mit dem post_process_replace_fn-Decorator aktualisiert.

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

Um diese Funktionen zu verwenden, hängen Sie sie mithilfe des Pipe-Operators (|) an den Befehl %%palm an, wie hier gezeigt.

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

Hier kommt Ordnung ins Spiel. Wenn word_count aufgerufen wird, wird die ursprüngliche Modellausgabe verwendet, um die Anzahl der Wörter zu berechnen. Wenn Sie sie vertauschen, entspricht die Wortzahl stattdessen der Anzahl der Wörter im extrahierten ersten Satz.

Weitere Informationen