Глава 1: Базовая структура промпта
Глава 1: Базовая структура промпта
Настройка
Запустите следующую ячейку настройки, чтобы загрузить ваш ключ API и создать вспомогательную функцию get_completion.
Урок
Anthropic предлагает два API: устаревший Text Completions API и текущий Messages API. В этом руководстве мы будем использовать исключительно Messages API.
Минимальный вызов Claude с использованием Messages API требует следующих параметров:
- model: название модели API модели, которую вы собираетесь вызвать
-
max_tokens: максимальное количество токенов для генерации до остановки. Обратите внимание, что Claude может остановиться до достижения этого максимума. Этот параметр лишь задает абсолютное максимальное количество токенов для генерации. Кроме того, это жёсткая остановка, означающая, что она может привести к остановке генерации Claude посреди слова или предложения. -
messages: массив входных сообщений. Наши модели обучены работать с чередующимися репликамиuserиassistant. При создании новогоMessageвы указываете предыдущие реплики в диалоге с помощью параметраmessages, а модель затем генерирует следующийMessageв диалоге. - Каждое входное сообщение должно быть объектом с
roleиcontent. Вы можете указать одно сообщение с рольюuserили включить несколько сообщенийuserиassistant(они должны чередоваться, если так). Первое сообщение всегда должно использовать рольuser.
Существуют также необязательные параметры, такие как:
- system: системный prompt - подробнее об этом ниже.
temperature: степень изменчивости в ответе Claude. Для этих уроков и упражнений мы установилиtemperatureна 0.
Полный список всех параметров API посетите нашу документацию API.
Примеры
Давайте посмотрим, как Claude отвечает на корректно отформатированные prompt'ы. Для каждой из следующих ячеек запустите ячейку (shift+enter), и ответ Claude появится под блоком.
# Промпт
PROMPT = "Hi Claude, how are you?"
# Вывод ответа Claude
print(get_completion(PROMPT))
# Промпт
PROMPT = "Can you tell me the color of the ocean?"
# Вывод ответа Claude
print(get_completion(PROMPT))
# Промпт
PROMPT = "What year was Celine Dion born in?"
# Вывод ответа Claude
print(get_completion(PROMPT))
Теперь давайте рассмотрим некоторые prompt'ы, которые не содержат правильного форматирования Messages API. Для этих некорректно отформатированных prompt'ов Messages API возвращает ошибку.
Во-первых, у нас есть пример вызова Messages API, в котором отсутствуют поля role и content в массиве messages.
# Получение ответа Claude
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2000,
temperature=0.0,
messages=[
{"Hi Claude, how are you?"}
]
)
# Вывод ответа Claude
print(response[0].text)
Вот prompt, который не чередует роли user и assistant.
# Получение ответа Claude
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2000,
temperature=0.0,
messages=[
{"role": "user", "content": "What year was Celine Dion born in?"},
{"role": "user", "content": "Also, can you tell me some other facts about her?"}
]
)
# Вывод ответа Claude
print(response[0].text)
Сообщения user и assistant ДОЛЖНЫ чередоваться, и сообщения ДОЛЖНЫ начинаться с реплики user. Вы можете иметь несколько пар user и assistant в prompt'е (как если бы имитировали многоходовую беседу). Вы также можете вставить слова в завершающее сообщение assistant, чтобы Claude продолжил с того места, где вы остановились (подробнее об этом в следующих главах).
Системные промпты
Вы также можете использовать системные prompt'ы. Системный prompt — это способ предоставить Claude контекст, инструкции и рекомендации перед тем, как задать ему вопрос или задачу в реплике "User".
Структурно системные prompt'ы существуют отдельно от списка сообщений user и assistant и, таким образом, находятся в отдельном параметре system (взгляните на структуру вспомогательной функции get_completion в разделе Настройка этого блокнота).
В этом руководстве, везде, где мы могли бы использовать системный prompt, мы предоставили вам поле system в вашей функции завершения. Если вы не хотите использовать системный prompt, просто установите переменную SYSTEM_PROMPT в пустую строку.
Пример системного промпта
# Системный промпт
SYSTEM_PROMPT = "Your answer should always be a series of critical thinking questions that further the conversation (do not provide answers to your questions). Do not actually answer the user question."
# Промпт
PROMPT = "Why is the sky blue?"
# Вывод ответа Claude
print(get_completion(PROMPT, SYSTEM_PROMPT))
Зачем использовать системный prompt? Хорошо написанный системный prompt может улучшить производительность Claude различными способами, например, повышая способность Claude следовать правилам и инструкциям. Для получения дополнительной информации посетите нашу документацию по использованию системных prompt'ов с Claude.
Теперь мы перейдем к упражнениям. Если вы хотите поэкспериментировать с prompt'ами урока, не меняя ничего выше, прокрутите до конца блокнота урока, чтобы посетить Игровую площадку с примерами.
Упражнения
Упражнение 1.1 - Счёт до трёх
Используя правильное форматирование user / assistant, отредактируйте PROMPT ниже, чтобы Claude посчитал до трёх. Вывод также покажет, правильно ли ваше решение.
# Промпт - это единственное поле, которое вы должны изменить
PROMPT = "[Replace this text]"
# Получение ответа Claude
response = get_completion(PROMPT)
# Функция для оценки правильности упражнения
def grade_exercise(text):
pattern = re.compile(r'^(?=.*1)(?=.*2)(?=.*3).*$', re.DOTALL)
return bool(pattern.match(text))
# Вывод ответа Claude и соответствующей оценки
print(response)
print("\n--------------------------- GRADING ---------------------------")
print("Это упражнение решено правильно:", grade_exercise(response))
❓ Если вы хотите получить подсказку, запустите ячейку ниже!
from hints import exercise_1_1_hint; print(exercise_1_1_hint)
Упражнение 1.2 - Системный промпт
Измените SYSTEM_PROMPT, чтобы Claude отвечал как 3-летний ребёнок.
# Системный промпт - это единственное поле, которое вы должны изменить
SYSTEM_PROMPT = "[Replace this text]"
# Промпт
PROMPT = "How big is the sky?"
# Получение ответа Claude
response = get_completion(PROMPT, SYSTEM_PROMPT)
# Функция для оценки правильности упражнения
def grade_exercise(text):
return bool(re.search(r"giggles", text) or re.search(r"soo", text))
# Вывод ответа Claude и соответствующей оценки
print(response)
print("\n--------------------------- GRADING ---------------------------")
print("Это упражнение решено правильно:", grade_exercise(response))
❓ Если вы хотите получить подсказку, запустите ячейку ниже!
from hints import exercise_1_2_hint; print(exercise_1_2_hint)
Поздравляем!
Если вы решили все упражнения до этого момента, вы готовы перейти к следующей главе. Удачного промптинга!
Игровая площадка с примерами
Это область для свободного экспериментирования с примерами prompt'ов, показанными в этом уроке, и изменения prompt'ов, чтобы увидеть, как это может повлиять на ответы Claude.
# Промпт
PROMPT = "Hi Claude, how are you?"
# Вывод ответа Claude
print(get_completion(PROMPT))
# Промпт
PROMPT = "Can you tell me the color of the ocean?"
# Вывод ответа Claude
print(get_completion(PROMPT))
# Промпт
PROMPT = "What year was Celine Dion born in?"
# Вывод ответа Claude
print(get_completion(PROMPT))
# Получение ответа Claude
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2000,
temperature=0.0,
messages=[
{"Hi Claude, how are you?"}
]
)
# Вывод ответа Claude
print(response[0].text)
# Получение ответа Claude
response = client.messages.create(
model=MODEL_NAME,
max_tokens=2000,
temperature=0.0,
messages=[
{"role": "user", "content": "What year was Celine Dion born in?"},
{"role": "user", "content": "Also, can you tell me some other facts about her?"}
]
)
# Вывод ответа Claude
print(response[0].text)
# Системный промпт
SYSTEM_PROMPT = "Your answer should always be a series of critical thinking questions that further the conversation (do not provide answers to your questions). Do not actually answer the user question."
# Промпт
PROMPT = "Why is the sky blue?"
# Вывод ответа Claude
print(get_completion(PROMPT, SYSTEM_PROMPT))