Colab Magic

Sổ tay này giới thiệu các lệnh ma thuật trong Colab cho PaLM. Các tính năng kỳ diệu giúp bạn dễ dàng phát triển, thử nghiệm, so sánh và đánh giá các câu lệnh ngay trong một sổ tay Colab.

Xem trên ai.google.dev Dùng thử sổ tay Colab Xem sổ tay trên GitHub

Thiết lập

Hãy làm theo các bước bên dưới để cài đặt và thử nghiệm các tính năng kỳ diệu.

Cài đặt phép thuậ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

Tải PaLM kỳ diệu

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

%load_ext google.generativeai.notebook

Kiểm tra việc cài đặt

Để kiểm tra nhằm đảm bảo cài đặt đúng các lệnh ma thuật, hãy chạy %%palm --help. Xin lưu ý rằng bạn cũng sẽ cần một khoá PaLM API nếu bạn chưa có khoá (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

Nhận khoá PaLM API

Để sử 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.)

Đặt khoá API trên sổ tay

Đặt 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 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 phép thuật PaLM mặc định áp 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 khi bạn làm theo hướng dẫn này.

Mẫu câu lệnh

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 thông qua phần giữ chỗ mẫu bằng cách sử dụng {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. Ngang bằng các ví dụ này, Input Num trong 0'hot'1'cold'.

Chỉ định nhiều nhóm dữ liệu đầ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 trong Google Trang tính

Phép màu PaLM cũng có thể đọc và ghi vào Google Trang tính. Bạn sẽ cần phải đă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 sẽ hướng dẫn bạn 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 phép thuật PaLM

Truyền mã nhận dạng hoặc URL của một tệp Google Trang tính vào cờ --sheets_input_names để tải trang tính đó lên 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 (trong mẫu câu lệnh của bạn) vào hàng đầu tiên của trang tính.
  2. Đặt dữ liệu để thay thế cho từng 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ó hai biến để thay thế, nametemperament, bạn sẽ viết bảng tính như sau:

tên tính khí
Milo táo tợn
Bigsly thư giãn
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 nào!

Để thử thực hiện việc 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 truyền mã nhận dạng vào --sheets_input_names. Cũng như 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ụ: %%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

Bạn cũng có thể kết hợp dữ liệu nhập trong Trang tính 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:

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

Để kiểm thử thực tế, có thể bạn cần xử lý hậu kỳ đầu ra của mô hình.

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

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

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. Hãy xem phần quy trình hậu xử lý để tìm hiểu thêm về quy trình hậu xử lý.

%%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 câu lệnh có phần giữ chỗ thành một hàm có thể gọi trong Python.

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

Trong ví dụ này, một hàm có tên là translate_en_to_fr sẽ được tạo bằng cách sử dụng hàm hậu xử lý 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, tệp "đã biên dịch" hàm trả về kết quả dưới dạng một đối tượng sẽ được hiển thị dưới dạng Gấu trúc 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 với .as_dict() hoặc .as_dataframe() tương ứng.

Để 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 câu lệnh đã 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ự ngang bằng trong các kết quả 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 các lệnh được hỗ trợ mà bạn có thể truyền trực tiếp đến %%palm

Thêm --help để xem tài liệu chi tiết cho 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

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

Hãy 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 tiếng vọng

Bạn cũng có thể sử dụng một mô hình echo sẽ lặp lại lời nhắc cho bạn. Công cụ 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 dữ liệu đầu ra sang Python

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

Trong ví dụ này, dữ liệu đầu ra được lưu vào biến Python: fave_colors

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

Biến đầu ra là các đối tượng tuỳ chỉnh sẽ hiển thị dưới dạng Gấu trúc DataFrame theo mặc định. Bạn có thể chuyển đổi các đối số này thành từ điển Python hoặc khung dữ liệu 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ả trở lại Google Trang tính bằng --sheets_output_names. Bạn phải đăng nhập và phải có quyền thích hợp để truy cập vào Trang tính riêng tư.

Để dùng thử, hãy tạo một Trang tính mới rồi đặt tên là Translation results. Giống như cờ nhập, cờ --sheets_output_names cũng chấp nhận URL hoặc mã trang tính thay cho tên dạng 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à chứa dữ liệu mà bạn thấy ở đây trong Colab.

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

Tạo nhiều đề xuất

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

Đôi khi mô hình này sẽ tạo ra cùng một kết quả cho các đề xuất. Bạn có thể lọc các sự kiện này bằng cờ --unique để loại bỏ các kết quả trùng lặp ngoài lô đề xuất (nhưng không bị trùng lặp trên nhiều lời nhắc).

%%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 trong cùng một câu lệnh.

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

Phạm vi kết quả đầu ra và cấu trúc rộng có thể khiến bạn gặp khó khăn trong việc điều chỉnh kết quả của mô hình cho phù hợp với miền của vấn đề. Phép màu 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 mã Python.

Các hàm hậu xử lý có thể thêm một cột mới vào kết quả hoặc sửa đổi cột text_result. Cột text_result là cột cuối cùng và đượ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 hậu xử lý. 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 toán tử dấu gạch đứng (|).

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

Đặt hàng ở đây rất quan trọng. Khi word_count được gọi, dữ liệu đầu ra của mô hình ban đầu sẽ được dùng để tính toán 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