سحر Colab Magic

تقدِّم ورقة الملاحظات هذه أوامر Colab السحرية لتنسيق PaLM. تسهِّل الميزات السحرية تطوير الطلبات واختبارها ومقارنتها وتقييمها من داخل ورقة ملاحظات Colab.

العرض على ai.google.dev تجربة ورقة ملاحظات Colab الاطّلاع على ورقة الملاحظات على GitHub

ضبط إعدادات الجهاز

اتبع الخطوات أدناه لتثبيت الميزات السحرية واختبارها.

تثبيت نموذج PaLM

لاستخدام أوامر PaLM السحرية في Colab أو بيئة IPython أخرى، عليك أولاً تنزيل حزمة Python google-generativeai وتثبيتها.

%pip install -q google-generativeai

جارٍ تحميل نموذج PaLM

بعد ذلك، يمكنك تحميل تأثير %%palm باستخدام السحر %load_ext:

%load_ext google.generativeai.notebook

اختبار التثبيت

لاختبار التثبيت الصحيح للأوامر السحرية، شغِّل %%palm --help. يُرجى العِلم أنّك ستحتاج أيضًا إلى مفتاح PaLM API إذا لم يكن لديك مفتاح (راجِع الخطوة التالية).

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

لاستخدام PaLM 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 على الأمر 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"

يمكن أيضًا لأداة PaLM أيضًا القراءة والكتابة في "جداول بيانات Google". ستحتاج إلى تسجيل الدخول للوصول إلى بيانات "جداول بيانات Google". يركز هذا القسم على قراءة البيانات من جداول البيانات؛ القسم التالي يعرض كيفية كتابة النتائج في "جدول بيانات Google".

تسجيل الدخول والسماح بالوصول إلى "جداول بيانات Google"

تنسيق جدول بيانات لاستخدامه مع نموذج PaLM السحري

مرِّر رقم التعريف أو عنوان URL الخاص بجدول بيانات Google إلى علامة --sheets_input_names لتحميله كبيانات نموذج.

استخدِم التنسيق التالي في جدول البيانات لاستخدام البيانات في نموذج طلب:

  1. ضع أسماء المتغيرات (لقالب المطالبة) في الصف الأول من الورقة.
  2. ضع البيانات كبديل لكل متغير في الصفوف أدناه.

على سبيل المثال، إذا كان نموذج الطلب يحتوي على متغيّرَين لاستبدالهما، وهما name وtemperament، يجب كتابة جدول البيانات على النحو التالي:

الاسم المزاج
Milo ممتلئ
كبير مريح
سوبرا خجول
%%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"

دمج إدخالات "جداول بيانات Google" مع إدخالات بايثون

يمكن أيضًا دمج إدخالات "جداول بيانات Google" مع --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 لتحويل الطلب الذي يحتوي على عناصر نائبة إلى دالة قابلة للاستدعاء من داخل Python.

جميع عمليات الإبلاغ وما بعد المعالجة "مجمّعة" إلى الدالة وسيتم استخدامها عند استدعائها.

في هذا المثال، يتم إنشاء دالة تُسمى translate_en_to_fr، باستخدام دالة ما بعد المعالجة extract_and_normalize من before.

%%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. ومع ذلك، يمكنك تحويل كائن النتائج إلى DataFrame أو قاموس يحتوي على .as_dict() أو .as_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 لعرض الطلب. لا تُجري هذه الواجهة أي طلبات بيانات من واجهة برمجة التطبيقات أو تستهلك حصتك، لذا فهي تقدّم طريقة سريعة وبسيطة لاختبار النتائج أو ما بعد المعالجة.

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

تصدير الناتج إلى Python

بالإضافة إلى عرض الناتج الجدولي، يمكن لأداة PaLM حفظ ناتج النموذج في متغيّرات Python، ما يتيح لك معالجة البيانات بشكل أكبر أو تصدير النتائج.

في هذا المثال، يتم حفظ الناتج في متغيّر Python: fave_colors

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

متغيّرات الإخراج هي كائنات مخصّصة سيتم عرضها تلقائيًا في صورة DataFrame Pandas. ويمكن تضمينها بشكل صريح في قاموس أو إطار بيانات في قاموس بايثون عن طريق طلب السمة 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"

يمكنك إعادة حفظ النتائج في "جداول بيانات Google" باستخدام --sheets_output_names. يجب تسجيل الدخول، ويجب أن تكون لديك الأذونات المناسبة للوصول إلى "جداول بيانات Google" الخاصة.

لتجربة هذه الميزة، يمكنك إنشاء جدول بيانات جديد واختيار اسم 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 خيارات المعالجة اللاحقة التي تتيح لك تعديل مخرجات النموذج أو معالجتها باستخدام رمز Python.

يمكن لدوالّ المعالجة اللاحقة إما إضافة عمود جديد إلى الناتج أو تعديل عمود "text_result". العمود text_result هو العمود الأخير، ويستخدمه الأمران eval وcompare لتحديد الناتج النهائي.

في ما يلي بعض نماذج الدوال التي يجب استخدامها في مرحلة ما بعد المعالجة. يؤدّي أحدهما إلى إضافة عمود جديد والآخر يُعدِّل عمود النتيجة باستخدام أداة تصميم 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

لاستخدام هذه الدوال، ألحقها بالأمر %%palm باستخدام عامل التشغيل الممر (|)، هكذا.

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

الترتيب مهم هنا. عند استدعاء الدالة word_count، يتم استخدام ناتج النموذج الأصلي لحساب عدد الكلمات. إذا بدّلت هذه الكلمات، فسيكون عدد الكلمات بدلاً من ذلك هو عدد الكلمات في الجملة الأولى المستخرجة.

محتوى إضافي للقراءة