Keajaiban Colab

Notebook ini memperkenalkan perintah ajaib Colab untuk PaLM. Dengan fitur ajaib, Anda dapat mengembangkan, menguji, membandingkan, dan mengevaluasi perintah dari dalam notebook Colab dengan mudah.

Lihat di ai.google.dev Menjalankan di Google Colab Lihat sumber di GitHub

Penyiapan

Ikuti langkah-langkah di bawah untuk menginstal dan menguji keajaibannya.

Menginstal keajaiban PaLM

Untuk menggunakan perintah magic PaLM di Colab atau lingkungan IPython, Anda harus mendownload dan menginstal paket Python google-generativeai terlebih dahulu.

%pip install -q google-generativeai

Memuat keajaiban PaLM

Selanjutnya, muat keajaiban %%palm dengan menggunakan sihir %load_ext:

%load_ext google.generativeai.notebook

Menguji penginstalan

Untuk menguji penginstalan perintah ajaib yang benar, jalankan %%palm --help. Perhatikan bahwa Anda juga akan memerlukan kunci PaLM API, jika belum memilikinya (lihat langkah berikutnya).

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

Mendapatkan kunci PaLM API

Untuk menggunakan PaLM API, Anda harus membuat kunci API. (Anda hanya perlu melakukan langkah ini satu kali.)

Menetapkan kunci API di notebook

Tetapkan kunci API Anda dengan menjalankan sel di bawah.

%env GOOGLE_API_KEY=YOUR PALM KEY

Perintah magic PaLM: run, compile, compare, dan evaluate

PaLM Magic menyediakan empat perintah yang berbeda:

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

Perintah: palm run

Perintah run mengirim konten sel ke model.

Karena menjalankan prompt sangat umum, PaLM Magic secara default disetel ke perintah run jika tidak ada perintah yang diberikan. Misalnya, dua sel berikutnya identik.

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

Memahami output

Kolom Prompt menampilkan teks yang dikirim ke model, dan kolom text_result menampilkan hasilnya. Kolom lainnya akan diperkenalkan saat Anda mempelajari panduan ini.

Template perintah

Perintah tidak harus berupa string tetap. Anda dapat memasukkan nilai ke dalam perintah menggunakan placeholder template menggunakan {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

Memahami output

Kolom Input Num melacak indeks kata input dalam daftar. Dalam contoh ini, Input Num dari 0 adalah 'hot', dan 1 adalah 'cold'.

Menentukan beberapa kumpulan {i>input<i}

Anda juga dapat menentukan beberapa kumpulan input sekaligus.

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

Membaca data dari Google Spreadsheet

Keajaiban PaLM juga dapat membaca dan menulis ke Google Spreadsheet. Anda harus masuk untuk mengakses data Spreadsheet. Bagian ini berfokus pada pembacaan data dari Spreadsheet; bagian selanjutnya menunjukkan cara menulis output ke Spreadsheet Google.

Login dan izinkan akses ke Spreadsheet

Memformat {i>spreadsheet<i} untuk digunakan dengan keajaiban PaLM

Teruskan ID atau URL Spreadsheet Google ke tanda --sheets_input_names untuk memuatnya sebagai data template.

Gunakan format berikut di {i>spreadsheet<i} Anda untuk menggunakan data dalam {i>template<i} petunjuk:

  1. Letakkan nama variabel (dari {i>template<i} perintah Anda) di baris pertama pada {i>sheet<i}.
  2. Tempatkan data untuk menggantikan setiap variabel pada baris di bawah.

Misalnya, jika template perintah Anda memiliki dua variabel untuk diganti, name dan temperament, Anda akan menulis spreadsheet seperti ini:

name temperamen
Milo nakal
Sangat besar santai
Subra malu
%%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.

Cobalah sendiri!

Untuk mencobanya menggunakan data Anda sendiri, buat Sheet baru dan teruskan ID ke --sheets_input_names. Selain ID dan URL, Anda juga dapat menelusuri sheet berdasarkan judul, misalnya, %%palm --sheets_input_names "Animal adjectives".

Menggabungkan input Spreadsheet dengan input Python

Input Spreadsheet juga dapat digabungkan dengan --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.

Perintah: palm eval

Gunakan %%palm eval untuk membandingkan output prompt dengan data kebenaran dasar yang diketahui.

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:

Output model pascapemrosesan

Untuk melakukan pengujian kebenaran dasar, Anda mungkin perlu melakukan pascapemrosesan pada output model.

Fungsi pascapemrosesan memungkinkan Anda menentukan fungsi yang memproses output model. Dalam kasus perintah eval, hanya kolom hasil yang digunakan dalam pemeriksaan kesetaraan akhir.

Gunakan dekorator post_process_replace_fn untuk menentukan fungsi guna pasca-proses:

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

Fungsi extract_and_normalize yang ditentukan di atas akan mengambil output dari model dan memangkas pasangan bahasa berulang, sehingga hanya menyisakan respons pertama. Lihat bagian pascapemrosesan untuk mempelajari pascapemrosesan lebih lanjut.

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

Perintah: palm compile

Gunakan perintah %%palm compile untuk mengonversi perintah dengan placeholder menjadi fungsi callable dari dalam Python.

Semua tanda dan pasca-pemrosesan "dikompilasi" ke dalam fungsi dan akan digunakan saat dipanggil.

Dalam contoh ini, fungsi bernama translate_en_to_fr dibuat, menggunakan fungsi pascapemrosesan extract_and_normalize dari sebelumnya.

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

Format output

Secara default, fungsi "dikompilasi" menampilkan output-nya sebagai objek yang akan ditampilkan sebagai DataFrame Panda. Namun, Anda dapat mengonversi objek hasil menjadi DataFrame atau kamus dengan .as_dict() atau .as_dataframe().

Untuk mengetahui informasi selengkapnya, lihat 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

Perintah: palm compare

%%palm compare menjalankan perintah yang dikompilasi dan menghasilkan tabel yang berisi hasil perbandingan secara berdampingan, sehingga Anda dapat memeriksa perbedaannya.

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

Fungsi perbandingan kustom

Secara default, compare hanya memeriksa kesetaraan di hasil yang ditampilkan. Namun, Anda dapat menentukan satu atau beberapa fungsi kustom dengan flag --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

Perintah lainnya

Bantuan

Tanda --help menampilkan perintah yang didukung yang dapat Anda teruskan langsung ke %%palm

Tambahkan --help untuk melihat dokumentasi mendetail untuk setiap perintah. Misalnya,

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

Gunakan flag --model untuk menentukan varian model PaLM yang ingin Anda gunakan.

Lihat metode list_models() untuk mengambil model yang didukung. Keajaiban PaLM dapat digunakan dengan model apa pun yang mendukung metode generateText.

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

Parameter model

Anda juga dapat mengonfigurasi parameter model, seperti --candidate_count dan --temperature.

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

Debug: Model echo

Model echo juga tersedia yang akan mengulangi perintah tersebut kepada Anda. Aplikasi ini tidak membuat panggilan API atau menghabiskan kuota Anda sehingga ini bisa menjadi cara cepat dan sederhana untuk menguji output atau pasca-pemrosesan.

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

Mengekspor output ke Python

Selain menampilkan output berbentuk tabel, keajaiban PaLM dapat menyimpan output model ke variabel Python, yang memungkinkan Anda memanipulasinya lebih lanjut atau mengekspor hasil.

Dalam contoh ini, output disimpan ke variabel Python: fave_colors

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

Variabel output adalah objek kustom yang akan ditampilkan sebagai DataFrame Panda secara default. Fungsi tersebut dapat dikonversi menjadi kamus atau {i>dataframe<i} Python secara eksplisit dengan memanggil as_dict() atau 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.']}

Menulis ke Google Spreadsheet

Anda dapat menyimpan output kembali ke Google Spreadsheet, menggunakan --sheets_output_names. Anda harus login, dan harus memiliki izin yang sesuai untuk mengakses Spreadsheet pribadi.

Untuk mencobanya, buat Sheet baru dan beri nama Translation results. Seperti tanda input, tanda --sheets_output_names juga menerima URL atau ID sheet sebagai pengganti nama tekstual.

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

Hasilnya akan disimpan ke tab baru dan berisi data yang sama dengan yang Anda lihat di Colab.

Contoh sheet tersimpan

Membuat beberapa kandidat

Untuk menghasilkan lebih dari satu output untuk satu perintah, Anda dapat meneruskan --candidate_count ke model. Nilai ini disetel ke 1 secara default, yang hanya menampilkan hasil teratas.

Terkadang model akan menghasilkan output yang sama pada seluruh kandidat. Pengujian ini dapat difilter dengan flag --unique, yang menghapus duplikat hasil dari batch kandidat (tetapi tidak di beberapa perintah).

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

Kolom Result Num membedakan beberapa kandidat yang dihasilkan dari prompt yang sama.

Output model pascapemrosesan

Berbagai kemungkinan output dan struktur dapat menyulitkan penyesuaian output model dengan domain masalah Anda. Keajaiban PaLM menyediakan opsi pascapemrosesan yang memungkinkan Anda mengubah atau memproses output model menggunakan kode Python.

Fungsi pascapemrosesan dapat menambahkan kolom baru ke output, atau mengubah kolom text_result. Kolom text_result adalah kolom terakhir, dan digunakan oleh perintah eval dan compare untuk menentukan output akhir.

Berikut adalah beberapa fungsi contoh untuk digunakan dalam pascapemrosesan. Satu kolom menambahkan kolom baru dan kolom lainnya memperbarui kolom hasil, menggunakan dekorator 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

Untuk menggunakan fungsi ini, tambahkan ke perintah %%palm menggunakan operator pipe (|), seperti itu.

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

Urutan penting di sini. Saat word_count dipanggil, output model asli digunakan untuk menghitung jumlah kata. Jika Anda menukarnya, jumlah kata akan menjadi jumlah kata dalam kalimat pertama yang diekstrak.

Bacaan lebih lanjut