В этом уроке мы создадим свой чат с Claude прямо в терминале. Это будет как ChatGPT или Claude.ai — но ты сама его напишешь. Несколько строк кода — и у тебя свой AI-чат.
Ты уже общаешься с Claude через сайт. Но сайт — это чужой продукт. Ты не можешь поменять как он работает, добавить свои правила, подключить к Telegram или Google Sheets.
Когда ты пишешь свой код для работы с Claude — ты контролируешь всё: что спрашивать, как отвечать, куда сохранять. Именно так создаются AI-продукты.
Начнём с самого простого — чат в терминале.
Открой терминал и выполни:
pip install anthropic
# pip — менеджер пакетов Python (урок 1.2)
# anthropic — SDK для работы с Claude API
mkdir ~/Documents/Projects/my-claude-chat
cd ~/Documents/Projects/my-claude-chat
Создай файл .env (урок 1.6 — помнишь, файлы с точкой = скрытые):
ANTHROPIC_API_KEY=sk-ant-api03-твой-ключ-сюда
# Замени "sk-ant-api03-твой-ключ-сюда" на свой реальный ключ
# Его можно взять на console.anthropic.com → API Keys
Создай файл .gitignore:
.env
Создай файл chat.py:
from anthropic import Anthropic
# Создаём подключение к Claude
# SDK сам найдёт API-ключ в файле .env
client = Anthropic()
# Отправляем одно сообщение
response = client.messages.create(
model="claude-sonnet-4-6", # какую модель использовать
max_tokens=1024, # максимум слов в ответе
messages=[
{"role": "user", "content": "Привет! Кто ты?"}
# "role": "user" — это говоришь ты
# "content" — текст сообщения
]
)
# Выводим ответ
print(response.content[0].text)
Запусти:
python3 chat.py
Ты увидишь ответ Claude прямо в терминале. Работает!
Но это не чат — это один вопрос и один ответ. Давай сделаем настоящий чат.
Заменим содержимое chat.py:
from anthropic import Anthropic
client = Anthropic()
# Список сообщений — это "память" нашего чата
# Сюда будем добавлять каждое сообщение
history = []
print("Твой личный Claude-чат! Пиши что угодно.")
print("Чтобы выйти — напиши 'выход'")
print("-" * 40)
# Бесконечный цикл — чат работает пока не напишешь "выход"
while True:
# Спрашиваем пользователя (тебя)
user_input = input("\nТы: ")
# input() — ждёт пока ты напишешь текст и нажмёшь Enter
# Если написала "выход" — останавливаем чат
if user_input.lower() == "выход":
print("Пока!")
break
# break — выход из цикла while (урок 1.4)
# Добавляем твоё сообщение в историю
history.append({"role": "user", "content": user_input})
# Отправляем ВСЮ историю Claude
# Именно так он "помнит" о чём вы говорили
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=history
# Передаём не одно сообщение, а весь список
# Claude видит весь разговор и отвечает с учётом контекста
)
# Достаём текст ответа
assistant_message = response.content[0].text
# Добавляем ответ Claude в историю
history.append({"role": "assistant", "content": assistant_message})
# Теперь в history: твоё сообщение + ответ Claude
# В следующем цикле Claude увидит весь предыдущий разговор
# Показываем ответ
print(f"\nClaude: {assistant_message}")
Запусти:
python3 chat.py
Теперь у тебя настоящий чат! Попробуй:
Ты: Меня зовут Катя
Claude: Привет, Катя! Рада познакомиться!...
Ты: Как меня зовут?
Claude: Тебя зовут Катя!
Ты: выход
Пока!
Claude "помнит" имя, потому что мы отправляем ему всю историю каждый раз.
Вот что происходит внутри при каждом сообщении:
Сообщение 1:
history = [
{"role": "user", "content": "Меня зовут Катя"}
]
→ Claude отвечает → добавляем ответ в history
Сообщение 2:
history = [
{"role": "user", "content": "Меня зовут Катя"},
{"role": "assistant", "content": "Привет, Катя!..."},
{"role": "user", "content": "Как меня зовут?"}
]
→ Claude видит ВСЕ три сообщения → знает что ты Катя
У Claude нет своей памяти (урок 2.1). "Память" — это наш список history, который мы отправляем целиком с каждым запросом.
Добавим system — инструкцию, которая задаёт поведение Claude:
from anthropic import Anthropic
client = Anthropic()
history = []
# Системное сообщение — "характер" нашего бота
system_prompt = "Ты — бизнес-ментор для предпринимателей в AI-сфере. Отвечай конкретно, с примерами, без воды. Если не знаешь — честно скажи."
# Попробуй другие:
# "Ты — саркастичный программист, который объясняет всё через мемы"
# "Ты — финансовый аналитик. Только факты и цифры."
# "Ты — переводчик. Переводи всё на английский."
print("AI Бизнес-ментор. Задавай вопросы!")
print("Выход — напиши 'выход'")
print("-" * 40)
while True:
user_input = input("\nТы: ")
if user_input.lower() == "выход":
print("Удачи в бизнесе!")
break
history.append({"role": "user", "content": user_input})
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
system=system_prompt, # вот тут задаём характер
messages=history
)
assistant_message = response.content[0].text
history.append({"role": "assistant", "content": assistant_message})
print(f"\nМентор: {assistant_message}")
system — это как роль в театре. Ты говоришь Claude: "ты теперь бизнес-ментор" — и он ведёт себя соответственно.
Ты создала три вещи:
systemЭто тот же принцип, на котором работают ChatGPT, Claude.ai и все AI-чаты. Разница только в интерфейсе: у них красивый сайт, а у тебя — терминал. Внутри — один и тот же API.
К концу курса мы сделаем из этого полноценный продукт — с красивым дизайном, который нравится именно тебе, работающий 24/7 на твоём сервере, доступный с телефона из любой точки мира. И он будет дешевле, чем подписка на ChatGPT — потому что ты платишь только за API (за реальное использование), а не $20/месяц за фиксированную подписку.
Создай файл, запусти Версию 2, поговори с Claude. Проверь, что он помнит контекст.
Измени system_prompt и создай бота с уникальным характером. Поговори с ним.
Добавь после print(f"\nClaude: ...") эту строку:
print(f" [токены: {response.usage.input_tokens} вход + {response.usage.output_tokens} выход]")
Поговори 5-6 сообщений и посмотри, как растёт количество входных токенов. Подумай почему.
Сделай бота-переводчика: system = "Переводи всё, что пишет пользователь, на английский. Ничего больше не делай." Проверь, работает ли.
Задача 1: Что делает строка history.append({"role": "user", "content": user_input})?
Задача 2: Что будет, если убрать строку history.append({"role": "assistant", ...})?
Задача 3: Зачем нужен system параметр?
pip install anthropic — устанавливает SDK для работы с Claude.env — хранит API-ключ безопасноclient.messages.create() — отправляет запрос к Claudehistory — список сообщений, который создаёт "память" чатаsystem — задаёт характер и роль бота| Термин | Что значит |
|---|---|
| anthropic (библиотека) | Python-пакет (SDK) от Anthropic, который упрощает отправку запросов к Claude из кода. |
| Anthropic() | Команда, которая создаёт клиент — объект для общения с API Claude. |
| messages.create() | Метод клиента, который отправляет сообщение к Claude и возвращает его ответ. |
| role (user/assistant/system) | Роль автора сообщения: user — ты, assistant — Claude, system — инструкция для поведения Claude. |
| content | Поле в сообщении, которое содержит сам текст — твой вопрос или ответ Claude. |
| model | Параметр, указывающий какую именно модель Claude использовать (например, claude-sonnet-4-20250514). |
| max_tokens | Максимальное количество токенов, которое Claude может использовать в своём ответе. |
| System prompt | Специальная инструкция, которая задаёт роль и поведение Claude на весь разговор. |
| .env | Файл для хранения секретных данных (например, API-ключа), который не попадает в Git. |
| API-ключ | Уникальный секретный код, который подтверждает твою личность при обращении к API. |
| pip install | Команда для установки Python-пакетов из интернета (например, pip install anthropic). |
| import | Команда в Python, которая подключает установленную библиотеку к твоему коду. |
В следующем уроке — Prompt Engineering. Ты узнаешь, как формулировать задачи для AI, чтобы получать точные ответы. Это навык, который определяет разницу между "AI ерунду пишет" и "AI делает ровно то, что мне нужно".