Colab Magic

این نوت بوک دستورات جادویی Colab را برای PalM معرفی می کند. Magic توسعه، آزمایش، مقایسه و ارزیابی درخواست‌ها را از داخل یک دفترچه یادداشت Colab آسان می‌کند.

مشاهده در ai.google.dev در Google Colab اجرا شود مشاهده منبع در GitHub

برپایی

برای نصب و تست ماژیک مراحل زیر را دنبال کنید.

نصب ماژیک PalM

برای استفاده از دستورات جادویی PalM در Colab یا سایر محیط های IPython، ابتدا باید بسته google-generativeai Python را دانلود و نصب کنید.

%pip install -q google-generativeai

بارگیری جادوی PalM

سپس با استفاده از جادوی %load_ext ماژیک %%palm را بارگیری کنید:

%load_ext google.generativeai.notebook

نصب را تست کنید

برای آزمایش نصب صحیح دستورات جادویی، %%palm --help را اجرا کنید. توجه داشته باشید که اگر قبلاً آن را ندارید، به یک کلید API PalM نیز نیاز خواهید داشت (مرحله بعدی را ببینید).

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

دریافت کلید Palm API

برای استفاده از Palm API، باید یک کلید API ایجاد کنید . (این مرحله را فقط یک بار باید انجام دهید.)

کلید API را در نوت بوک تنظیم کنید

کلید API خود را با اجرای سلول زیر تنظیم کنید.

%env GOOGLE_API_KEY=YOUR PALM KEY

دستورات جادویی PalM: run ، compile ، compare و evaluate

جادوهای PalM چهار دستور مختلف را ارائه می دهند:

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

دستور: palm run

دستور run محتویات سلول را به مدل ارسال می کند.

از آنجایی که اعلان‌های اجرا بسیار رایج هستند، در صورتی که دستوری داده نشود، Palm magic به صورت پیش‌فرض دستور run می‌کند. به عنوان مثال، دو سلول بعدی یکسان هستند.

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

درک خروجی

ستون Prompt متن ارسال شده به مدل را نشان می دهد و ستون text_result نتیجه را نشان می دهد. ستون های دیگر با پیشرفت در این راهنما معرفی خواهند شد.

قالب های سریع

درخواست ها نباید رشته های ثابت باشند. با استفاده از {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

درک خروجی

ستون Input Num نمایه کلمه ورودی را در لیست(ها) ردیابی می کند. در این مثال‌ها، Input Num 0 'hot' و 1 'cold' است.

تعیین مجموعه های متعدد ورودی

همچنین می توانید چندین مجموعه ورودی را در یک زمان مشخص کنید.

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

خواندن داده‌ها از Google Sheets

جادوی PalM همچنین می‌تواند در برگه‌های Google بخواند و بنویسد. برای دسترسی به داده های Sheets باید وارد سیستم شوید. این بخش بر خواندن داده ها از Sheets تمرکز دارد. بخش بعدی نشان می دهد که چگونه می توانید خروجی را در برگه Google بنویسید.

وارد شوید و اجازه دسترسی به Sheets را بدهید

قالب‌بندی صفحه‌گسترده برای استفاده با جادوی PalM

شناسه یا URL یک برگه Google را به پرچم --sheets_input_names ارسال کنید تا آن را به عنوان داده الگو بارگیری کنید.

از قالب زیر در صفحه گسترده خود برای استفاده از داده ها در قالب درخواست استفاده کنید:

  1. نام متغیرها (الگوی prompt خود) را در ردیف اول برگه قرار دهید.
  2. داده ها را به جای هر متغیر در ردیف های زیر قرار دهید.

به عنوان مثال، اگر الگوی درخواست شما دو متغیر برای جایگزینی دارد، name و temperament ، صفحه گسترده خود را به این صورت بنویسید:

نام خلق و خوی
میلو پر رو
به شدت آرام
سوبرا خجالتی
%%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.

خودت آن را امتحان کن!

برای امتحان کردن این کار با استفاده از داده های خود، یک برگه جدید ایجاد کنید و شناسه را به --sheets_input_names ارسال کنید. علاوه بر شناسه و URL، می‌توانید برگه‌های خود را بر اساس عنوان جستجو کنید، به عنوان مثال %%palm --sheets_input_names "Animal adjectives" .

ترکیب ورودی Sheets با ورودی پایتون

ورودی‌های شیت را می‌توان با --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.

فرمان: palm eval

از %%palm eval برای مقایسه خروجی یک اعلان با داده های زمین-حقیقت شناخته شده استفاده کنید.

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:

خروجی های مدل پس پردازش

برای انجام تست حقیقت زمینی، ممکن است لازم باشد خروجی مدل را پس پردازش کنید.

توابع پس از پردازش به شما امکان می دهند تابعی را تعریف کنید که خروجی مدل را پردازش می کند. در مورد دستور eval ، فقط از ستون نتیجه در بررسی تساوی نهایی استفاده می شود.

از دکوراتور post_process_replace_fn برای تعریف یک تابع برای نتایج پس از پردازش استفاده کنید:

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

تابع extract_and_normalize که در بالا تعریف شده است، خروجی را از مدل می گیرد و هر جفت زبان تکرار شده را برش می دهد و فقط اولین پاسخ را باقی می گذارد. برای کسب اطلاعات بیشتر در مورد پس پردازش، بخش پس از پردازش را بررسی کنید.

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

دستور: palm compile

از فرمان %%palm compile برای تبدیل اعلان دارای متغیرهایی به یک تابع قابل فراخوانی از داخل پایتون استفاده کنید.

همه پرچم‌ها و پردازش‌های بعدی در تابع "کامپایل" می‌شوند و هنگام فراخوانی از آنها استفاده می‌شود.

در این مثال، تابعی به نام translate_en_to_fr با استفاده از تابع extract_and_normalize پس از پردازش از قبل ایجاد می شود.

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

فرمت های خروجی

به‌طور پیش‌فرض، یک تابع «کامپایل‌شده» خروجی خود را به‌عنوان یک شی برمی‌گرداند که به‌عنوان Pandas DataFrame نمایش داده می‌شود. با این حال، می‌توانید شی نتایج را به ترتیب با .as_dict() یا .as_dataframe() به DataFrame یا فرهنگ لغت تبدیل کنید.

برای اطلاعات بیشتر، پرچم --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

دستور: palm compare

%%palm compare دستورهای کامپایل شده را اجرا می‌کند و جدولی با نتایج مقایسه در کنار هم تولید می‌کند، بنابراین می‌توانید تفاوت‌ها را بررسی کنید.

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

توابع مقایسه سفارشی

به طور پیش‌فرض، چک‌های فقط برای برابری در نتایج برگشتی compare . با این حال، می توانید یک یا چند تابع سفارشی را با پرچم --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

دستورات دیگر

کمک

پرچم --help دستورات پشتیبانی شده را نمایش می دهد که می توانید مستقیماً به %%palm ارسال کنید

ضمیمه --help برای مشاهده مستندات دقیق برای هر دستور. مثلا،

%%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 برای تعیین نوع مدل PalM که می خواهید استفاده کنید استفاده کنید.

برای بازیابی مدل های پشتیبانی شده، متد list_models() را ببینید. جادوی PalM را می توان با هر مدلی که از متد generateText پشتیبانی می کند استفاده کرد.

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

پارامترهای مدل

همچنین می توانید پارامترهای مدل مانند --candidate_count و --temperature را پیکربندی کنید.

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

اشکال زدایی: مدل پژواک

یک مدل echo نیز موجود است که اعلان را به شما بازتاب می دهد. هیچ تماس API برقرار نمی کند یا سهمیه شما را مصرف نمی کند، بنابراین می تواند راهی سریع و ساده برای آزمایش خروجی یا پس پردازش باشد.

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

خروجی را به پایتون صادر کنید

علاوه بر نمایش خروجی جدولی، جادوی PalM می تواند خروجی مدل را در متغیرهای پایتون ذخیره کند و به شما امکان می دهد آنها را بیشتر دستکاری کنید یا نتایج خود را صادر کنید.

در این مثال، خروجی در یک متغیر پایتون ذخیره می‌شود: fave_colors

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

متغیرهای خروجی اشیایی سفارشی هستند که به صورت پیش فرض به صورت Pandas DataFrame نمایش داده می شوند. آنها را می توان با فراخوانی as_dict() یا 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.']}

در Google Sheets بنویسید

می‌توانید خروجی را با استفاده از --sheets_output_names در Google Sheets ذخیره کنید. شما باید وارد سیستم شوید و باید مجوزهای مناسب برای دسترسی به برگه های خصوصی را داشته باشید.

برای امتحان کردن این، یک برگه جدید ایجاد کنید و نام آن را Translation results بگذارید. مانند پرچم ورودی، پرچم --sheets_output_names نیز URL صفحه یا شناسه را به جای نام متنی می پذیرد.

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

نتایج در یک برگه جدید ذخیره می شوند و حاوی همان داده هایی هستند که در اینجا در Colab می بینید.

نمونه ای از یک برگه ذخیره شده

ایجاد چندین نامزد

برای تولید بیش از یک خروجی برای یک فرمان، می‌توانید --candidate_count به مدل ارسال کنید. این به طور پیش فرض روی 1 تنظیم شده است که فقط نتیجه برتر را به دست می دهد.

گاهی اوقات مدل خروجی یکسانی را در بین نامزدها ایجاد می کند. این‌ها را می‌توان با پرچم --unique فیلتر کرد، که نتایج را از دسته کاندید حذف می‌کند (اما نه در چند دستور).

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

ستون Result Num چندین نامزد تولید شده از یک اعلان را متمایز می کند.

خروجی مدل پس از پردازش

طیف وسیع خروجی ها و ساختارهای ممکن می تواند تطبیق خروجی مدل را با حوزه مشکل شما دشوار کند. PaLM magic گزینه های پس پردازشی را ارائه می دهد که به شما امکان می دهد خروجی مدل را با استفاده از کد پایتون اصلاح یا پردازش کنید.

توابع پس از پردازش می توانند یک ستون جدید به خروجی اضافه کنند یا ستون text_result تغییر دهند. ستون text_result آخرین ستون است و توسط دستورهای eval و compare برای تعیین خروجی نهایی استفاده می شود.

در اینجا برخی از توابع نمونه برای استفاده در پس پردازش آورده شده است. یکی یک ستون جدید اضافه می کند و دیگری ستون نتیجه را با استفاده از decorator 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

برای استفاده از این توابع، آنها را با استفاده از عملگر pipe ( | ) به فرمان %%palm اضافه کنید.

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

سفارش در اینجا مهم است. هنگامی که word_count فراخوانی می شود، خروجی مدل اصلی برای محاسبه تعداد کلمات استفاده می شود. اگر اینها را با هم عوض کنید، تعداد کلمات به جای آن تعداد کلمات در جمله اول استخراج شده خواهد بود.

بیشتر خواندن