Как искусственный интеллект создает ответы
Предсказание токенов, вероятности и объяснение того, почему искусственный интеллект не «думает» как человек.
«Как искусственный интеллект создает ответы» — бесплатный урок AI Prompt Engineering на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Prompt Engineering, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Prompt Engineering содержит 4 уроков всего.
Текст как задача на вероятности
В основе языковая модель делает одно: предсказывает следующий токен на основе всех предшествующих ему токенов.
Токен — небольшая единица текста, примерно слово или его фрагмент. Модель назначает вероятность каждому токену в своём словаре и выбирает один. Затем повторяет этот процесс, токен за токеном, пока не создаст полный ответ.
Что такое токен
Токены — атомарные единицы обработки текста LLM. Английский текст обычно разбивается на токены примерно так:
- Распространённые слова → по 1 токену каждое (
the,run) - Менее распространённые слова → разбиваются на 2–3 токена (
running→run+ning) - Знаки препинания и пробелы → часто являются отдельными токенами
Модели вроде GPT-4o и Claude используют токенизаторы, обрабатывающие более 100 тыс. элементов словаря, включая фрагменты слов на многих языках.
import tiktoken
encoding = tiktoken.encoding_for_model('gpt-4o')
sentence = 'The temperature parameter controls randomness in token selection.'
tokens = encoding.encode(sentence)
token_strings = [encoding.decode([t]) for t in tokens]
print(f'Sentence: {sentence}')
print(f'Token count: {len(tokens)}')
print(f'Tokens: {token_strings}')Авторегрессионная генерация
Генерация является авторегрессионной: каждый новый токен добавляется к входным данным перед предсказанием следующего.
При генерации фразы «Небо голубое» модель:
- Видит «Небо» → предсказывает «голубое»
- Видит «Небо голубое» → предсказывает конец последовательности
Вот почему генерация замедляется для очень длинных выходных данных — для каждого токена требуется полный прямой проход.
# Simulated autoregressive token-by-token output via streaming
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
stream = client.chat.completions.create(
model='gpt-4o',
stream=True, # receive tokens as they are generated
messages=[{'role': 'user', 'content': 'Name five planets in our solar system.'}]
)
print('Tokens arriving one by one:')
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end='', flush=True)
print() # newline at endТемпература: управление случайностью
Температура — число от 0 до 2, которое масштабирует распределение вероятностей перед выборкой:
- Температура 0: всегда выбирается наиболее вероятный токен — детерминированно, с повторениями
- Температура 1: выборка по исходным вероятностям — сбалансированный режим
- Температура 2: вероятности выравниваются — результат очень случайный, иногда бессвязный
Используйте низкую температуру для фактических задач; более высокую — для творческой работы.
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
prompt = 'Continue this sentence with one word: The ocean is'
for temp in [0.0, 0.7, 1.5]:
response = client.chat.completions.create(
model='gpt-4o',
temperature=temp,
max_tokens=5,
messages=[{'role': 'user', 'content': prompt}]
)
word = response.choices[0].message.content.strip()
print(f'Temperature {temp}: "{word}"')Почему ответы различаются при повторных запусках
Даже при одном и том же запросе два запуска одной модели могут дать разные результаты. Это происходит потому, что:
- Выборка носит вероятностный характер — модель выбирает из распределения, а не из таблицы соответствий
- Небольшие численные различия в вычислениях с плавающей точкой могут накапливаться
- Параллелизм оборудования вносит недетерминированность
Установите temperature=0 и seed (если поддерживается), чтобы добиться максимальной воспроизводимости.
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
prompt = 'Give me a one-word color that feels calm.'
for run in range(3):
response = client.chat.completions.create(
model='gpt-4o',
temperature=1.0, # randomness ON
max_tokens=5,
messages=[{'role': 'user', 'content': prompt}]
)
print(f'Run {run + 1}: {response.choices[0].message.content.strip()}')
# For reproducible outputs use seed + temperature=0
response = client.chat.completions.create(
model='gpt-4o',
temperature=0,
seed=42,
max_tokens=5,
messages=[{'role': 'user', 'content': prompt}]
)
print(f'Deterministic: {response.choices[0].message.content.strip()}')Выборка top-p
Выборка top-p (выборка по ядру) — ещё один способ управлять случайностью. Вместо масштабирования всех вероятностей она ограничивает выборку наименьшим набором токенов, совокупная вероятность которых превышает p.
top_p=0.1: только самые вероятные токены (консервативный режим)top_p=0.9: более широкий набор (творческий режим)top_p=1.0: все токены (полное распределение)
На практике большинство команд настраивают температуру, оставляя top-p равным 1.0.
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
# Conservative generation: top_p=0.1 restricts to high-confidence tokens
response_conservative = client.chat.completions.create(
model='gpt-4o',
top_p=0.1,
max_tokens=30,
messages=[{'role': 'user', 'content': 'What is the capital of Japan?'}]
)
# Creative generation: top_p=0.95 allows broader token pool
response_creative = client.chat.completions.create(
model='gpt-4o',
top_p=0.95,
max_tokens=30,
messages=[{'role': 'user', 'content': 'Write a poetic one-liner about the moon.'}]
)
print('Conservative:', response_conservative.choices[0].message.content)
print('Creative: ', response_creative.choices[0].message.content)Нет настоящего понимания — сопоставление шаблонов
LLMs не понимают язык так, как это делают люди. Это чрезвычайно сложные системы сопоставления шаблонов, обученные на огромных текстовых массивах.
Когда модель отвечает на вопрос «Что такое фотосинтез?», она не извлекает сохранённый факт — она генерирует последовательность токенов, которая статистически следует за шаблоном вопроса, основываясь на миллионах похожих документов, увиденных во время обучения.
# Demonstration: the model can produce plausible-sounding but wrong answers
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
# Asking about something nonsensical — model may still try to answer
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=128,
messages=[{
'role': 'user',
'content': (
'What is the boiling point of happiness in degrees Celsius? '
'Please just say "I cannot answer this" if the question makes no sense.'
)
}]
)
print(response.content[0].text)Обучение и вывод
«Знания» модели фиксируются во время обучения на большом текстовом массиве. На этапе вывода (когда Вы отправляете запрос) модель генерирует текст на основе этих зафиксированных знаний — она не обучается и не ищет информацию в интернете.
Это означает, что модель не может знать о событиях, произошедших после даты окончания обучения, не может открывать URL-адреса и не может проверить, изменился ли факт с момента обучения.
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
# Asking the model about its own knowledge cutoff
response = client.messages.create(
model='claude-opus-4-5',
max_tokens=128,
messages=[{
'role': 'user',
'content': (
'What is your knowledge cutoff date? '
'And can you access the internet right now to look up today\'s news?'
)
}]
)
print(response.content[0].text)Что происходит внутри прямого прохода
В общих чертах, предсказание каждого токена включает:
- Преобразование всех входных токенов в числовые представления
- Передачу их через множество слоёв трансформера (механизм внимания + прямое распространение)
- Формирование распределения вероятностей по всему словарю
- Выборку одного токена из этого распределения
Современные модели имеют миллиарды параметров, определяющих это преобразование, — все они были изучены во время обучения на человеческих текстах.
# You can inspect logprobs (token probabilities) to see the model's confidence
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
response = client.chat.completions.create(
model='gpt-4o',
max_tokens=5,
logprobs=True,
top_logprobs=3,
messages=[{'role': 'user', 'content': 'The opposite of hot is'}]
)
for token_info in response.choices[0].logprobs.content:
print(f'Chosen token: "{token_info.token}"')
for alt in token_info.top_logprobs:
import math
prob = round(math.exp(alt.logprob) * 100, 1)
print(f' Option "{alt.token}": {prob}% probability')Последовательности остановки
Последовательности остановки сообщают модели, что нужно прекратить генерацию, когда она выдаёт определённую строку. Это полезно для:
- предотвращения генерации моделью более одного ответа в списке
- остановки на таком разделителе, как
###или---END--- - обеспечения вывода в одну строку
Без последовательностей остановки модель генерирует текст, пока не достигнет max_tokens или не предскажет токен конца последовательности.
import openai
client = openai.OpenAI(api_key='sk-your-key-here')
# Stop after the first item in a numbered list
response = client.chat.completions.create(
model='gpt-4o',
max_tokens=64,
stop=['2.'], # halt as soon as '2.' appears
messages=[{
'role': 'user',
'content': 'List 5 programming languages, numbered 1 through 5.'
}]
)
print(response.choices[0].message.content)
print('Stop reason:', response.choices[0].finish_reason)Практические выводы для авторов запросов
Понимание механики генерации помогает Вам составлять более эффективные запросы:
- Используйте температуру 0 для задач, требующих единообразного и точного вывода
- Используйте температуру 0.7-1.0 для творческого письма
- Проверяйте факты — модель генерирует правдоподобный текст, но не гарантированную истину
- Используйте последовательности остановки, чтобы точно управлять длиной вывода
- Короткие запросы → более творческий, но менее управляемый вывод
- Подробные запросы → более ограниченный и сфокусированный вывод
import anthropic
client = anthropic.Anthropic(api_key='sk-ant-your-key-here')
# Low temperature for factual classification
fact_response = client.messages.create(
model='claude-opus-4-5',
max_tokens=8,
temperature=0, # deterministic
messages=[{'role': 'user', 'content': 'Is Paris the capital of France? Answer YES or NO only.'}]
)
print('Factual (temp=0):', fact_response.content[0].text.strip())
# Higher temperature for creative tasks
creative_response = client.messages.create(
model='claude-opus-4-5',
max_tokens=64,
temperature=1.0,
messages=[{'role': 'user', 'content': 'Write a surprising one-line poem about code.'}]
)
print('Creative (temp=1):', creative_response.content[0].text.strip())Проверка знаний
Вы узнали, как LLMs генерируют текст токен за токеном. Давайте проверим, насколько хорошо Вы поняли принцип работы температуры.
Разработчик создаёт чат-бота службы поддержки, который должен давать единообразные и точные ответы на вопросы о выставлении счетов. Какое значение температуры наиболее уместно?
Как ИИ генерирует ответы — повторение
Теперь Вы понимаете механизм, лежащий в основе каждого ответа ИИ:
- Модели предсказывают следующий токен по одному — это авторегрессионная генерация
- Температура определяет, сколько случайности добавляется при выборе токена
- Топ-p ограничивает выборку ядром токенов с высокой вероятностью
- Модель не понимает текст — она сопоставляет шаблоны в огромном масштабе
- Знания фиксируются во время обучения — без данных в реальном времени и доступа к интернету
- Последовательности остановки позволяют точно управлять концом вывода
Изучай AI Prompt Engineering с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 53
- Уроки
- 199
Часто задаваемые вопросы
Урок «Как искусственный интеллект создает ответы» бесплатный?
Да — полный текст урока «Как искусственный интеллект создает ответы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Prompt Engineering, подпишись на CoddyKit PRO. Курс AI Prompt Engineering содержит 4 уроков всего.
Чему я научусь в уроке «Как искусственный интеллект создает ответы»?
Предсказание токенов, вероятности и объяснение того, почему искусственный интеллект не «думает» как человек. Ты практикуешь AI Prompt Engineering с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Prompt Engineering?
Предыдущий опыт не требуется. AI Prompt Engineering на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Как искусственный интеллект создает ответы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Prompt Engineering?
Да. Каждый урок AI Prompt Engineering включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Устройство интерфейса чата
- Типы запросов, с которыми может работать искусственный интеллект
- Как искусственный интеллект создает ответы
- Чего искусственный интеллект не умеет