Este notebook presenta los comandos mágicos de Colab para PaLM. Con Magics, es fácil desarrollar, probar, comparar y evaluar instrucciones desde un notebook de Colab.
Ver en ai.google.dev | Prueba un notebook de Colab | Ver notebook en GitHub |
Configuración
Sigue los pasos que se indican a continuación para instalar y probar los comandos mágicos.
Cómo instalar la magia de PaLM
Para usar los comandos mágicos de PaLM en Colab o en otro entorno de IPython, primero debes descargar e instalar el paquete google-generativeai
de Python.
%pip install -q google-generativeai
Cargando el mágico de PaLM
A continuación, carga el mágico %%palm
con el mágico %load_ext
:
%load_ext google.generativeai.notebook
Prueba la instalación
Para probar la instalación correcta de los comandos mágicos, ejecuta %%palm --help
. Ten en cuenta que también necesitarás una clave de API de PaLM, si aún no tienes una (consulta el siguiente paso).
%%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
Cómo obtener una clave de API de PaLM
Para usar la API de PaLM, deberás crear una clave de API. (Solo debes realizar este paso una vez).
Configura la clave de API en el notebook
Ejecuta la siguiente celda para configurar tu clave de API.
%env GOOGLE_API_KEY=YOUR PALM KEY
Comandos mágicos de PaLM: run
, compile
, compare
y evaluate
Los comandos mágicos de PaLM proporcionan cuatro comandos diferentes:
run
compile
compare
evaluate
Comando: palm run
El comando run
envía el contenido de la celda al modelo.
Como la ejecución de instrucciones es muy común, los comandos mágicos de PaLM utilizan el comando run
de forma predeterminada si no se proporciona ningún comando. Por ejemplo, las dos siguientes celdas son idénticas.
%%palm run
The opposite of hot is
%%palm
The opposite of hot is
Comprende el resultado
La columna Prompt
muestra el texto que se envió al modelo y la columna text_result
muestra el resultado. Las otras columnas se presentarán a medida que avances en esta guía.
Plantillas de instrucciones
No es necesario que las instrucciones sean cadenas fijas. Puedes insertar valores en una instrucción usando marcadores de posición de plantilla usando {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
Comprende el resultado
La columna Input Num
realiza un seguimiento del índice de las palabras de entrada en las listas. En
estos ejemplos, Input Num
de 0
es 'hot'
, y 1
es 'cold'
.
Especifica varios conjuntos de entradas
También puedes especificar varios conjuntos de entradas a la vez.
extreme_temperatures = {
'word': ['hot', 'cold']
}
minor_temperatures = {
'word': ['warm', 'chilly']
}
%%palm --inputs extreme_temperatures minor_temperatures
The opposite of {word} is
Lee datos de Hojas de cálculo de Google
La magia de PaLM también permite leer y escribir en Hojas de cálculo de Google. Debes ingresar a tu cuenta para acceder a los datos de Hojas de cálculo. Esta sección se enfoca en la lectura de datos de Hojas de cálculo. En una sección posterior, se muestra cómo puedes escribir los resultados en una hoja de cálculo de Google.
Acceder y autorizar el acceso a Hojas de cálculo
Dar formato a una hoja de cálculo para usarla con el método mágico PaLM
Pasa el ID o la URL de una hoja de cálculo de Google a la marca --sheets_input_names
para cargarla como datos de plantilla.
Usa el siguiente formato en tu hoja de cálculo para usar los datos en una plantilla de instrucciones:
- Coloca los nombres de las variables (de tu plantilla de instrucciones) en la primera fila de la hoja.
- En las filas de abajo, coloca los datos que se van a sustituir por cada variable.
Por ejemplo, si tu plantilla de instrucciones tiene dos variables para sustituir, name
y temperament
, deberías escribir tu hoja de cálculo de la siguiente manera:
nombre | temperamento |
---|---|
Milo | atrevido |
En grande | relajado |
Subra | tímido |
%%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.
¡Pruébalo!
Para probar esto con tus propios datos, crea una nueva hoja y pasa el ID a --sheets_input_names
. Además del ID y la URL, también puedes buscar tus hojas por título, p.ej., %%palm --sheets_input_names "Animal adjectives"
Combina entradas de Hojas de cálculo con entradas de Python
Las entradas de Hojas de cálculo también se pueden combinar con --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.
Comando: palm eval
Usa %%palm eval
para comparar el resultado de una instrucción con datos de verdad fundamental conocidos.
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:
Resultados del modelo de procesamiento posterior
Para realizar pruebas de verdad fundamental, es posible que tengas que realizar un procesamiento posterior de la salida del modelo.
Las funciones de procesamiento posterior te permiten definir una función que procesa el resultado del modelo. En el caso del comando eval
, solo se usa la columna de resultados en la verificación de igualdad final.
Usa el decorador post_process_replace_fn
a fin de definir una función para procesar posteriormente los resultados:
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()
La función extract_and_normalize
definida anteriormente tomará el resultado del modelo y recortará los pares de idiomas repetidos, y dejará solo la primera respuesta. Consulta la sección post-processing para obtener más información sobre el procesamiento posterior.
%%palm eval --inputs test_data --ground_truth ground_truth | extract_and_normalize
English: Hello
French: Bonjour
English: {word}
French:
Comando: palm compile
Usa el comando %%palm compile
para convertir un mensaje con marcadores de posición en una función a la que se puede llamar desde Python.
Todas las marcas y el procesamiento posterior están “compilados” a la función y se usarán cuando se invoquen.
En este ejemplo, se crea una función llamada translate_en_to_fr
con la función de procesamiento posterior extract_and_normalize
de antes.
%%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})
Formatos de salida
De forma predeterminada, un archivo “compilado” muestra su resultado como un objeto que se mostrará como Pandas DataFrame
. Sin embargo, puedes convertir el objeto de resultados en una DataFrame
o en un diccionario con .as_dict()
o .as_dataframe()
, respectivamente.
Para obtener más información, consulta la marca --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
Comando: palm compare
%%palm compare
ejecuta instrucciones compiladas y genera una tabla con los resultados de la comparación en paralelo para que puedas inspeccionar las diferencias.
%%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
Funciones de comparación personalizadas
De forma predeterminada, compare
solo comprueba la igualdad en los resultados que se muestran. Sin embargo, puedes especificar una o más funciones personalizadas con la marca --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
Otros comandos
Ayuda
La marca --help
muestra los comandos compatibles que puedes pasar directamente a %%palm
.
Agrega --help
para ver la documentación detallada de cada comando. Por ejemplo:
%%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.
Modelos
Usa la marca --model
para especificar la variante del modelo PaLM que quieres usar.
Consulta el método list_models()
para recuperar los modelos compatibles. El mágico de PaLM se puede usar con cualquier modelo que admita el método generateText
.
%%palm run --model models/text-bison-001
My favourite color is
Parámetros del modelo
También puedes configurar los parámetros del modelo, como --candidate_count
y --temperature
.
%%palm run --model models/text-bison-001 --temperature 0.5
My favourite color is
Depuración: El modelo echo
También hay un modelo de echo
disponible que te repetirá la instrucción. No realiza llamadas a la API ni consume tu cuota, por lo que puede ser una forma rápida y simple de probar los resultados o el procesamiento posterior.
%%palm --model_type echo
A duck's quack does not echo.
Exporta el resultado a Python
Además de mostrar resultados tabulares, el mágico de PaLM puede guardar la salida del modelo en variables de Python, lo que te permite manipularlas aún más o exportar tus resultados.
En este ejemplo, el resultado se guarda en una variable de Python: fave_colors
.
%%palm --outputs fave_colors
The best colors to wear in spring-time are
Las variables de salida son objetos personalizados que se mostrarán como DataFrame
de Pandas de forma predeterminada. Se pueden convertir en un diccionario o DataFrame de Python de forma explícita llamando a as_dict()
o 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.']}
Escribe en Hojas de cálculo de Google
Puedes volver a guardar los resultados en Hojas de cálculo de Google con --sheets_output_names
. Debes iniciar sesión y tener los permisos adecuados para acceder a las Hojas de cálculo privadas.
Para probar esto, crea una nueva hoja y asígnale el nombre Translation results
. Al igual que la marca de entrada, la marca --sheets_output_names
también acepta la URL o el ID de la hoja en lugar del nombre textual.
%%palm --inputs english_words --sheets_output_names "Translation results"
English: Hello
French: Bonjour
English: {word}
French:
Los resultados se guardan en una pestaña nueva y contienen los mismos datos que ves aquí en Colab.
Genera varios candidatos
Para generar más de un resultado para una sola instrucción, puedes pasar --candidate_count
al modelo. Se establece en 1 de forma predeterminada, lo que muestra solo el resultado principal.
En ocasiones, el modelo generará el mismo resultado en todos los candidatos. Estos se pueden filtrar con la marca --unique
, que anula los resultados duplicados del lote de candidatos (pero no en varios mensajes).
%%palm run --temperature 1.0 --candidate_count 8 --unique
In a single word, my favourite color is
La columna Result Num
distingue varios candidatos generados a partir de la misma instrucción.
Resultado del modelo de procesamiento posterior
El amplio rango de resultados y estructuras posibles puede dificultar la adaptación de la salida del modelo al dominio del problema. El mágico PaLM proporciona opciones de posprocesamiento que te permiten modificar o procesar la salida del modelo con código de Python.
Las funciones de procesamiento posterior pueden agregar una columna nueva al resultado o modificar la columna text_result
. La columna text_result
es la última columna y los comandos eval
y compare
la usan para determinar el resultado final.
Aquí hay algunas funciones de ejemplo para usar en el posprocesamiento. Uno agrega una columna nueva y la otra actualiza la columna de resultados, con el decorador 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
Para usar estas funciones, agrégalas al comando %%palm
con el operador de barra vertical (|
), de esta manera.
%%palm run | word_count | extract_first_sentence
The happiest thing I can imagine is
El orden es importante aquí. Cuando se invoca word_count
, la salida del modelo original se usa para calcular la cantidad de palabras. Si los intercambias, el recuento de palabras será el número de palabras de la primera oración extraída.
Lecturas adicionales
- Consulta la guía de conceptos de los LLM para obtener más información.
- Revisa los lineamientos de instrucciones y obtén más información para crear instrucciones y aprovechar al máximo el trabajo con PaLM.
- Para crear prototipos y experimentar con diferentes instrucciones, consulta Google AI Studio. Además, consulta la guía de inicio rápido de Google AI Studio para obtener más información.