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:
run
compile
compare
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:
- Geben Sie die Namen der Variablen (Ihrer Eingabeaufforderungsvorlage) in die erste Zeile des Tabellenblatts ein.
- 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-DataFrame
s 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.
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
- Weitere Informationen zu LLMs finden Sie im Leitfaden zu LLMs-Konzepten.
- In den Richtlinien für Aufforderungen erfahren Sie mehr darüber, wie Sie Prompts erstellen, um PaLM optimal nutzen zu können.
- Wenn Sie einen Prototyp erstellen und mit verschiedenen Prompts experimentieren möchten, sehen Sie sich Google AI Studio an. Weitere Informationen finden Sie auch in der Kurzanleitung zu Google AI Studio.