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
, compare
và evaluate
Phép thuật PaLM cung cấp 4 lệnh khác nhau:
run
compile
compare
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
là 'hot'
và 1
là '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:
- Đặ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.
- Đặ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à name
và temperament
, 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
và --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.
Đ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 eval
và compare
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
- Hãy tham khảo Hướng dẫn về khái niệm LLM để tìm hiểu thêm về các LLM.
- Hãy xem hướng dẫn về lời nhắc để tìm hiểu thêm về cách tạo câu lệnh nhằm khai thác tối đa hiệu quả khi làm việc với PaLM.
- Để tạo nguyên mẫu và thử nghiệm nhiều câu lệnh, hãy tham khảo Google AI Studio. Ngoài ra, hãy tham khảo hướng dẫn nhanh về Google AI Studio để biết thêm thông tin.