Colab Magic

Sổ tay này giới thiệu các lệnh thần kỳ của Colab dành cho PaLM. Các phép thuật giúp bạn dễ dàng phát triển, kiểm tra, so sánh và đánh giá câu lệnh ngay trong sổ tay Colab.

Xem trên ai.google.dev Chạy trong Google Colab Xem nguồn trên GitHub

Thiết lập

Hãy làm theo các bước bên dưới để cài đặt và kiểm thử các phép thuật.

Cài đặt PaLM

Để sử dụng các lệnh ma thuật PaLM trong Colab hoặc môi trường IPython khác, trước tiên, bạn cần tải xuống và cài đặt gói Python google-generativeai.

%pip install -q google-generativeai

Đang tải tính năng PaLM kỳ diệu

Tiếp theo, hãy tải phép thuật %%palm bằng cách sử dụng phép thuật %load_ext:

%load_ext google.generativeai.notebook

Kiểm thử bản cài đặt

Để kiểm tra xem các lệnh ma thuật đã được cài đặt chính xác hay chưa, hãy chạy %%palm --help. Xin lưu ý rằng bạn cũng cần có một khoá API PaLM nếu bạn chưa có (xem bước tiếp theo).

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

Lấy khoá API PaLM

Để dùng PaLM API, bạn cần tạo khoá API. (Bạn chỉ cần thực hiện bước này một lần.)

Thiết lập khoá API trong sổ tay

Thiết lập khoá API bằng cách chạy ô bên dưới.

%env GOOGLE_API_KEY=YOUR PALM KEY

Các lệnh ma thuật trong PaLM: run, compile, compareevaluate

Phép thuật PaLM cung cấp 4 lệnh khác nhau:

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

Lệnh: palm run

Lệnh run gửi nội dung của ô đến mô hình.

Vì việc chạy lời nhắc rất phổ biến, nên các phép thuật PaLM sẽ mặc định dùng lệnh run nếu không có lệnh nào được đưa ra. Ví dụ: hai ô tiếp theo giống hệt nhau.

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

Tìm hiểu kết quả

Cột Prompt cho thấy văn bản được gửi đến mô hình và cột text_result cho thấy kết quả. Các cột khác sẽ xuất hiện trong quá trình bạn hoàn thành phần hướng dẫn này.

Mẫu lời nhắc

Lời nhắc không nhất thiết phải là chuỗi cố định. Bạn có thể chèn các giá trị vào câu lệnh bằng phần giữ chỗ mẫu thông qua {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

Tìm hiểu kết quả

Cột Input Num theo dõi chỉ mục của từ nhập trong(các) danh sách. Trong những ví dụ này, Input Num của 0'hot'1'cold'.

Chỉ định nhiều tập hợp đầu vào

Bạn cũng có thể chỉ định nhiều nhóm dữ liệu đầu vào cùng một lúc.

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

Đọc dữ liệu trên Google Trang tính

Tính năng PaLM kỳ diệu cũng có thể đọc và ghi vào Google Trang tính. Bạn sẽ cần đăng nhập để truy cập vào dữ liệu trên Trang tính. Phần này tập trung vào việc đọc dữ liệu trong Trang tính; phần sau trình bày cách ghi kết quả vào Google Trang tính.

Đăng nhập và cho phép truy cập vào Trang tính

Định dạng bảng tính để sử dụng với PaLM

Truyền mã hoặc URL của một tệp Google Trang tính vào cờ --sheets_input_names để tải dữ liệu đó dưới dạng dữ liệu mẫu.

Sử dụng định dạng sau trong bảng tính của bạn để sử dụng dữ liệu trong mẫu câu lệnh:

  1. Đặt tên của các biến (của mẫu câu lệnh) ở hàng đầu tiên của trang tính.
  2. Đặt dữ liệu để thay thế cho mỗi biến trong các hàng bên dưới.

Ví dụ: nếu mẫu câu lệnh của bạn có 2 biến cần thay thế là nametemperament, bạn sẽ viết bảng tính như sau:

tên tính cách
Milo táo tợn
Lớn thoải mái
Sao Subra e thẹn
%%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.

Hãy thử ngay!

Để thử tính năng này bằng dữ liệu của riêng bạn, hãy tạo một Trang tính mới rồi chuyển mã nhận dạng vào --sheets_input_names. Ngoài mã nhận dạng và URL, bạn cũng có thể tìm kiếm trang tính theo tiêu đề, ví dụ như %%palm --sheets_input_names "Animal adjectives".

Kết hợp dữ liệu đầu vào trong Trang tính với dữ liệu đầu vào Python

Dữ liệu đầu vào trong Trang tính cũng có thể được kết hợp với --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.

Lệnh: palm eval

Sử dụng %%palm eval để so sánh kết quả của một câu lệnh với dữ liệu thực tế đã biết.

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:

Kết quả đầu ra của mô hình sau xử lý

Để kiểm thử thực tế, có thể bạn cần phải xử lý đầu ra của mô hình sau khi xử lý.

Hàm Hậu xử lý cho phép bạn xác định hàm xử lý đầu ra của mô hình. Trong trường hợp lệnh eval, chỉ có cột kết quả được dùng trong bước kiểm tra đẳng thức cuối cùng.

Sử dụng trang trí post_process_replace_fn để xác định hàm cho kết quả hậu xử lý:

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

Hàm extract_and_normalize được xác định ở trên sẽ lấy kết quả từ mô hình và cắt bỏ mọi cặp ngôn ngữ lặp lại, chỉ để lại phản hồi đầu tiên. Bạn có thể tham khảo phần xử lý hậu kỳ để tìm hiểu thêm về việc xử lý hậu kỳ.

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

Lệnh: palm compile

Dùng lệnh %%palm compile để chuyển đổi lời nhắc có phần giữ chỗ thành một hàm có thể gọi trong Python.

Tất cả cờ và quá trình xử lý hậu kỳ đều được "biên dịch" vào hàm và sẽ được dùng khi được gọi.

Trong ví dụ này, hàm có tên là translate_en_to_fr được tạo bằng hàm xử lý hậu kỳ extract_and_normalize từ trước.

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

Định dạng đầu ra

Theo mặc định, hàm "đã biên dịch" trả về đầu ra dưới dạng một đối tượng sẽ hiển thị dưới dạng Pandas DataFrame. Tuy nhiên, bạn có thể chuyển đổi đối tượng kết quả thành DataFrame hoặc từ điển tương ứng bằng .as_dict() hoặc .as_dataframe().

Để biết thêm thông tin, hãy xem cờ --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

Lệnh: palm compare

%%palm compare chạy các lời nhắc đã được biên dịch và tạo một bảng có kết quả so sánh song song để bạn có thể kiểm tra sự khác biệt.

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

Hàm so sánh tuỳ chỉnh

Theo mặc định, compare chỉ kiểm tra sự cân bằng trong các kết quả được trả về. Tuy nhiên, bạn có thể chỉ định một hoặc nhiều hàm tuỳ chỉnh bằng cờ --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

Các lệnh khác

Trợ giúp

Cờ --help hiển thị các lệnh được hỗ trợ mà bạn có thể chuyển trực tiếp đến %%palm

Thêm --help để xem tài liệu chi tiết về từng lệnh. Ví dụ:

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

Mô hình

Hãy sử dụng cờ --model để chỉ định biến thể mô hình PaLM mà bạn muốn sử dụng.

Xem phương thức list_models() để truy xuất các mô hình được hỗ trợ. Bạn có thể sử dụng Phép thuật PaLM với bất kỳ mô hình nào hỗ trợ phương thức generateText.

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

Thông số mô hình

Bạn cũng có thể định cấu hình các tham số của mô hình, chẳng hạn như --candidate_count--temperature.

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

Gỡ lỗi: Mô hình lặp lại

Cũng có một mẫu echo sẽ đọc lại lời nhắc cho bạn. API này không thực hiện bất kỳ lệnh gọi API nào hay tiêu thụ hạn mức của bạn, vì vậy đây có thể là một cách nhanh chóng và đơn giản để kiểm thử đầu ra hoặc xử lý hậu kỳ.

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

Xuất đầu ra sang Python

Ngoài việc cho thấy kết quả dạng bảng, phép thuật PaLM có thể lưu dữ liệu đầu ra của mô hình vào các biến Python, cho phép bạn chỉnh sửa thêm hoặc xuất kết quả.

Trong ví dụ này, kết quả được lưu vào biến Python: fave_colors

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

Các biến đầu ra là các đối tượng tuỳ chỉnh sẽ hiển thị dưới dạng Pandas DataFrame theo mặc định. Bạn có thể chuyển đổi các đối tượng này vào từ điển Python hoặc dataframe một cách rõ ràng bằng cách gọi as_dict() hoặc 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.']}

Ghi vào Google Trang tính

Bạn có thể lưu kết quả vào Google Trang tính bằng --sheets_output_names. Bạn phải đăng nhập và bạn phải có quyền thích hợp để truy cập vào Trang tính riêng tư.

Để dùng thử tính năng này, hãy tạo một Trang tính mới rồi đặt tên cho trang tính đó là Translation results. Tương tự như cờ đầu vào, cờ --sheets_output_names cũng chấp nhận URL hoặc mã nhận dạng trang tính thay cho tên văn bản.

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

Kết quả được lưu vào một thẻ mới và cũng chứa dữ liệu mà bạn thấy trong Colab tại đây.

Ví dụ về trang tính đã lưu

Đang tạo nhiều đề xuất

Để tạo nhiều kết quả cho một câu lệnh, bạn có thể truyền --candidate_count vào mô hình. Giá trị này được đặt thành 1 theo mặc định, chỉ cho ra kết quả hàng đầu.

Đôi khi mô hình sẽ tạo cùng một kết quả giữa các ứng viên. Bạn có thể lọc các đề xuất này bằng cờ --unique. Cờ này giúp loại bỏ kết quả trùng lặp trong lô đề xuất (nhưng không phải trên nhiều câu lệnh).

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

Cột Result Num phân biệt nhiều đề xuất được tạo từ cùng một câu lệnh.

Đầu ra của mô hình sau xử lý

Phạm vi đầu ra và cấu trúc khả thi rộng có thể gây khó khăn cho việc điều chỉnh đầu ra của mô hình cho phù hợp với miền bài toán. Phép thuật PaLM cung cấp các tuỳ chọn xử lý hậu kỳ cho phép bạn sửa đổi hoặc xử lý đầu ra của mô hình bằng đoạn mã Python.

Các hàm hậu xử lý có thể thêm một cột mới vào dữ liệu đầu ra hoặc sửa đổi cột text_result. Cột text_result là cột cuối cùng và được các lệnh evalcompare sử dụng để xác định kết quả cuối cùng.

Dưới đây là một số hàm mẫu để sử dụng trong quá trình xử lý hậu kỳ. Một cột thêm một cột mới và cột còn lại cập nhật cột kết quả bằng cách sử dụng trình trang trí 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

Để sử dụng các hàm này, hãy thêm chúng vào lệnh %%palm bằng cách sử dụng toán tử ống (|), như vậy.

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

Đặt hàng rất quan trọng ở đây. Khi word_count được gọi, dữ liệu đầu ra của mô hình ban đầu sẽ được dùng để tính số từ. Nếu bạn hoán đổi những từ này, số từ sẽ là số từ trong câu đầu tiên được trích xuất.

Tài liệu đọc thêm