Структура messages
Каждое сообщение — словарь с двумя ключами:
messages = [
{"role": "user", "content": "What flavors are used in Dr. Pepper?"}
]
response = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=1000,
messages=messages
)
print(response.content[0].text)
Правила: список начинается с user-сообщения, роли чередуются (user → assistant → user...).
Объект ответа Message
# Message(id='msg_01...', content=[TextBlock(text='...', type='text')],
# model='claude-3-haiku-20240307', role='assistant',
# stop_reason='end_turn', usage=Usage(input_tokens=19, output_tokens=8))
print(response.content[0].text) # текст ответа
print(response.stop_reason) # 'end_turn' или 'max_tokens'
print(response.usage.input_tokens, response.usage.output_tokens)
"Слова в рот" — prefill ответа
response = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=500,
messages=[
{"role": "user", "content": "Generate a beautiful haiku"},
{"role": "assistant", "content": "calming mountain air"} # Claude продолжит с этой строки
]
)
print("calming mountain air" + response.content[0].text)
Few-shot промптинг через историю
response = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=500,
messages=[
{"role": "user", "content": "Unpopular opinion: Pickles are disgusting."},
{"role": "assistant", "content": "NEGATIVE"},
{"role": "user", "content": "I love spicy pickles from @PickleCo!"},
{"role": "assistant", "content": "POSITIVE"},
{"role": "user", "content": "Seriously why would anyone eat a pickle?"},
]
)
# Claude ответит "NEGATIVE" — потому что понял паттерн из примеров
Простой чатбот
conversation_history = []
while True:
user_input = input("User: ")
if user_input.lower() == "quit":
break
conversation_history.append({"role": "user", "content": user_input})
response = client.messages.create(
model="claude-3-haiku-20240307",
messages=conversation_history,
max_tokens=500
)
assistant_response = response.content[0].text
print(f"Assistant: {assistant_response}")
conversation_history.append({"role": "assistant", "content": assistant_response})