# Урок 3: Токены — валюта общения с LLM

> [HTML-версия](https://learnvibecoding.ru/publiclessons/urok-3-tokeny-valyuta-obshcheniya-s-llm) · [Индекс для LLM](https://learnvibecoding.ru/llms.txt) · [Политика использования материалов](https://learnvibecoding.ru/politika-materialov)
> Материалы защищены. Обучение LLM без согласия запрещено. При разрешённом использовании — обязательна прямая ссылка на страницу-источник.

**Курс:** Основы ИИ обновленный

# Урок 3: Токены — валюта общения с LLM

## Контекст

Ты знаешь как LLM устроены (урок 2). Но ты не понимаешь что такое "токены" и почему это важно. Ты видел что API стоит "0.01$ за 1000 токенов" и не знаешь почему именно токены, а не слова?

**Что будешь уметь:** После урока ты сможешь:
- Считать примерно сколько токенов в тексте
- Объяснить почему модель работает с токенами, а не словами
- Рассчитать стоимость API вызова (сколько денег потратишь)
- Написать более экономный промпт (меньше токенов = дешевле)
- Понимать контекстное окно (это про токены, а не слова)

**Главное:** Токены это база для всего. Без понимания токенов ты:
- Будешь платить больше чем нужно
- Не сможешь оптимизировать промпты
- Не поймёшь как работает контекстное окно (урок 4)

---

## Блок 0: Когда это нужно знать

### Если ты просто спрашиваешь у ChatGPT...
...то можешь не считать токены.

### Но если ты:
- **Создаёшь продукт** где каждое обращение к API = затраты
- **Внедряешь AI в компанию** и нужно считать бюджет
- **Пишешь промпты** для больших документов
- **Анализируешь логи** использования модели
- Хочешь **оптимизировать стоимость**

...то **КРИТИЧНО** понимать токены.

| Ситуация | Почему нужны токены |
|----------|-------------------|
| "Почему API вызов стоил $0.50?" | Потому что было 5000 токенов |
| "Как сделать дешевле?" | Меньше токенов = меньше денег |
| "Почему ошибка про контекст?" | Потому что контекст 200k = 200000 токенов |
| "Может ли модель обработать мой файл?" | Нужно считать токены в файле |

---

## Блок 1: Что такое токен (простое объяснение)

### Токен это не слово

Ошибка номер 1: думать что токен = слово.

```
НЕПРАВИЛЬНО:
"Привет, как дела?" = 4 слова = 4 токена

ПРАВИЛЬНО:
"Привет, как дела?" = 3-4 токена (зависит как split)
```

### Что такое токен реально?

**Токен** это **кусок текста** который модель обрабатывает.

Размер куска непредсказуемый:
- Часто это слово целое
- Иногда это часть слова
- Иногда это пунктуация
- Иногда это пробел

Примеры:

```
ТЕКСТ: "Hello"
└─ 1 токен: "Hello"

ТЕКСТ: "Beautiful"
└─ 2 токена: "Beautiful" → разделится как "Beau" + "tiful"
   (так как слово редкое, в токенайзере разбивается)

ТЕКСТ: "привет"
└─ 2 токена: "при" + "вет" (русский расходует больше токенов)

ТЕКСТ: "123456"
└─ 1 токен: "123456"

ТЕКСТ: "Hello, world!"
└─ 5 токенов: "Hello" + "," + " world" + "!"
```

**Почему не просто слово?**

Потому что модель работает с **кодовыми таблицами**:

```
ТОКЕНАЙЗЕР (tokenizer) это таблица:
┌─────┬──────────┐
│  ID │  Текст   │
├─────┼──────────┤
│   1 │ "a"      │
│   2 │ "the"    │
│   3 │ "Hello"  │
│  ...│ ...      │
│ 512 │ "Hello " │
│ 513 │ " world" │
│...  │ ...      │
└─────┴──────────┘

"Hello world" → ID 512 + ID 513 (2 токена)
```

Таблица содержит:
- Частые слова (целые)
- Редкие слова (разбитые на куски)
- Специальные символы (отдельно)
- Пробелы и пунктуация

![Language of Machines: how tokenizer breaks text into tokens](https://nhvwqitwebmmswnjylop.supabase.co/storage/v1/object/public/Pictures%20for%20course/AI%20basics%20new%20course/05_Language_Machines_Tokens.png)

### Почему используются токены вместо символов?

Если использовать символы:

```
"Hello world" = 11 символов (вместе с пробелом)

Модель должна обработать 11 раз?
```

Это медленно.

Если использовать токены:

```
"Hello world" = 2 токена

Модель обработает 2 раза.
Быстрее.
```

**Плюс:** токены могут быть **целые слова** (для частых слов это быстрее обрабатывать), или куски (для редких).

---

## Блок 2: Сколько токенов в разных языках?

### Важный факт: разные языки = разное количество токенов

```
АНГЛИЙСКИЙ:
"Hello world, how are you?" = примерно 7 токенов
100 слов = примерно 130 токенов

РУССКИЙ:
"Привет мир, как ты?" = примерно 8-9 токенов
100 слов = примерно 150-170 токенов

КИТАЙСКИЙ (иероглифы):
"你好世界，你好吗？" = примерно 15-20 токенов
100 иероглифов = примерно 150-200 токенов
```

**Почему?**

Английский оптимизирован под токенайзер (создана на английских текстах).

Русский, китайский — не оптимизированы → больше токенов на одно значение.

**Практический результат:**

```
ЕСЛИ делаешь API на разных языках:

Русский текст (1000 слов) = ~1500-1700 токенов = дороже
Английский текст (1000 слов) = ~1300 токенов = дешевле

Разница может быть 20-30% в стоимости просто за язык!
```

---

## Блок 3: Как считать токены?

### Способ 1: Примерный расчёт (в уме)

**Правило большого пальца:**

```
Английский:
1 слово ≈ 1.3 токена
1000 слов ≈ 1300 токенов

Русский:
1 слово ≈ 1.5 токена
1000 слов ≈ 1500 токенов

Код:
1 строка = 2-10 токенов (зависит от кода)
100 строк = 200-1000 токенов
```

### Способ 2: OpenAI Token Counter (если OpenAI)

https://platform.openai.com/tokenizer

```
1. Вставишь текст
2. Видишь сколько токенов
3. Можешь экспортировать JSON
```

### Способ 3: Programmatically (в коде)

**Python с OpenAI:**
```python
import tiktoken

encoding = tiktoken.encoding_for_model("gpt-4")
tokens = encoding.encode("Hello world, how are you?")
print(len(tokens))  # 7
```

**Python с Anthropic Claude:**
```python
from anthropic import Anthropic

client = Anthropic()
response = client.messages.count_tokens(
    model="claude-3-5-sonnet-20241022",
    messages=[
        {"role": "user", "content": "Hello world, how are you?"}
    ]
)
print(response.input_tokens)  # примерно 13
```

### Способ 4: Команда в терминале

```bash
# Для OpenAI GPT моделей
curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  | grep tokenizer
```

---

## Блок 4: Примеры: сколько токенов в реальных текстах?

### Пример 1: Короткий промпт

```
ПРОМПТ:
"Напиши стихотворение про кота"

ТОКЕНЫ: 10-12

СТОИМОСТЬ (Claude 3.5):
Input: 12 токенов × $0.003 / 1M = $0.000036
Итого: ~$0.000036 (практически бесплатно)
```

### Пример 2: Длинный промпт с контекстом

```
ПРОМПТ:
"Вот статья из Википедии о котах [1000 слов]:
... [текст] ...

Вопрос: какой рекорд по прыжкам?"

ТОКЕНЫ: ~1500 (статья) + 200 (вопрос) = 1700 токенов

ОТВЕТ: ~50 токенов

СТОИМОСТЬ:
Input: 1700 токенов × $0.003/1M = $0.0051
Output: 50 токенов × $0.015/1M = $0.00075
Итого: ~0.006 центов (1 копейка примерно)
```

### Пример 3: Анализ PDF документа

```
ДОКУМЕНТ: 30-страничный контракт
ТЕКСТА: ~30000 слов

ТОКЕНЫ:
Русский текст: 30000 × 1.5 = 45000 токенов

ОТВЕТ: 500 токенов

СТОИМОСТЬ:
Input: 45000 × $0.003/1M = $0.135
Output: 500 × $0.015/1M = $0.0075
Итого: ~0.14$ (14 копеек)

Если вызвать 100 раз: 14$ за день
```

### Пример 4: Batch обработка файлов

```
ЗАДАЧА: проверить 1000 писем на спам

ПИСЬМО: среднее 500 слов

ВСЕ ПИСЬМА: 1000 × 500 = 500000 слов

ТОКЕНЫ: 500000 × 1.3 (английский) = 650000 токенов

ОТВЕТЫ: 1000 × 50 токенов = 50000 токенов

СТОИМОСТЬ:
Input: 650000 × $0.003/1M = $1.95
Output: 50000 × $0.015/1M = $0.75
ИТОГО: ~$2.70

Но это за один проход. Если улучшать → несколько проходов.
```

![Level 2: Practice with Tokens — практика подсчёта токенов](https://nhvwqitwebmmswnjylop.supabase.co/storage/v1/object/public/Pictures%20for%20course/AI%20basics%20new%20course/18_Level_2_Practice_Tokens.png)

---

## Блок 5: Токены в контекстном окне

Мы будем подробнее про контекст в уроке 4, но важный момент **здесь**:

### Контекстное окно считается в ТОКЕНАХ, не словах!

```
МОДЕЛЬ: Claude 3.5 Sonnet

Контекстное окно: 200,000 токенов

ЭТО ЗНАЧИТ:
200,000 токенов / 1.3 (английский) = ~154,000 слов

ЭТО ЗНАЧИТ:
200,000 токенов / 1.5 (русский) = ~133,000 слов

Примерно 400-500 страниц текста одновременно.
```

![Context Window: memory limits and boundaries of LLM models](https://nhvwqitwebmmswnjylop.supabase.co/storage/v1/object/public/Pictures%20for%20course/AI%20basics%20new%20course/19_Context_Window_Memory_Limits.png)

### Пример: заполнение контекста

```
Начало разговора:
КОНТЕКСТ: 200,000 токенов доступно

ТЫ ПИШЕШЬ: 
  Промпт = 5,000 токенов
  Остаток: 195,000 доступно

МОДЕЛЬ ОТВЕЧАЕТ:
  Ответ = 2,000 токенов
  Остаток: 193,000 доступно

ТЫ ПИШЕШЬ ЕЩЁ:
  Вопрос = 3,000 токенов
  Остаток: 190,000 доступно

МОДЕЛЬ ОТВЕЧАЕТ:
  Ответ = 4,000 токенов
  Остаток: 186,000 доступно

... после 50 обменов ...

Остаток: 50,000 токенов

Когда я напишу промпт на 60,000 токенов:
└─ ОШИБКА! Не хватает контекста.
```

---

## Блок 6: Оптимизация промптов (экономия токенов)

Если знаешь что токены = деньги, можешь оптимизировать.

### Способ 1: Убрать лишнее

ВАРИАНТ 1 (плохо, 150 токенов):
```
Привет! Я хочу чтобы ты мне помог со следующей задачей. 
Мне нужно чтобы ты проанализировал этот текст 
и выделил ключевые моменты.
Вот текст:
[текст]
```

ВАРИАНТ 2 (хорошо, 120 токенов):
```
Анализируй текст. Ключевые моменты:
[текст]
```

ЭКОНОМИЯ: 30 токенов = деньги экономлены.

### Способ 2: Использовать сокращения

ВАРИАНТ 1 (плохо):
```
Следующий документ это важный финансовый отчет. 
Пожалуйста, создай резюме этого отчета.
```

ВАРИАНТ 2 (хорошо):
```
Резюме финансового отчета:
```

### Способ 3: Структурировать лучше

ВАРИАНТ 1 (плохо, 200 токенов):
```
Вот список продуктов с ценами:
- Яблоки, цена 50 рублей
- Апельсины, цена 80 рублей
- Бананы, цена 30 рублей
- Груши, цена 70 рублей
```

ВАРИАНТ 2 (хорошо, 150 токенов):
```
Цены:
- Яблоки: 50р
- Апельсины: 80р
- Бананы: 30р
- Груши: 70р
```

ВАРИАНТ 3 (ещё лучше, 100 токенов):
```
Цены: яблоки 50р, апельсины 80р, бананы 30р, груши 70р
```

### Способ 4: Сжимать контекст (RAG вместо полного текста)

ВАРИАНТ 1 (плохо, 50,000 токенов):
```
Вот полная энциклопедия Википедии про кошек (10000 страниц).
Ответь на вопрос: какой рекорд скорости?
```

ВАРИАНТ 2 (хорошо, 500 токенов):
```
Кошки могут прыгать на 2.4 метра и развивать скорость до 50 км/ч.
Рекорд скорости: 50 км/ч.

Вопрос: какой рекорд?
```

**Практический результат:**
Вариант 1: 50,000 × $0.003 = $0.15 за запрос
Вариант 2: 500 × $0.003 = $0.0015 за запрос

**Экономия: 100x дешевле** (только смешнее выглядит но суть та же).

---

## Блок 7: Стоимость API разных моделей

### Таблица: сколько стоят токены?

| Модель | Input цена | Output цена | Контекст |
|--------|-----------|-----------|---------|
| **Claude 3.5 Sonnet** | $3/1M | $15/1M | 200k |
| **GPT-4 Turbo** | $10/1M | $30/1M | 128k |
| **Llama 70B** | $0.8/1M | $1/1M | 4k (обычно) |
| **Mistral Large** | $2/1M | $6/1M | 32k |
| **Gemini 1.5 Pro** | $2.5/1M | $10/1M | 1M |

**Читать таблицу:**
```
Claude 3.5: $3 за 1 миллион входных токенов
Значит: $0.003 за 1000 токенов
Значит: $0.000003 за 1 токен
```

### Какую выбрать?

```
ЕСЛИ дешево:
  → Llama 70B (можно запустить локально, бесплатно)
  → Mistral (дешево, хорошо)

ЕСЛИ баланс цена/качество:
  → Claude 3.5 Sonnet (хороша, не очень дорого)
  → GPT-4 (мощна, но дороже)

ЕСЛИ нужен большой контекст:
  → Gemini 1.5 Pro (1 миллион токенов!)
  → Claude 3.5 (200k хватает)
```

---

## Блок 8: Практические советы по экономии

### 1. Кеширование (не отправлять одинаковое дважды)

```
ПЛОХО:
Запрос 1: "Вот инструкция [5000 токенов]. Вопрос 1?"
Запрос 2: "Вот инструкция [5000 токенов]. Вопрос 2?" ← повторяются 5000!
Запрос 3: "Вот инструкция [5000 токенов]. Вопрос 3?" ← повторяются 5000!

Итого: 15000 токенов на инструкции

ХОРОШО:
(Claude поддерживает кеширование):
Запрос 1: "Вот инструкция [5000 токенов]. Вопрос 1?"
Запрос 2: [инструкция кеширована] "Вопрос 2?" ← 5000 токенов экономится!
Запрос 3: [инструкция кеширована] "Вопрос 3?" ← 5000 токенов экономится!

Итого: 5000 токенов (инструкция один раз) + несколько вопросов
```

Экономия: 66% дешевле.

### 2. Чистый промпт (не включай историю)

```
ПЛОХО (пакетная обработка):
Для каждого письма отправляешь всю историю разговора
1000 писем × 5000 токенов историю = 5 миллионов токенов зря

ХОРОШО:
Каждое письмо анализируешь отдельно, без истории
1000 писем × 500 токенов письмо = 500k токенов

Экономия: 10x
```

### 3. Использовать дешевые модели для простого

```
ПЛОХО:
"Переведи на английский" → GPT-4 ($10/1M)

ХОРОШО:
"Переведи на английский" → Mistral ($2/1M)

Разница: 5x дешевле, качество примерно такое же для простого.
```

### 4. Сжимать содержимое перед анализом

```
ПЛОХО:
100-страничный документ → отправить целиком = 50k токенов

ХОРОШО:
1. Сначала сделать саммари документа (5k токенов)
2. Потом анализировать саммари

Итого: 50k + 5k = 55k (но второй способ дешевле)
```

---

## Блок 9: Заблуждения о токенах

### ❌ Заблуждение 1: "Токены = слова"

**На самом деле:** 1 слово = 1-3 токена обычно.

Русское слово может быть 2 токена (неоптимизировано).
Английское слово может быть 0.7-1 токена (оптимизировано).

### ❌ Заблуждение 2: "Если я платит за input, то output бесплатный"

**На самом деле:** Платишь за input И за output.

```
Input: 1000 токенов × $3/1M = $0.003
Output: 500 токенов × $15/1M = $0.0075
ИТОГО: $0.0105 (больше за output!)
```

Output обычно дороже потому что генерировать сложнее.

### ❌ Заблуждение 3: "Контекстное окно = токены"

**На самом деле:** Контекстное окно ДА считается в токенах.

```
Контекстное окно 128k = 128,000 токенов
Но это НЕ значит что можешь писать 128,000 слов (это 96,000 слов)
```

### ❌ Заблуждение 4: "Все модели считают токены одинаково"

**На самом деле:** Разные модели могут разные токенайзеры использовать.

```
"Hello world" в GPT-4: 2 токена
"Hello world" в Claude: может быть 3-4 токена

Всегда проверяй текущий tokenizer!
```

---

## Блок 10: Карта токенов в процессе

```
┌──────────────────────────────────────────────────────┐
│  ТЫ ПИШЕШЬ ПРОМПТ                                   │
│  "Привет, как ты?"                                  │
└──────────────┬───────────────────────────────────────┘
               │
               ↓
┌──────────────────────────────────────────────────────┐
│  TOKENIZER РАЗБИВАЕТ НА КУСКИ                        │
│  "Привет" → 1 токен                                 │
│  "," → 1 токен                                      │
│  " как" → 1 токен                                   │
│  " ты" → 1 токен                                    │
│  "?" → 1 токен                                      │
│                                                      │
│  ВСЕГО: 5 токенов                                   │
└──────────────┬───────────────────────────────────────┘
               │
               ↓
┌──────────────────────────────────────────────────────┐
│  МОДЕЛЬ ОБРАБАТЫВАЕТ                                │
│  5 токенов × веса нейронов × слои × attention      │
│  ↓                                                  │
│  Вычисляет вероятности следующего токена           │
└──────────────┬───────────────────────────────────────┘
               │
               ↓
┌──────────────────────────────────────────────────────┐
│  МОДЕЛЬ ГЕНЕРИРУЕТ ОТВЕТ                            │
│  Токен 1: "Привет" → 1 токен                       │
│  Токен 2: "!" → 1 токен                            │
│  Токен 3: "Я" → 1 токен                            │
│  Токен 4: " ..." → 1 токен                         │
│  ...генерирует пока не скажешь stop...             │
│                                                      │
│  ОТВЕТ: 50 токенов (примерно)                       │
└──────────────┬───────────────────────────────────────┘
               │
               ↓
┌──────────────────────────────────────────────────────┐
│  СЧЁТ                                               │
│  Input: 5 токенов × $0.003/1M = $0.000015          │
│  Output: 50 токенов × $0.015/1M = $0.00075         │
│  ИТОГО: $0.00076 за один вызов                      │
│                                                      │
│  Если 1000 вызовов: $0.76 в день                   │
└──────────────────────────────────────────────────────┘
```

---

## 🌉 Переход: от токенов к контексту

✅ **Что мы знаем:**
- Что такое токен (кусок текста)
- Как считать токены (примерный расчёт и инструменты)
- Как эта связь с деньгами (цена за токены)
- Как оптимизировать (меньше токенов = дешевле)

✅ **Что мы НЕ знаем:**
- Как контекстное окно влияет на качество
- Почему не можешь просто взять большую модель с 1M токенов
- Как RAG решает проблему контекста
- Когда контекст переполняется, что происходит?

**В следующем уроке (0.4)** разбираемся с контекстным окном:
- Сколько токенов вмещает каждая модель
- Что происходит когда контекст переполняется
- Когда нужно использовать RAG
- Как рассчитать будет ли текст влезать

**Почему это нужно:** Потому что контекст это не просто число, это ограничение возможностей модели.

---

## ✅ Финальный чеклист

- [ ] Понимаю что токен это не слово
- [ ] Знаю что токены = валюта (токены = деньги)
- [ ] Могу примерно считать токены (1 англ. слово ≈ 1.3 токена)
- [ ] Знаю как считать токены точно (tokenizer, OpenAI API, etc)
- [ ] Понимаю почему разные языки = разное кол-во токенов
- [ ] Знаю как рассчитать стоимость API вызова
- [ ] Понимаю как оптимизировать промпты (меньше токенов)
- [ ] Знаю что контекстное окно считается в токенах
- [ ] Могу объяснить разницу между input и output в цене
- [ ] Понимаю что кеширование экономит токены

[Все уроки](https://learnvibecoding.ru/publiclessons.md) · HTML: https://learnvibecoding.ru/publiclessons